UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

191 lines (190 loc) 7.8 kB
import { r as trimToUndefined, t as createGatewayCredentialPlan } from "./credential-planner-DAMjVc9j.js"; import "./credentials-CXbS4PS0.js"; import { n as resolveConfiguredSecretInputWithFallback } from "./resolve-configured-secret-input-string-B8zlpQOU.js"; //#region src/gateway/auth-surface-resolution.ts async function resolveGatewayCredential(params) { const resolved = await resolveConfiguredSecretInputWithFallback({ config: params.config, env: params.env, value: params.value, path: params.path, unresolvedReasonStyle: "detailed" }); if (resolved.unresolvedRefReason) params.diagnostics.push(resolved.unresolvedRefReason); return resolved; } function withDiagnostics(diagnostics, result) { return diagnostics.length > 0 ? { ...result, diagnostics } : result; } /** Resolves best-effort credentials for non-mutating local/remote gateway probes. */ async function resolveGatewayProbeSurfaceAuth(params) { const env = params.env ?? process.env; const diagnostics = []; const authMode = params.config.gateway?.auth?.mode; if (params.surface === "remote") { const remoteToken = await resolveGatewayCredential({ config: params.config, env, diagnostics, path: "gateway.remote.token", value: params.config.gateway?.remote?.token }); const remotePassword = remoteToken.value ? { value: void 0, secretRefConfigured: false } : await resolveGatewayCredential({ config: params.config, env, diagnostics, path: "gateway.remote.password", value: params.config.gateway?.remote?.password }); const envToken = trimToUndefined(env.OPENCLAW_GATEWAY_TOKEN); const envPassword = trimToUndefined(env.OPENCLAW_GATEWAY_PASSWORD); const hasConfiguredAuth = Boolean(remoteToken.value || remotePassword.value); const allowEnvAuth = !hasConfiguredAuth && diagnostics.length === 0; return withDiagnostics(diagnostics, { token: remoteToken.value ?? (allowEnvAuth ? envToken : void 0), password: remotePassword.value ?? (allowEnvAuth ? envPassword : void 0), ...hasConfiguredAuth ? { source: "config" } : allowEnvAuth && (envToken || envPassword) && { source: "env" } }); } if (authMode === "none" || authMode === "trusted-proxy") return {}; const envToken = trimToUndefined(env.OPENCLAW_GATEWAY_TOKEN); const envPassword = trimToUndefined(env.OPENCLAW_GATEWAY_PASSWORD); if (authMode === "token" || authMode === "password") { const credential = await resolveGatewayCredential({ config: params.config, env, diagnostics, path: `gateway.auth.${authMode}`, value: params.config.gateway?.auth?.[authMode] }); if (credential.value) return withDiagnostics(diagnostics, { [authMode]: credential.value, source: "config" }); const envCredential = authMode === "token" ? envToken : envPassword; return !credential.secretRefConfigured && envCredential ? { [authMode]: envCredential, source: "env" } : withDiagnostics(diagnostics, {}); } const token = await resolveGatewayCredential({ config: params.config, env, diagnostics, path: "gateway.auth.token", value: params.config.gateway?.auth?.token }); if (token.value) return withDiagnostics(diagnostics, { token: token.value, source: "config" }); if (token.secretRefConfigured) return withDiagnostics(diagnostics, {}); const password = await resolveGatewayCredential({ config: params.config, env, diagnostics, path: "gateway.auth.password", value: params.config.gateway?.auth?.password }); if (password.secretRefConfigured) return withDiagnostics(diagnostics, password.value ? { password: password.value, source: "config" } : {}); if (envToken) return { token: envToken, source: "env" }; if (envPassword) return withDiagnostics(diagnostics, { password: envPassword, source: "env" }); return withDiagnostics(diagnostics, { token: token.value, password: password.value, ...password.value && { source: "config" } }); } /** Resolves credentials for client paths that must either authenticate or explain the failure. */ async function resolveGatewayInteractiveSurfaceAuth(params) { const env = params.env ?? process.env; const diagnostics = []; const explicitToken = trimToUndefined(params.explicitAuth?.token); const explicitPassword = trimToUndefined(params.explicitAuth?.password); const credentialPlan = createGatewayCredentialPlan({ config: params.config, env }); const authMode = params.config.gateway?.auth?.mode; const hasActiveSecretRef = params.surface === "remote" ? credentialPlan.remoteToken.hasSecretRef || credentialPlan.remotePassword.hasSecretRef : credentialPlan.localTokenCanWin && credentialPlan.localToken.hasSecretRef || (authMode === "password" || authMode === void 0) && credentialPlan.localPassword.hasSecretRef; if ((explicitToken || explicitPassword) && hasActiveSecretRef) return { token: explicitToken, password: explicitPassword }; const envToken = params.suppressEnvAuthFallback ? void 0 : trimToUndefined(env.OPENCLAW_GATEWAY_TOKEN); const envPassword = params.suppressEnvAuthFallback ? void 0 : trimToUndefined(env.OPENCLAW_GATEWAY_PASSWORD); if (params.surface === "remote") { const remoteToken = explicitToken ? { value: explicitToken, secretRefConfigured: false } : await resolveGatewayCredential({ config: params.config, env, diagnostics, path: "gateway.remote.token", value: params.config.gateway?.remote?.token }); if (remoteToken.value && (remoteToken.secretRefConfigured || credentialPlan.remotePassword.hasSecretRef)) return { token: remoteToken.value, password: void 0 }; const remotePassword = explicitPassword ? { value: explicitPassword, secretRefConfigured: false } : await resolveGatewayCredential({ config: params.config, env, diagnostics, path: "gateway.remote.password", value: params.config.gateway?.remote?.password }); const secretRefConfigured = remoteToken.secretRefConfigured || remotePassword.secretRefConfigured; const token = remoteToken.value ?? (secretRefConfigured ? void 0 : envToken); const password = explicitPassword ?? (secretRefConfigured ? remotePassword.value : envPassword ?? remotePassword.value); return token || password ? { token, password } : { failureReason: remoteToken.unresolvedRefReason ?? remotePassword.unresolvedRefReason ?? "Missing gateway auth credentials." }; } if (authMode === "none" || authMode === "trusted-proxy") return { token: explicitToken ?? envToken, password: explicitPassword ?? envPassword }; const shouldUsePassword = authMode === "password" || authMode !== "token" && (Boolean(explicitPassword ?? envPassword) && !credentialPlan.localToken.hasSecretRef || credentialPlan.localPassword.configured && !credentialPlan.localToken.configured); const credentialKind = shouldUsePassword ? "password" : "token"; const explicitCredential = shouldUsePassword ? explicitPassword : explicitToken; const envCredential = shouldUsePassword ? envPassword : envToken; const credential = explicitCredential ? { value: explicitCredential, secretRefConfigured: false } : await resolveGatewayCredential({ config: params.config, env, diagnostics, path: `gateway.auth.${credentialKind}`, value: params.config.gateway?.auth?.[credentialKind] }); const value = credential.value ?? (credential.secretRefConfigured ? void 0 : envCredential); return { token: shouldUsePassword ? credential.secretRefConfigured ? void 0 : explicitToken ?? envToken : value, password: shouldUsePassword ? value : credential.secretRefConfigured ? void 0 : explicitPassword ?? envPassword, failureReason: value ? void 0 : credential.unresolvedRefReason ?? `Missing gateway auth ${credentialKind}.` }; } //#endregion export { resolveGatewayProbeSurfaceAuth as n, resolveGatewayInteractiveSurfaceAuth as t };