




















@@ -0,0 +1,103 @@
1+import { z } from "zod";
2+import { ChannelBotLoopProtectionSchema } from "./zod-schema.channels-config.js";
3+import { ChannelHealthMonitorSchema } from "./zod-schema.channels.js";
4+import {
5+BlockStreamingCoalesceSchema,
6+DmConfigSchema,
7+DmPolicySchema,
8+GroupPolicySchema,
9+ReplyToModeSchema,
10+SecretRefSchema,
11+requireAllowlistAllowFrom,
12+requireOpenAllowFrom,
13+} from "./zod-schema.core.js";
14+import { sensitive } from "./zod-schema.sensitive.js";
15+16+export const GoogleChatDmSchema = z
17+.object({
18+enabled: z.boolean().optional(),
19+policy: DmPolicySchema.optional().default("pairing"),
20+allowFrom: z.array(z.union([z.string(), z.number()])).optional(),
21+})
22+.strict()
23+.superRefine((value, ctx) => {
24+requireOpenAllowFrom({
25+policy: value.policy,
26+allowFrom: value.allowFrom,
27+ ctx,
28+path: ["allowFrom"],
29+message:
30+'channels.googlechat.dm.policy="open" requires channels.googlechat.dm.allowFrom to include "*"',
31+});
32+requireAllowlistAllowFrom({
33+policy: value.policy,
34+allowFrom: value.allowFrom,
35+ ctx,
36+path: ["allowFrom"],
37+message:
38+'channels.googlechat.dm.policy="allowlist" requires channels.googlechat.dm.allowFrom to contain at least one sender ID',
39+});
40+});
41+42+export const GoogleChatGroupSchema = z
43+.object({
44+enabled: z.boolean().optional(),
45+requireMention: z.boolean().optional(),
46+botLoopProtection: ChannelBotLoopProtectionSchema.optional(),
47+users: z.array(z.union([z.string(), z.number()])).optional(),
48+systemPrompt: z.string().optional(),
49+})
50+.strict();
51+52+export const GoogleChatAccountSchema = z
53+.object({
54+name: z.string().optional(),
55+capabilities: z.array(z.string()).optional(),
56+enabled: z.boolean().optional(),
57+configWrites: z.boolean().optional(),
58+allowBots: z.boolean().optional(),
59+botLoopProtection: ChannelBotLoopProtectionSchema.optional(),
60+dangerouslyAllowNameMatching: z.boolean().optional(),
61+requireMention: z.boolean().optional(),
62+groupPolicy: GroupPolicySchema.optional().default("allowlist"),
63+groupAllowFrom: z.array(z.union([z.string(), z.number()])).optional(),
64+groups: z.record(z.string(), GoogleChatGroupSchema.optional()).optional(),
65+defaultTo: z.string().optional(),
66+serviceAccount: z
67+.union([z.string(), z.record(z.string(), z.unknown()), SecretRefSchema])
68+.optional()
69+.register(sensitive),
70+serviceAccountRef: SecretRefSchema.optional().register(sensitive),
71+serviceAccountFile: z.string().optional(),
72+audienceType: z.enum(["app-url", "project-number"]).optional(),
73+audience: z.string().optional(),
74+appPrincipal: z.string().optional(),
75+webhookPath: z.string().optional(),
76+webhookUrl: z.string().optional(),
77+botUser: z.string().optional(),
78+historyLimit: z.number().int().min(0).optional(),
79+dmHistoryLimit: z.number().int().min(0).optional(),
80+dms: z.record(z.string(), DmConfigSchema.optional()).optional(),
81+textChunkLimit: z.number().int().positive().optional(),
82+chunkMode: z.enum(["length", "newline"]).optional(),
83+blockStreaming: z.boolean().optional(),
84+blockStreamingCoalesce: BlockStreamingCoalesceSchema.optional(),
85+mediaMaxMb: z.number().positive().optional(),
86+replyToMode: ReplyToModeSchema.optional(),
87+actions: z
88+.object({
89+reactions: z.boolean().optional(),
90+})
91+.strict()
92+.optional(),
93+dm: GoogleChatDmSchema.optional(),
94+healthMonitor: ChannelHealthMonitorSchema,
95+typingIndicator: z.enum(["none", "message", "reaction"]).optional(),
96+responsePrefix: z.string().optional(),
97+})
98+.strict();
99+100+export const GoogleChatConfigSchema = GoogleChatAccountSchema.extend({
101+accounts: z.record(z.string(), GoogleChatAccountSchema.optional()).optional(),
102+defaultAccount: z.string().optional(),
103+});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。