| import { |
| BlockStreamingCoalesceSchema, |
| DmConfigSchema, |
| DmPolicySchema, |
| GroupPolicySchema, |
| MarkdownConfigSchema, |
| ReplyRuntimeConfigSchemaShape, |
| ToolPolicySchema, |
| requireOpenAllowFrom, |
| } from "openclaw/plugin-sdk/irc"; |
| import { z } from "zod"; |
|
|
| const IrcGroupSchema = z |
| .object({ |
| requireMention: z.boolean().optional(), |
| tools: ToolPolicySchema, |
| toolsBySender: z.record(z.string(), ToolPolicySchema).optional(), |
| skills: z.array(z.string()).optional(), |
| enabled: z.boolean().optional(), |
| allowFrom: z.array(z.union([z.string(), z.number()])).optional(), |
| systemPrompt: z.string().optional(), |
| }) |
| .strict(); |
|
|
| const IrcNickServSchema = z |
| .object({ |
| enabled: z.boolean().optional(), |
| service: z.string().optional(), |
| password: z.string().optional(), |
| passwordFile: z.string().optional(), |
| register: z.boolean().optional(), |
| registerEmail: z.string().optional(), |
| }) |
| .strict() |
| .superRefine((value, ctx) => { |
| if (value.register && !value.registerEmail?.trim()) { |
| ctx.addIssue({ |
| code: z.ZodIssueCode.custom, |
| path: ["registerEmail"], |
| message: "channels.irc.nickserv.register=true requires channels.irc.nickserv.registerEmail", |
| }); |
| } |
| }); |
|
|
| export const IrcAccountSchemaBase = z |
| .object({ |
| name: z.string().optional(), |
| enabled: z.boolean().optional(), |
| dangerouslyAllowNameMatching: z.boolean().optional(), |
| host: z.string().optional(), |
| port: z.number().int().min(1).max(65535).optional(), |
| tls: z.boolean().optional(), |
| nick: z.string().optional(), |
| username: z.string().optional(), |
| realname: z.string().optional(), |
| password: z.string().optional(), |
| passwordFile: z.string().optional(), |
| nickserv: IrcNickServSchema.optional(), |
| dmPolicy: DmPolicySchema.optional().default("pairing"), |
| allowFrom: z.array(z.union([z.string(), z.number()])).optional(), |
| groupPolicy: GroupPolicySchema.optional().default("allowlist"), |
| groupAllowFrom: z.array(z.union([z.string(), z.number()])).optional(), |
| groups: z.record(z.string(), IrcGroupSchema.optional()).optional(), |
| channels: z.array(z.string()).optional(), |
| mentionPatterns: z.array(z.string()).optional(), |
| markdown: MarkdownConfigSchema, |
| ...ReplyRuntimeConfigSchemaShape, |
| }) |
| .strict(); |
|
|
| export const IrcAccountSchema = IrcAccountSchemaBase.superRefine((value, ctx) => { |
| requireOpenAllowFrom({ |
| policy: value.dmPolicy, |
| allowFrom: value.allowFrom, |
| ctx, |
| path: ["allowFrom"], |
| message: 'channels.irc.dmPolicy="open" requires channels.irc.allowFrom to include "*"', |
| }); |
| }); |
|
|
| export const IrcConfigSchema = IrcAccountSchemaBase.extend({ |
| accounts: z.record(z.string(), IrcAccountSchema.optional()).optional(), |
| defaultAccount: z.string().optional(), |
| }).superRefine((value, ctx) => { |
| requireOpenAllowFrom({ |
| policy: value.dmPolicy, |
| allowFrom: value.allowFrom, |
| ctx, |
| path: ["allowFrom"], |
| message: 'channels.irc.dmPolicy="open" requires channels.irc.allowFrom to include "*"', |
| }); |
| }); |
|
|