| import { z, type ZodTypeAny } from "zod"; |
| import { DmPolicySchema } from "../../config/zod-schema.core.js"; |
| import type { ChannelConfigSchema } from "./types.plugin.js"; |
|
|
| type ZodSchemaWithToJsonSchema = ZodTypeAny & { |
| toJSONSchema?: (params?: Record<string, unknown>) => unknown; |
| }; |
|
|
| type ExtendableZodObject = ZodTypeAny & { |
| extend: (shape: Record<string, ZodTypeAny>) => ZodTypeAny; |
| }; |
|
|
| export const AllowFromEntrySchema = z.union([z.string(), z.number()]); |
| export const AllowFromListSchema = z.array(AllowFromEntrySchema).optional(); |
|
|
| export function buildNestedDmConfigSchema() { |
| return z |
| .object({ |
| enabled: z.boolean().optional(), |
| policy: DmPolicySchema.optional(), |
| allowFrom: AllowFromListSchema, |
| }) |
| .optional(); |
| } |
|
|
| export function buildCatchallMultiAccountChannelSchema<T extends ExtendableZodObject>( |
| accountSchema: T, |
| ): T { |
| return accountSchema.extend({ |
| accounts: z.object({}).catchall(accountSchema).optional(), |
| defaultAccount: z.string().optional(), |
| }) as T; |
| } |
|
|
| export function buildChannelConfigSchema(schema: ZodTypeAny): ChannelConfigSchema { |
| const schemaWithJson = schema as ZodSchemaWithToJsonSchema; |
| if (typeof schemaWithJson.toJSONSchema === "function") { |
| return { |
| schema: schemaWithJson.toJSONSchema({ |
| target: "draft-07", |
| unrepresentable: "any", |
| }) as Record<string, unknown>, |
| }; |
| } |
|
|
| |
| |
| return { |
| schema: { |
| type: "object", |
| additionalProperties: true, |
| }, |
| }; |
| } |
|
|