Spaces:
Running
Running
| import { | |
| BlockStreamingCoalesceSchema, | |
| DmPolicySchema, | |
| GroupPolicySchema, | |
| MarkdownConfigSchema, | |
| requireOpenAllowFrom, | |
| } from "openclaw/plugin-sdk"; | |
| import { z } from "zod"; | |
| const MattermostAccountSchemaBase = z | |
| .object({ | |
| name: z.string().optional(), | |
| capabilities: z.array(z.string()).optional(), | |
| markdown: MarkdownConfigSchema, | |
| enabled: z.boolean().optional(), | |
| configWrites: z.boolean().optional(), | |
| botToken: z.string().optional(), | |
| baseUrl: z.string().optional(), | |
| chatmode: z.enum(["oncall", "onmessage", "onchar"]).optional(), | |
| oncharPrefixes: z.array(z.string()).optional(), | |
| requireMention: z.boolean().optional(), | |
| dmPolicy: DmPolicySchema.optional().default("pairing"), | |
| allowFrom: z.array(z.union([z.string(), z.number()])).optional(), | |
| groupAllowFrom: z.array(z.union([z.string(), z.number()])).optional(), | |
| groupPolicy: GroupPolicySchema.optional().default("allowlist"), | |
| textChunkLimit: z.number().int().positive().optional(), | |
| chunkMode: z.enum(["length", "newline"]).optional(), | |
| blockStreaming: z.boolean().optional(), | |
| blockStreamingCoalesce: BlockStreamingCoalesceSchema.optional(), | |
| }) | |
| .strict(); | |
| const MattermostAccountSchema = MattermostAccountSchemaBase.superRefine((value, ctx) => { | |
| requireOpenAllowFrom({ | |
| policy: value.dmPolicy, | |
| allowFrom: value.allowFrom, | |
| ctx, | |
| path: ["allowFrom"], | |
| message: | |
| 'channels.mattermost.dmPolicy="open" requires channels.mattermost.allowFrom to include "*"', | |
| }); | |
| }); | |
| export const MattermostConfigSchema = MattermostAccountSchemaBase.extend({ | |
| accounts: z.record(z.string(), MattermostAccountSchema.optional()).optional(), | |
| }).superRefine((value, ctx) => { | |
| requireOpenAllowFrom({ | |
| policy: value.dmPolicy, | |
| allowFrom: value.allowFrom, | |
| ctx, | |
| path: ["allowFrom"], | |
| message: | |
| 'channels.mattermost.dmPolicy="open" requires channels.mattermost.allowFrom to include "*"', | |
| }); | |
| }); | |