Skip to content

classifierConfigSchema

const classifierConfigSchema: ZodEffects<ZodObject<{ categories: ZodDefault<ZodArray<ZodObject<{ description: ZodOptional<ZodString>; label: ZodString; name: ZodString; }, "strip", ZodTypeAny, { description?: string; label: string; name: string; }, { description?: string; label: string; name: string; }>, "many">>; detection: ZodDefault<ZodObject<{ accountCategory: ZodDefault<ZodString>; accountDomains: ZodDefault<ZodArray<ZodString, "many">>; automatedNamePattern: ZodDefault<ZodString>; brandNamePattern: ZodDefault<ZodString>; personalCategory: ZodDefault<ZodString>; personalDomains: ZodDefault<ZodArray<ZodString, "many">>; personalProviderDomains: ZodDefault<ZodArray<ZodString, "many">>; personalProviderPattern: ZodDefault<ZodString>; personalReplyExclusionPattern: ZodDefault<ZodString>; relayDomains: ZodDefault<ZodArray<ZodString, "many">>; }, "strip", ZodTypeAny, { accountCategory: string; accountDomains: string[]; automatedNamePattern: string; brandNamePattern: string; personalCategory: string; personalDomains: string[]; personalProviderDomains: string[]; personalProviderPattern: string; personalReplyExclusionPattern: string; relayDomains: string[]; }, { accountCategory?: string; accountDomains?: string[]; automatedNamePattern?: string; brandNamePattern?: string; personalCategory?: string; personalDomains?: string[]; personalProviderDomains?: string[]; personalProviderPattern?: string; personalReplyExclusionPattern?: string; relayDomains?: string[]; }>>; keepList: ZodDefault<ZodArray<ZodString, "many">>; needsAction: ZodDefault<ZodObject<{ exclusionKeywords: ZodOptional<ZodArray<ZodObject<{ phrase: ZodString; weight: ZodNumber; }, "strip", ZodTypeAny, { phrase: string; weight: number; }, { phrase: string; weight: number; }>, "many">>; highKeywords: ZodOptional<ZodArray<ZodObject<{ phrase: ZodString; weight: ZodNumber; }, "strip", ZodTypeAny, { phrase: string; weight: number; }, { phrase: string; weight: number; }>, "many">>; label: ZodDefault<ZodString>; languages: ZodDefault<ZodArray<ZodEnum<["en", "de"]>, "many">>; personalNeedsReplyBonus: ZodDefault<ZodNumber>; threshold: ZodDefault<ZodNumber>; unreadBonus: ZodDefault<ZodNumber>; windowDays: ZodDefault<ZodNumber>; }, "strip", ZodTypeAny, { exclusionKeywords?: object[]; highKeywords?: object[]; label: string; languages: ("en" | "de")[]; personalNeedsReplyBonus: number; threshold: number; unreadBonus: number; windowDays: number; }, { exclusionKeywords?: object[]; highKeywords?: object[]; label?: string; languages?: ("en" | "de")[]; personalNeedsReplyBonus?: number; threshold?: number; unreadBonus?: number; windowDays?: number; }>>; ops: ZodDefault<ZodObject<{ batchDelayMs: ZodDefault<ZodNumber>; batchSize: ZodDefault<ZodNumber>; maxItems: ZodOptional<ZodNumber>; progressEvery: ZodDefault<ZodNumber>; stallBackoffMs: ZodDefault<ZodNumber>; stallLimit: ZodDefault<ZodNumber>; }, "strip", ZodTypeAny, { batchDelayMs: number; batchSize: number; maxItems?: number; progressEvery: number; stallBackoffMs: number; stallLimit: number; }, { batchDelayMs?: number; batchSize?: number; maxItems?: number; progressEvery?: number; stallBackoffMs?: number; stallLimit?: number; }>>; provider: ZodDefault<ZodObject<{ baseUrl: ZodOptional<ZodString>; type: ZodDefault<ZodEnum<["jmap", "mcp"]>>; }, "strip", ZodTypeAny, { baseUrl?: string; type: "jmap" | "mcp"; }, { baseUrl?: string; type?: "jmap" | "mcp"; }>>; rules: ZodDefault<ZodArray<ZodDiscriminatedUnion<"kind", [ZodObject<{ address: ZodString; category: ZodString; kind: ZodLiteral<"sender">; }, "strip", ZodTypeAny, { address: string; category: string; kind: "sender"; }, { address: string; category: string; kind: "sender"; }>, ZodObject<{ category: ZodString; domain: ZodString; kind: ZodLiteral<"domain">; }, "strip", ZodTypeAny, { category: string; domain: string; kind: "domain"; }, { category: string; domain: string; kind: "domain"; }>, ZodObject<{ category: ZodString; kind: ZodLiteral<"name">; onlyForDomains: ZodOptional<ZodArray<…, …>>; pattern: ZodString; }, "strip", ZodTypeAny, { category: string; kind: "name"; onlyForDomains?: …[]; pattern: string; }, { category: string; kind: "name"; onlyForDomains?: …[]; pattern: string; }>]>, "many">>; sweep: ZodDefault<ZodObject<{ after: ZodOptional<ZodString>; targetLabel: ZodDefault<ZodString>; textHeuristic: ZodDefault<ZodString>; }, "strip", ZodTypeAny, { after?: string; targetLabel: string; textHeuristic: string; }, { after?: string; targetLabel?: string; textHeuristic?: string; }>>; }, "strip", ZodTypeAny, { categories: object[]; detection: { accountCategory: string; accountDomains: string[]; automatedNamePattern: string; brandNamePattern: string; personalCategory: string; personalDomains: string[]; personalProviderDomains: string[]; personalProviderPattern: string; personalReplyExclusionPattern: string; relayDomains: string[]; }; keepList: string[]; needsAction: { exclusionKeywords?: object[]; highKeywords?: object[]; label: string; languages: ("en" | "de")[]; personalNeedsReplyBonus: number; threshold: number; unreadBonus: number; windowDays: number; }; ops: { batchDelayMs: number; batchSize: number; maxItems?: number; progressEvery: number; stallBackoffMs: number; stallLimit: number; }; provider: { baseUrl?: string; type: "jmap" | "mcp"; }; rules: ({ address: string; category: string; kind: "sender"; } | { category: string; domain: string; kind: "domain"; } | { category: string; kind: "name"; onlyForDomains?: string[]; pattern: string; })[]; sweep: { after?: string; targetLabel: string; textHeuristic: string; }; }, { categories?: object[]; detection?: { accountCategory?: string; accountDomains?: string[]; automatedNamePattern?: string; brandNamePattern?: string; personalCategory?: string; personalDomains?: string[]; personalProviderDomains?: string[]; personalProviderPattern?: string; personalReplyExclusionPattern?: string; relayDomains?: string[]; }; keepList?: string[]; needsAction?: { exclusionKeywords?: object[]; highKeywords?: object[]; label?: string; languages?: ("en" | "de")[]; personalNeedsReplyBonus?: number; threshold?: number; unreadBonus?: number; windowDays?: number; }; ops?: { batchDelayMs?: number; batchSize?: number; maxItems?: number; progressEvery?: number; stallBackoffMs?: number; stallLimit?: number; }; provider?: { baseUrl?: string; type?: "jmap" | "mcp"; }; rules?: ({ address: string; category: string; kind: "sender"; } | { category: string; domain: string; kind: "domain"; } | { category: string; kind: "name"; onlyForDomains?: string[]; pattern: string; })[]; sweep?: { after?: string; targetLabel?: string; textHeuristic?: string; }; }>, { categories: object[]; detection: { accountCategory: string; accountDomains: string[]; automatedNamePattern: string; brandNamePattern: string; personalCategory: string; personalDomains: string[]; personalProviderDomains: string[]; personalProviderPattern: string; personalReplyExclusionPattern: string; relayDomains: string[]; }; keepList: string[]; needsAction: { exclusionKeywords?: object[]; highKeywords?: object[]; label: string; languages: ("en" | "de")[]; personalNeedsReplyBonus: number; threshold: number; unreadBonus: number; windowDays: number; }; ops: { batchDelayMs: number; batchSize: number; maxItems?: number; progressEvery: number; stallBackoffMs: number; stallLimit: number; }; provider: { baseUrl?: string; type: "jmap" | "mcp"; }; rules: ({ address: string; category: string; kind: "sender"; } | { category: string; domain: string; kind: "domain"; } | { category: string; kind: "name"; onlyForDomains?: string[]; pattern: string; })[]; sweep: { after?: string; targetLabel: string; textHeuristic: string; }; }, { categories?: object[]; detection?: { accountCategory?: string; accountDomains?: string[]; automatedNamePattern?: string; brandNamePattern?: string; personalCategory?: string; personalDomains?: string[]; personalProviderDomains?: string[]; personalProviderPattern?: string; personalReplyExclusionPattern?: string; relayDomains?: string[]; }; keepList?: string[]; needsAction?: { exclusionKeywords?: object[]; highKeywords?: object[]; label?: string; languages?: ("en" | "de")[]; personalNeedsReplyBonus?: number; threshold?: number; unreadBonus?: number; windowDays?: number; }; ops?: { batchDelayMs?: number; batchSize?: number; maxItems?: number; progressEvery?: number; stallBackoffMs?: number; stallLimit?: number; }; provider?: { baseUrl?: string; type?: "jmap" | "mcp"; }; rules?: ({ address: string; category: string; kind: "sender"; } | { category: string; domain: string; kind: "domain"; } | { category: string; kind: "name"; onlyForDomains?: string[]; pattern: string; })[]; sweep?: { after?: string; targetLabel?: string; textHeuristic?: string; }; }>

Defined in: src/config/schema.ts:102