Skip to content

Commit 50ded50

Browse files
committed
refactor: share channel config schema fragments
1 parent 4a8e039 commit 50ded50

7 files changed

Lines changed: 49 additions & 34 deletions

File tree

extensions/bluebubbles/src/config-schema.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { MarkdownConfigSchema, ToolPolicySchema } from "openclaw/plugin-sdk/bluebubbles";
22
import {
3-
AllowFromEntrySchema,
3+
AllowFromListSchema,
44
buildCatchallMultiAccountChannelSchema,
5+
DmPolicySchema,
6+
GroupPolicySchema,
57
} from "openclaw/plugin-sdk/compat";
68
import { z } from "zod";
79
import { buildSecretInputSchema, hasConfiguredSecretInput } from "./secret-input.js";
@@ -35,10 +37,10 @@ const bluebubblesAccountSchema = z
3537
serverUrl: z.string().optional(),
3638
password: buildSecretInputSchema().optional(),
3739
webhookPath: z.string().optional(),
38-
dmPolicy: z.enum(["pairing", "allowlist", "open", "disabled"]).optional(),
39-
allowFrom: z.array(AllowFromEntrySchema).optional(),
40-
groupAllowFrom: z.array(AllowFromEntrySchema).optional(),
41-
groupPolicy: z.enum(["open", "disabled", "allowlist"]).optional(),
40+
dmPolicy: DmPolicySchema.optional(),
41+
allowFrom: AllowFromListSchema,
42+
groupAllowFrom: AllowFromListSchema,
43+
groupPolicy: GroupPolicySchema.optional(),
4244
historyLimit: z.number().int().min(0).optional(),
4345
dmHistoryLimit: z.number().int().min(0).optional(),
4446
textChunkLimit: z.number().int().positive().optional(),

extensions/matrix/src/config-schema.ts

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1+
import {
2+
AllowFromListSchema,
3+
buildNestedDmConfigSchema,
4+
DmPolicySchema,
5+
GroupPolicySchema,
6+
} from "openclaw/plugin-sdk/compat";
17
import { MarkdownConfigSchema, ToolPolicySchema } from "openclaw/plugin-sdk/matrix";
28
import { z } from "zod";
39
import { buildSecretInputSchema } from "./secret-input.js";
410

5-
const allowFromEntry = z.union([z.string(), z.number()]);
6-
711
const matrixActionSchema = z
812
.object({
913
reactions: z.boolean().optional(),
@@ -14,22 +18,14 @@ const matrixActionSchema = z
1418
})
1519
.optional();
1620

17-
const matrixDmSchema = z
18-
.object({
19-
enabled: z.boolean().optional(),
20-
policy: z.enum(["pairing", "allowlist", "open", "disabled"]).optional(),
21-
allowFrom: z.array(allowFromEntry).optional(),
22-
})
23-
.optional();
24-
2521
const matrixRoomSchema = z
2622
.object({
2723
enabled: z.boolean().optional(),
2824
allow: z.boolean().optional(),
2925
requireMention: z.boolean().optional(),
3026
tools: ToolPolicySchema,
3127
autoReply: z.boolean().optional(),
32-
users: z.array(allowFromEntry).optional(),
28+
users: AllowFromListSchema,
3329
skills: z.array(z.string()).optional(),
3430
systemPrompt: z.string().optional(),
3531
})
@@ -49,17 +45,17 @@ export const MatrixConfigSchema = z.object({
4945
initialSyncLimit: z.number().optional(),
5046
encryption: z.boolean().optional(),
5147
allowlistOnly: z.boolean().optional(),
52-
groupPolicy: z.enum(["open", "disabled", "allowlist"]).optional(),
48+
groupPolicy: GroupPolicySchema.optional(),
5349
replyToMode: z.enum(["off", "first", "all"]).optional(),
5450
threadReplies: z.enum(["off", "inbound", "always"]).optional(),
5551
textChunkLimit: z.number().optional(),
5652
chunkMode: z.enum(["length", "newline"]).optional(),
5753
responsePrefix: z.string().optional(),
5854
mediaMaxMb: z.number().optional(),
5955
autoJoin: z.enum(["always", "allowlist", "off"]).optional(),
60-
autoJoinAllowlist: z.array(allowFromEntry).optional(),
61-
groupAllowFrom: z.array(allowFromEntry).optional(),
62-
dm: matrixDmSchema,
56+
autoJoinAllowlist: AllowFromListSchema,
57+
groupAllowFrom: AllowFromListSchema,
58+
dm: buildNestedDmConfigSchema(),
6359
groups: z.object({}).catchall(matrixRoomSchema).optional(),
6460
rooms: z.object({}).catchall(matrixRoomSchema).optional(),
6561
actions: matrixActionSchema,

extensions/nostr/src/config-schema.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1+
import { AllowFromListSchema, DmPolicySchema } from "openclaw/plugin-sdk/compat";
12
import { MarkdownConfigSchema, buildChannelConfigSchema } from "openclaw/plugin-sdk/nostr";
23
import { z } from "zod";
34

4-
const allowFromEntry = z.union([z.string(), z.number()]);
5-
65
/**
76
* Validates https:// URLs only (no javascript:, data:, file:, etc.)
87
*/
@@ -76,10 +75,10 @@ export const NostrConfigSchema = z.object({
7675
relays: z.array(z.string()).optional(),
7776

7877
/** DM access policy: pairing, allowlist, open, or disabled */
79-
dmPolicy: z.enum(["pairing", "allowlist", "open", "disabled"]).optional(),
78+
dmPolicy: DmPolicySchema.optional(),
8079

8180
/** Allowed sender pubkeys (npub or hex format) */
82-
allowFrom: z.array(allowFromEntry).optional(),
81+
allowFrom: AllowFromListSchema,
8382

8483
/** Profile metadata (NIP-01 kind:0 content) */
8584
profile: NostrProfileSchema.optional(),

extensions/zalo/src/config-schema.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import {
2-
AllowFromEntrySchema,
2+
AllowFromListSchema,
33
buildCatchallMultiAccountChannelSchema,
4+
DmPolicySchema,
5+
GroupPolicySchema,
46
} from "openclaw/plugin-sdk/compat";
57
import { MarkdownConfigSchema } from "openclaw/plugin-sdk/zalo";
68
import { z } from "zod";
@@ -15,10 +17,10 @@ const zaloAccountSchema = z.object({
1517
webhookUrl: z.string().optional(),
1618
webhookSecret: buildSecretInputSchema().optional(),
1719
webhookPath: z.string().optional(),
18-
dmPolicy: z.enum(["pairing", "allowlist", "open", "disabled"]).optional(),
19-
allowFrom: z.array(AllowFromEntrySchema).optional(),
20-
groupPolicy: z.enum(["disabled", "allowlist", "open"]).optional(),
21-
groupAllowFrom: z.array(AllowFromEntrySchema).optional(),
20+
dmPolicy: DmPolicySchema.optional(),
21+
allowFrom: AllowFromListSchema,
22+
groupPolicy: GroupPolicySchema.optional(),
23+
groupAllowFrom: AllowFromListSchema,
2224
mediaMaxMb: z.number().optional(),
2325
proxy: z.string().optional(),
2426
responsePrefix: z.string().optional(),

extensions/zalouser/src/config-schema.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import {
2-
AllowFromEntrySchema,
2+
AllowFromListSchema,
33
buildCatchallMultiAccountChannelSchema,
4+
DmPolicySchema,
5+
GroupPolicySchema,
46
} from "openclaw/plugin-sdk/compat";
57
import { MarkdownConfigSchema, ToolPolicySchema } from "openclaw/plugin-sdk/zalouser";
68
import { z } from "zod";
@@ -17,11 +19,11 @@ const zalouserAccountSchema = z.object({
1719
enabled: z.boolean().optional(),
1820
markdown: MarkdownConfigSchema,
1921
profile: z.string().optional(),
20-
dmPolicy: z.enum(["pairing", "allowlist", "open", "disabled"]).optional(),
21-
allowFrom: z.array(AllowFromEntrySchema).optional(),
22+
dmPolicy: DmPolicySchema.optional(),
23+
allowFrom: AllowFromListSchema,
2224
historyLimit: z.number().int().min(0).optional(),
23-
groupAllowFrom: z.array(AllowFromEntrySchema).optional(),
24-
groupPolicy: z.enum(["disabled", "allowlist", "open"]).optional(),
25+
groupAllowFrom: AllowFromListSchema,
26+
groupPolicy: GroupPolicySchema.optional(),
2527
groups: z.object({}).catchall(groupConfigSchema).optional(),
2628
messagePrefix: z.string().optional(),
2729
responsePrefix: z.string().optional(),

src/channels/plugins/config-schema.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { z, type ZodTypeAny } from "zod";
2+
import { DmPolicySchema } from "../../config/zod-schema.core.js";
23
import type { ChannelConfigSchema } from "./types.plugin.js";
34

45
type ZodSchemaWithToJsonSchema = ZodTypeAny & {
@@ -10,6 +11,17 @@ type ExtendableZodObject = ZodTypeAny & {
1011
};
1112

1213
export const AllowFromEntrySchema = z.union([z.string(), z.number()]);
14+
export const AllowFromListSchema = z.array(AllowFromEntrySchema).optional();
15+
16+
export function buildNestedDmConfigSchema() {
17+
return z
18+
.object({
19+
enabled: z.boolean().optional(),
20+
policy: DmPolicySchema.optional(),
21+
allowFrom: AllowFromListSchema,
22+
})
23+
.optional();
24+
}
1325

1426
export function buildCatchallMultiAccountChannelSchema<T extends ExtendableZodObject>(
1527
accountSchema: T,

src/plugin-sdk/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,8 @@ export { createPluginRuntimeStore } from "./runtime-store.js";
198198
export { createScopedChannelConfigBase } from "./channel-config-helpers.js";
199199
export {
200200
AllowFromEntrySchema,
201+
AllowFromListSchema,
202+
buildNestedDmConfigSchema,
201203
buildCatchallMultiAccountChannelSchema,
202204
} from "../channels/plugins/config-schema.js";
203205
export type { ChannelDock } from "../channels/dock.js";

0 commit comments

Comments
 (0)