Spaces:
Running
Running
| import { | |
| BlockStreamingCoalesceSchema, | |
| DmConfigSchema, | |
| DmPolicySchema, | |
| GroupPolicySchema, | |
| MarkdownConfigSchema, | |
| ToolPolicySchema, | |
| requireOpenAllowFrom, | |
| } from "openclaw/plugin-sdk"; | |
| import { z } from "zod"; | |
| export const NextcloudTalkRoomSchema = z | |
| .object({ | |
| requireMention: z.boolean().optional(), | |
| tools: ToolPolicySchema, | |
| skills: z.array(z.string()).optional(), | |
| enabled: z.boolean().optional(), | |
| allowFrom: z.array(z.string()).optional(), | |
| systemPrompt: z.string().optional(), | |
| }) | |
| .strict(); | |
| export const NextcloudTalkAccountSchemaBase = z | |
| .object({ | |
| name: z.string().optional(), | |
| enabled: z.boolean().optional(), | |
| markdown: MarkdownConfigSchema, | |
| baseUrl: z.string().optional(), | |
| botSecret: z.string().optional(), | |
| botSecretFile: z.string().optional(), | |
| apiUser: z.string().optional(), | |
| apiPassword: z.string().optional(), | |
| apiPasswordFile: z.string().optional(), | |
| dmPolicy: DmPolicySchema.optional().default("pairing"), | |
| webhookPort: z.number().int().positive().optional(), | |
| webhookHost: z.string().optional(), | |
| webhookPath: z.string().optional(), | |
| webhookPublicUrl: z.string().optional(), | |
| allowFrom: z.array(z.string()).optional(), | |
| groupAllowFrom: z.array(z.string()).optional(), | |
| groupPolicy: GroupPolicySchema.optional().default("allowlist"), | |
| rooms: z.record(z.string(), NextcloudTalkRoomSchema.optional()).optional(), | |
| historyLimit: z.number().int().min(0).optional(), | |
| dmHistoryLimit: z.number().int().min(0).optional(), | |
| dms: z.record(z.string(), DmConfigSchema.optional()).optional(), | |
| textChunkLimit: z.number().int().positive().optional(), | |
| chunkMode: z.enum(["length", "newline"]).optional(), | |
| blockStreaming: z.boolean().optional(), | |
| blockStreamingCoalesce: BlockStreamingCoalesceSchema.optional(), | |
| mediaMaxMb: z.number().positive().optional(), | |
| }) | |
| .strict(); | |
| export const NextcloudTalkAccountSchema = NextcloudTalkAccountSchemaBase.superRefine( | |
| (value, ctx) => { | |
| requireOpenAllowFrom({ | |
| policy: value.dmPolicy, | |
| allowFrom: value.allowFrom, | |
| ctx, | |
| path: ["allowFrom"], | |
| message: | |
| 'channels.nextcloud-talk.dmPolicy="open" requires channels.nextcloud-talk.allowFrom to include "*"', | |
| }); | |
| }, | |
| ); | |
| export const NextcloudTalkConfigSchema = NextcloudTalkAccountSchemaBase.extend({ | |
| accounts: z.record(z.string(), NextcloudTalkAccountSchema.optional()).optional(), | |
| }).superRefine((value, ctx) => { | |
| requireOpenAllowFrom({ | |
| policy: value.dmPolicy, | |
| allowFrom: value.allowFrom, | |
| ctx, | |
| path: ["allowFrom"], | |
| message: | |
| 'channels.nextcloud-talk.dmPolicy="open" requires channels.nextcloud-talk.allowFrom to include "*"', | |
| }); | |
| }); | |