UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

171 lines (170 loc) 6.95 kB
import { c as isRecord } from "./utils-CCC-BEJH.js"; import { o as coerceSecretRef } from "./types.secrets-_0JOMGE5.js"; import "./shared-CuqTS6Vs.js"; import { a as isChannelAccountEffectivelyEnabled, i as hasOwnProperty, n as collectSecretInputAssignment, o as isEnabledFlag } from "./runtime-shared-DR5938Io.js"; //#region src/secrets/channel-secret-basic-runtime.ts /** Basic channel secret runtime helpers for account/root credential collection. */ /** Reads a channel config block when it exists as an object. */ function getChannelRecord(config, channelKey) { const channels = config.channels; if (!isRecord(channels)) return; const channel = channels[channelKey]; return isRecord(channel) ? channel : void 0; } /** Reads a channel config and its resolved account surface in one step. */ function getChannelSurface(config, channelKey) { const channel = getChannelRecord(config, channelKey); if (!channel) return null; return { channel, surface: resolveChannelAccountSurface(channel) }; } /** Resolves explicit channel accounts or creates a default account backed by the channel root. */ function resolveChannelAccountSurface(channel) { const channelEnabled = isEnabledFlag(channel); const accounts = channel.accounts; if (!isRecord(accounts) || Object.keys(accounts).length === 0) return { hasExplicitAccounts: false, channelEnabled, accounts: [{ accountId: "default", account: channel, enabled: channelEnabled }] }; const accountEntries = []; for (const [accountId, account] of Object.entries(accounts)) { if (!isRecord(account)) continue; accountEntries.push({ accountId, account, enabled: isChannelAccountEffectivelyEnabled(channel, account) }); } return { hasExplicitAccounts: true, channelEnabled, accounts: accountEntries }; } function isBaseFieldActiveForChannelSurface(surface, rootKey) { if (!surface.channelEnabled) return false; if (!surface.hasExplicitAccounts) return true; return surface.accounts.some(({ account, enabled }) => enabled && !hasOwnProperty(account, rootKey)); } /** Normalizes optional channel secret strings before deciding whether a value is configured. */ function normalizeSecretStringValue(value) { return typeof value === "string" ? value.trim() : ""; } /** Returns true when a channel value contains plaintext or a SecretRef-compatible value. */ function hasConfiguredSecretInputValue(value, defaults) { return normalizeSecretStringValue(value).length > 0 || coerceSecretRef(value, defaults) !== null; } /** Collects a simple channel field from the channel root and explicit account overrides. */ /** Collects root/account channel field SecretRef assignments for one credential path. */ function collectSimpleChannelFieldAssignments(params) { collectSecretInputAssignment({ value: params.channel[params.field], path: `channels.${params.channelKey}.${params.field}`, expected: "string", defaults: params.defaults, context: params.context, active: isBaseFieldActiveForChannelSurface(params.surface, params.field), inactiveReason: params.topInactiveReason, apply: (value) => { params.channel[params.field] = value; } }); if (!params.surface.hasExplicitAccounts) return; for (const { accountId, account, enabled } of params.surface.accounts) { if (!hasOwnProperty(account, params.field)) continue; collectSecretInputAssignment({ value: account[params.field], path: `channels.${params.channelKey}.accounts.${accountId}.${params.field}`, expected: "string", defaults: params.defaults, context: params.context, active: enabled, inactiveReason: params.accountInactiveReason, apply: (value) => { account[params.field] = value; } }); } } function isConditionalTopLevelFieldActive(params) { if (!params.surface.channelEnabled) return false; if (!params.surface.hasExplicitAccounts) return params.activeWithoutAccounts; return params.surface.accounts.some(params.inheritedAccountActive); } /** Collects a channel field whose active state depends on caller-provided account predicates. */ function collectConditionalChannelFieldAssignments(params) { collectSecretInputAssignment({ value: params.channel[params.field], path: `channels.${params.channelKey}.${params.field}`, expected: "string", defaults: params.defaults, context: params.context, active: isConditionalTopLevelFieldActive({ surface: params.surface, activeWithoutAccounts: params.topLevelActiveWithoutAccounts, inheritedAccountActive: params.topLevelInheritedAccountActive }), inactiveReason: params.topInactiveReason, apply: (value) => { params.channel[params.field] = value; } }); if (!params.surface.hasExplicitAccounts) return; for (const entry of params.surface.accounts) { if (!hasOwnProperty(entry.account, params.field)) continue; collectSecretInputAssignment({ value: entry.account[params.field], path: `channels.${params.channelKey}.accounts.${entry.accountId}.${params.field}`, expected: "string", defaults: params.defaults, context: params.context, active: params.accountActive(entry), inactiveReason: typeof params.accountInactiveReason === "function" ? params.accountInactiveReason(entry) : params.accountInactiveReason, apply: (value) => { entry.account[params.field] = value; } }); } } /** Collects a nested channel field from root and account-specific nested config blocks. */ function collectNestedChannelFieldAssignments(params) { const topLevelNested = params.channel[params.nestedKey]; if (isRecord(topLevelNested)) collectSecretInputAssignment({ value: topLevelNested[params.field], path: `channels.${params.channelKey}.${params.nestedKey}.${params.field}`, expected: "string", defaults: params.defaults, context: params.context, active: params.topLevelActive, inactiveReason: params.topInactiveReason, apply: (value) => { topLevelNested[params.field] = value; } }); if (!params.surface.hasExplicitAccounts) return; for (const entry of params.surface.accounts) { const nested = entry.account[params.nestedKey]; if (!isRecord(nested)) continue; collectSecretInputAssignment({ value: nested[params.field], path: `channels.${params.channelKey}.accounts.${entry.accountId}.${params.nestedKey}.${params.field}`, expected: "string", defaults: params.defaults, context: params.context, active: params.accountActive(entry), inactiveReason: typeof params.accountInactiveReason === "function" ? params.accountInactiveReason(entry) : params.accountInactiveReason, apply: (value) => { nested[params.field] = value; } }); } } //#endregion export { getChannelSurface as a, normalizeSecretStringValue as c, getChannelRecord as i, resolveChannelAccountSurface as l, collectNestedChannelFieldAssignments as n, hasConfiguredSecretInputValue as o, collectSimpleChannelFieldAssignments as r, isBaseFieldActiveForChannelSurface as s, collectConditionalChannelFieldAssignments as t };