UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

114 lines (113 loc) 5.37 kB
import { c as normalizeOptionalString } from "./string-coerce-mnp54Vah.js"; import { c as isSecretRef } from "./types.secrets-_0JOMGE5.js"; import { n as normalizeAccountId } from "./account-id-Df9e41E6.js"; import { Nn as record, Rn as string, Zn as unknown } from "./schemas-6cH6bZ7o.js"; import { n as safeParseWithSchema, t as safeParseJsonWithSchema } from "./zod-parse-Bip-sZi_.js"; import { t as resolveAccountEntry } from "./account-lookup-DL1YTqjF.js"; import "./string-coerce-runtime-CEGJWkQ_.js"; import { c as resolveMergedAccountConfig, t as createAccountListHelpers } from "./account-helpers-pcH3lGFY.js"; import "./secret-input-DVCzFGxN.js"; import { i as mergePairLoopGuardConfig } from "./pair-loop-guard-runtime-D0pZ_1is.js"; import "./account-resolution-DBB0e3KP.js"; import "./extension-shared-B8fkO3TV.js"; //#region extensions/googlechat/src/accounts.ts const ENV_SERVICE_ACCOUNT = "GOOGLE_CHAT_SERVICE_ACCOUNT"; const ENV_SERVICE_ACCOUNT_FILE = "GOOGLE_CHAT_SERVICE_ACCOUNT_FILE"; const JsonRecordSchema = record(string(), unknown()); const { listAccountIds: listGoogleChatAccountIds, resolveDefaultAccountId: resolveDefaultGoogleChatAccountId } = createAccountListHelpers("googlechat", { implicitDefaultAccount: { channelKeys: [ "serviceAccount", "serviceAccountRef", "serviceAccountFile" ], envVars: [ENV_SERVICE_ACCOUNT, ENV_SERVICE_ACCOUNT_FILE] } }); function mergeGoogleChatAccountConfig(cfg, accountId) { const raw = cfg.channels?.["googlechat"] ?? {}; const base = resolveMergedAccountConfig({ channelConfig: raw, accounts: raw.accounts, accountId, omitKeys: ["defaultAccount"], nestedObjectKeys: ["botLoopProtection"] }); const defaultAccountConfig = resolveAccountEntry(raw.accounts, "default") ?? {}; if (accountId === "default") return base; const { enabled: _ignoredEnabled, dangerouslyAllowNameMatching: _ignoredDangerouslyAllowNameMatching, serviceAccount: _ignoredServiceAccount, serviceAccountRef: _ignoredServiceAccountRef, serviceAccountFile: _ignoredServiceAccountFile, ...defaultAccountShared } = defaultAccountConfig; const botLoopProtection = mergePairLoopGuardConfig(defaultAccountShared.botLoopProtection, base.botLoopProtection); return { ...defaultAccountShared, ...base, ...botLoopProtection ? { botLoopProtection } : {} }; } function resolveGoogleChatConfigAccessorAccount(params) { const accountId = normalizeAccountId(params.accountId ?? params.cfg.channels?.googlechat?.defaultAccount); return { config: mergeGoogleChatAccountConfig(params.cfg, accountId) }; } function parseServiceAccount(value) { if (isSecretRef(value)) return null; if (typeof value === "string") { const trimmed = value.trim(); if (!trimmed) return null; return safeParseJsonWithSchema(JsonRecordSchema, trimmed); } return safeParseWithSchema(JsonRecordSchema, value); } function resolveCredentialsFromConfig(params) { const { account, accountId } = params; const inline = parseServiceAccount(account.serviceAccount); if (inline) return { credentials: inline, source: "inline" }; if (isSecretRef(account.serviceAccount)) throw new Error(`channels.googlechat.accounts.${accountId}.serviceAccount: unresolved SecretRef "${account.serviceAccount.source}:${account.serviceAccount.provider}:${account.serviceAccount.id}". Resolve this command against an active gateway runtime snapshot before reading it.`); if (isSecretRef(account.serviceAccountRef)) throw new Error(`channels.googlechat.accounts.${accountId}.serviceAccount: unresolved SecretRef "${account.serviceAccountRef.source}:${account.serviceAccountRef.provider}:${account.serviceAccountRef.id}". Resolve this command against an active gateway runtime snapshot before reading it.`); const file = normalizeOptionalString(account.serviceAccountFile); if (file) return { credentialsFile: file, source: "file" }; if (accountId === "default") { const envJson = process.env[ENV_SERVICE_ACCOUNT]; const envInline = parseServiceAccount(envJson); if (envInline) return { credentials: envInline, source: "env" }; const envFile = normalizeOptionalString(process.env[ENV_SERVICE_ACCOUNT_FILE]); if (envFile) return { credentialsFile: envFile, source: "env" }; } return { source: "none" }; } function resolveGoogleChatAccount(params) { const accountId = normalizeAccountId(params.accountId ?? params.cfg.channels?.["googlechat"]?.defaultAccount); const baseEnabled = params.cfg.channels?.["googlechat"]?.enabled !== false; const merged = mergeGoogleChatAccountConfig(params.cfg, accountId); const accountEnabled = merged.enabled !== false; const enabled = baseEnabled && accountEnabled; const credentials = resolveCredentialsFromConfig({ accountId, account: merged }); return { accountId, name: normalizeOptionalString(merged.name), enabled, config: merged, credentialSource: credentials.source, credentials: credentials.credentials, credentialsFile: credentials.credentialsFile }; } function listEnabledGoogleChatAccounts(cfg) { return listGoogleChatAccountIds(cfg).map((accountId) => resolveGoogleChatAccount({ cfg, accountId })).filter((account) => account.enabled); } //#endregion export { resolveGoogleChatConfigAccessorAccount as a, resolveGoogleChatAccount as i, listGoogleChatAccountIds as n, resolveDefaultGoogleChatAccountId as r, listEnabledGoogleChatAccounts as t };