From a82df52753d9c5985a0bf4d681c6ea74e9cfe095 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 7 Mar 2026 16:37:47 +0000 Subject: [PATCH] refactor(extensions): share secret input schema builder --- extensions/bluebubbles/src/secret-input.ts | 20 +++++++------------ extensions/feishu/src/secret-input.ts | 20 +++++++------------ extensions/matrix/src/secret-input.ts | 20 +++++++------------ extensions/mattermost/src/secret-input.ts | 20 +++++++------------ extensions/nextcloud-talk/src/secret-input.ts | 20 +++++++------------ extensions/zalo/src/secret-input.ts | 20 +++++++------------ src/plugin-sdk/bluebubbles.ts | 1 + src/plugin-sdk/feishu.ts | 1 + src/plugin-sdk/matrix.ts | 1 + src/plugin-sdk/mattermost.ts | 1 + src/plugin-sdk/nextcloud-talk.ts | 1 + src/plugin-sdk/secret-input-schema.ts | 12 +++++++++++ src/plugin-sdk/zalo.ts | 1 + 13 files changed, 60 insertions(+), 78 deletions(-) create mode 100644 src/plugin-sdk/secret-input-schema.ts diff --git a/extensions/bluebubbles/src/secret-input.ts b/extensions/bluebubbles/src/secret-input.ts index 8a5530f4607..a5aa73ebda0 100644 --- a/extensions/bluebubbles/src/secret-input.ts +++ b/extensions/bluebubbles/src/secret-input.ts @@ -1,19 +1,13 @@ import { + buildSecretInputSchema, hasConfiguredSecretInput, normalizeResolvedSecretInputString, normalizeSecretInputString, } from "openclaw/plugin-sdk/bluebubbles"; -import { z } from "zod"; -export { hasConfiguredSecretInput, normalizeResolvedSecretInputString, normalizeSecretInputString }; - -export function buildSecretInputSchema() { - return z.union([ - z.string(), - z.object({ - source: z.enum(["env", "file", "exec"]), - provider: z.string().min(1), - id: z.string().min(1), - }), - ]); -} +export { + buildSecretInputSchema, + hasConfiguredSecretInput, + normalizeResolvedSecretInputString, + normalizeSecretInputString, +}; diff --git a/extensions/feishu/src/secret-input.ts b/extensions/feishu/src/secret-input.ts index a2c2f517f3a..37dda74f2eb 100644 --- a/extensions/feishu/src/secret-input.ts +++ b/extensions/feishu/src/secret-input.ts @@ -1,19 +1,13 @@ import { + buildSecretInputSchema, hasConfiguredSecretInput, normalizeResolvedSecretInputString, normalizeSecretInputString, } from "openclaw/plugin-sdk/feishu"; -import { z } from "zod"; -export { hasConfiguredSecretInput, normalizeResolvedSecretInputString, normalizeSecretInputString }; - -export function buildSecretInputSchema() { - return z.union([ - z.string(), - z.object({ - source: z.enum(["env", "file", "exec"]), - provider: z.string().min(1), - id: z.string().min(1), - }), - ]); -} +export { + buildSecretInputSchema, + hasConfiguredSecretInput, + normalizeResolvedSecretInputString, + normalizeSecretInputString, +}; diff --git a/extensions/matrix/src/secret-input.ts b/extensions/matrix/src/secret-input.ts index a5de1214773..c0827573480 100644 --- a/extensions/matrix/src/secret-input.ts +++ b/extensions/matrix/src/secret-input.ts @@ -1,19 +1,13 @@ import { + buildSecretInputSchema, hasConfiguredSecretInput, normalizeResolvedSecretInputString, normalizeSecretInputString, } from "openclaw/plugin-sdk/matrix"; -import { z } from "zod"; -export { hasConfiguredSecretInput, normalizeResolvedSecretInputString, normalizeSecretInputString }; - -export function buildSecretInputSchema() { - return z.union([ - z.string(), - z.object({ - source: z.enum(["env", "file", "exec"]), - provider: z.string().min(1), - id: z.string().min(1), - }), - ]); -} +export { + buildSecretInputSchema, + hasConfiguredSecretInput, + normalizeResolvedSecretInputString, + normalizeSecretInputString, +}; diff --git a/extensions/mattermost/src/secret-input.ts b/extensions/mattermost/src/secret-input.ts index 017109424bc..576f5b9fc45 100644 --- a/extensions/mattermost/src/secret-input.ts +++ b/extensions/mattermost/src/secret-input.ts @@ -1,19 +1,13 @@ import { + buildSecretInputSchema, hasConfiguredSecretInput, normalizeResolvedSecretInputString, normalizeSecretInputString, } from "openclaw/plugin-sdk/mattermost"; -import { z } from "zod"; -export { hasConfiguredSecretInput, normalizeResolvedSecretInputString, normalizeSecretInputString }; - -export function buildSecretInputSchema() { - return z.union([ - z.string(), - z.object({ - source: z.enum(["env", "file", "exec"]), - provider: z.string().min(1), - id: z.string().min(1), - }), - ]); -} +export { + buildSecretInputSchema, + hasConfiguredSecretInput, + normalizeResolvedSecretInputString, + normalizeSecretInputString, +}; diff --git a/extensions/nextcloud-talk/src/secret-input.ts b/extensions/nextcloud-talk/src/secret-input.ts index f51a0ad6872..d26cb8e4e23 100644 --- a/extensions/nextcloud-talk/src/secret-input.ts +++ b/extensions/nextcloud-talk/src/secret-input.ts @@ -1,19 +1,13 @@ import { + buildSecretInputSchema, hasConfiguredSecretInput, normalizeResolvedSecretInputString, normalizeSecretInputString, } from "openclaw/plugin-sdk/nextcloud-talk"; -import { z } from "zod"; -export { hasConfiguredSecretInput, normalizeResolvedSecretInputString, normalizeSecretInputString }; - -export function buildSecretInputSchema() { - return z.union([ - z.string(), - z.object({ - source: z.enum(["env", "file", "exec"]), - provider: z.string().min(1), - id: z.string().min(1), - }), - ]); -} +export { + buildSecretInputSchema, + hasConfiguredSecretInput, + normalizeResolvedSecretInputString, + normalizeSecretInputString, +}; diff --git a/extensions/zalo/src/secret-input.ts b/extensions/zalo/src/secret-input.ts index 702548454c3..bf218d1e48b 100644 --- a/extensions/zalo/src/secret-input.ts +++ b/extensions/zalo/src/secret-input.ts @@ -1,19 +1,13 @@ import { + buildSecretInputSchema, hasConfiguredSecretInput, normalizeResolvedSecretInputString, normalizeSecretInputString, } from "openclaw/plugin-sdk/zalo"; -import { z } from "zod"; -export { hasConfiguredSecretInput, normalizeResolvedSecretInputString, normalizeSecretInputString }; - -export function buildSecretInputSchema() { - return z.union([ - z.string(), - z.object({ - source: z.enum(["env", "file", "exec"]), - provider: z.string().min(1), - id: z.string().min(1), - }), - ]); -} +export { + buildSecretInputSchema, + hasConfiguredSecretInput, + normalizeResolvedSecretInputString, + normalizeSecretInputString, +}; diff --git a/src/plugin-sdk/bluebubbles.ts b/src/plugin-sdk/bluebubbles.ts index 8489d4cb892..bb67d56878e 100644 --- a/src/plugin-sdk/bluebubbles.ts +++ b/src/plugin-sdk/bluebubbles.ts @@ -61,6 +61,7 @@ export { normalizeResolvedSecretInputString, normalizeSecretInputString, } from "../config/types.secrets.js"; +export { buildSecretInputSchema } from "./secret-input-schema.js"; export { ToolPolicySchema } from "../config/zod-schema.agent-runtime.js"; export { MarkdownConfigSchema } from "../config/zod-schema.core.js"; export type { ParsedChatTarget } from "../imessage/target-parsing-helpers.js"; diff --git a/src/plugin-sdk/feishu.ts b/src/plugin-sdk/feishu.ts index 300daefc983..360623d9e9c 100644 --- a/src/plugin-sdk/feishu.ts +++ b/src/plugin-sdk/feishu.ts @@ -43,6 +43,7 @@ export { normalizeResolvedSecretInputString, normalizeSecretInputString, } from "../config/types.secrets.js"; +export { buildSecretInputSchema } from "./secret-input-schema.js"; export { createDedupeCache } from "../infra/dedupe.js"; export { installRequestBodyLimitGuard } from "../infra/http-body.js"; export { fetchWithSsrFGuard } from "../infra/net/fetch-guard.js"; diff --git a/src/plugin-sdk/matrix.ts b/src/plugin-sdk/matrix.ts index 63712fc8d71..b029062e28a 100644 --- a/src/plugin-sdk/matrix.ts +++ b/src/plugin-sdk/matrix.ts @@ -73,6 +73,7 @@ export { normalizeResolvedSecretInputString, normalizeSecretInputString, } from "../config/types.secrets.js"; +export { buildSecretInputSchema } from "./secret-input-schema.js"; export { ToolPolicySchema } from "../config/zod-schema.agent-runtime.js"; export { MarkdownConfigSchema } from "../config/zod-schema.core.js"; export { fetchWithSsrFGuard } from "../infra/net/fetch-guard.js"; diff --git a/src/plugin-sdk/mattermost.ts b/src/plugin-sdk/mattermost.ts index 12c18efea78..9ad22e60284 100644 --- a/src/plugin-sdk/mattermost.ts +++ b/src/plugin-sdk/mattermost.ts @@ -63,6 +63,7 @@ export { normalizeResolvedSecretInputString, normalizeSecretInputString, } from "../config/types.secrets.js"; +export { buildSecretInputSchema } from "./secret-input-schema.js"; export { BlockStreamingCoalesceSchema, DmPolicySchema, diff --git a/src/plugin-sdk/nextcloud-talk.ts b/src/plugin-sdk/nextcloud-talk.ts index 14d633a4c85..03116a7864b 100644 --- a/src/plugin-sdk/nextcloud-talk.ts +++ b/src/plugin-sdk/nextcloud-talk.ts @@ -51,6 +51,7 @@ export { normalizeResolvedSecretInputString, normalizeSecretInputString, } from "../config/types.secrets.js"; +export { buildSecretInputSchema } from "./secret-input-schema.js"; export { ToolPolicySchema } from "../config/zod-schema.agent-runtime.js"; export { BlockStreamingCoalesceSchema, diff --git a/src/plugin-sdk/secret-input-schema.ts b/src/plugin-sdk/secret-input-schema.ts new file mode 100644 index 00000000000..d5eb3a0767e --- /dev/null +++ b/src/plugin-sdk/secret-input-schema.ts @@ -0,0 +1,12 @@ +import { z } from "zod"; + +export function buildSecretInputSchema() { + return z.union([ + z.string(), + z.object({ + source: z.enum(["env", "file", "exec"]), + provider: z.string().min(1), + id: z.string().min(1), + }), + ]); +} diff --git a/src/plugin-sdk/zalo.ts b/src/plugin-sdk/zalo.ts index 440cffd0de9..852c6f17f0c 100644 --- a/src/plugin-sdk/zalo.ts +++ b/src/plugin-sdk/zalo.ts @@ -48,6 +48,7 @@ export { normalizeResolvedSecretInputString, normalizeSecretInputString, } from "../config/types.secrets.js"; +export { buildSecretInputSchema } from "./secret-input-schema.js"; export { MarkdownConfigSchema } from "../config/zod-schema.core.js"; export { createDedupeCache } from "../infra/dedupe.js"; export { emptyPluginConfigSchema } from "../plugins/config-schema.js";