UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

78 lines (77 loc) 4.21 kB
import { r as findChatChannelLabel } from "./ids-BVZRYG0I.js"; import { n as isWellFormedApprovalId } from "./approval-id-BTRnO3t1.js"; import { t as isApprovalNotFoundError } from "./approval-errors-Bzw_-cAg.js"; import { t as getGatewayNativeApprovalRuntime } from "./approval-gateway-runtime-context-BSAo6TQe.js"; import { n as withOperatorApprovalsGatewayClient } from "./operator-approvals-client-DM1DC0Bp.js"; //#region src/infra/approval-gateway-resolver.ts async function resolveApprovalOverGateway(params) { const approvalKind = params.approvalKind; const resolveMethod = params.resolveMethod; const canonicalKind = approvalKind === "exec" || approvalKind === "plugin" || approvalKind === "system-agent" ? approvalKind : null; const legacyMethod = resolveMethod === "exec" || resolveMethod === "plugin" ? resolveMethod : null; const hasCanonicalKind = canonicalKind !== null; const hasLegacyMethod = legacyMethod !== null; const allowPluginFallback = params.allowPluginFallback; const gatewayRuntime = params.gatewayRuntime; if (approvalKind !== void 0) { if (!hasCanonicalKind || resolveMethod !== void 0 || allowPluginFallback !== void 0) throw new Error("canonical approval resolution requires exactly one valid owner kind"); } else if (resolveMethod !== void 0 && !hasLegacyMethod || allowPluginFallback !== void 0 && typeof allowPluginFallback !== "boolean" || gatewayRuntime !== void 0) throw new Error("legacy approval resolution requires valid routing options"); if (params.decision !== "allow-once" && params.decision !== "allow-always" && params.decision !== "deny") throw new Error("approval resolution requires a valid decision"); const approvalId = params.approvalId; if (typeof approvalId !== "string" || !isWellFormedApprovalId(approvalId)) throw new Error("approval resolution requires an approval id"); const senderId = params.senderId?.trim(); const channel = params.channel?.trim(); const accountId = params.accountId?.trim(); if (Boolean(channel || accountId || senderId) && (!channel || !accountId || !senderId)) throw new Error("channel approval resolution requires channel, account, and sender identity"); const reviewer = channel && accountId && senderId ? { channel, accountId, senderId } : void 0; const channelLabel = channel ? findChatChannelLabel(channel) ?? channel : void 0; const clientDisplayName = params.clientDisplayName ?? (channelLabel ? `${channelLabel} approval (${senderId ?? "unknown"})` : `Approval (${senderId ?? "unknown"})`); const canonicalGatewayRuntime = params.gatewayRuntime; if (canonicalGatewayRuntime && canonicalKind) return await canonicalGatewayRuntime.request("approval.resolve", { id: approvalId, kind: canonicalKind, decision: params.decision, ...reviewer ? { reviewer } : {} }, { clientDisplayName }); const requestWithClient = async (gatewayClient) => { if (hasCanonicalKind) { const resolveParams = { id: approvalId, kind: canonicalKind, decision: params.decision, ...reviewer ? { reviewer } : {} }; return await gatewayClient.request("approval.resolve", resolveParams); } const requestLegacyResolve = async (method) => { await gatewayClient.request(method, { id: approvalId, decision: params.decision, ...reviewer ? { reviewer } : {} }); }; if (legacyMethod === "plugin" || !legacyMethod && approvalId.startsWith("plugin:")) { await requestLegacyResolve("plugin.approval.resolve"); return; } try { await requestLegacyResolve("exec.approval.resolve"); } catch (error) { if (allowPluginFallback !== true || !isApprovalNotFoundError(error)) throw error; await requestLegacyResolve("plugin.approval.resolve"); } }; const scopedGatewayRuntime = getGatewayNativeApprovalRuntime(); const result = scopedGatewayRuntime ? await requestWithClient({ request: async (method, requestParams) => await scopedGatewayRuntime.request(method, requestParams, { clientDisplayName }) }) : await withOperatorApprovalsGatewayClient({ config: params.cfg, gatewayUrl: params.gatewayUrl, clientDisplayName }, requestWithClient); return hasCanonicalKind ? result : void 0; } //#endregion export { resolveApprovalOverGateway as t };