diff --git a/src/line/config-schema.ts b/src/line/config-schema.ts index 55804f81e5..f1efe42d9e 100644 --- a/src/line/config-schema.ts +++ b/src/line/config-schema.ts @@ -3,6 +3,22 @@ import { z } from "zod"; const DmPolicySchema = z.enum(["open", "allowlist", "pairing", "disabled"]); const GroupPolicySchema = z.enum(["open", "allowlist", "disabled"]); +const LineCommonConfigSchema = z.object({ + enabled: z.boolean().optional(), + channelAccessToken: z.string().optional(), + channelSecret: z.string().optional(), + tokenFile: z.string().optional(), + secretFile: z.string().optional(), + name: z.string().optional(), + allowFrom: z.array(z.union([z.string(), z.number()])).optional(), + groupAllowFrom: z.array(z.union([z.string(), z.number()])).optional(), + dmPolicy: DmPolicySchema.optional().default("pairing"), + groupPolicy: GroupPolicySchema.optional().default("allowlist"), + responsePrefix: z.string().optional(), + mediaMaxMb: z.number().optional(), + webhookPath: z.string().optional(), +}); + const LineGroupConfigSchema = z .object({ enabled: z.boolean().optional(), @@ -14,39 +30,13 @@ const LineGroupConfigSchema = z .strict(); const LineAccountConfigSchema = z - .object({ - enabled: z.boolean().optional(), - channelAccessToken: z.string().optional(), - channelSecret: z.string().optional(), - tokenFile: z.string().optional(), - secretFile: z.string().optional(), - name: z.string().optional(), - allowFrom: z.array(z.union([z.string(), z.number()])).optional(), - groupAllowFrom: z.array(z.union([z.string(), z.number()])).optional(), - dmPolicy: DmPolicySchema.optional().default("pairing"), - groupPolicy: GroupPolicySchema.optional().default("allowlist"), - responsePrefix: z.string().optional(), - mediaMaxMb: z.number().optional(), - webhookPath: z.string().optional(), + .extend({ groups: z.record(z.string(), LineGroupConfigSchema.optional()).optional(), }) .strict(); export const LineConfigSchema = z - .object({ - enabled: z.boolean().optional(), - channelAccessToken: z.string().optional(), - channelSecret: z.string().optional(), - tokenFile: z.string().optional(), - secretFile: z.string().optional(), - name: z.string().optional(), - allowFrom: z.array(z.union([z.string(), z.number()])).optional(), - groupAllowFrom: z.array(z.union([z.string(), z.number()])).optional(), - dmPolicy: DmPolicySchema.optional().default("pairing"), - groupPolicy: GroupPolicySchema.optional().default("allowlist"), - responsePrefix: z.string().optional(), - mediaMaxMb: z.number().optional(), - webhookPath: z.string().optional(), + .extend({ accounts: z.record(z.string(), LineAccountConfigSchema.optional()).optional(), groups: z.record(z.string(), LineGroupConfigSchema.optional()).optional(), })