UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

87 lines (86 loc) • 2.71 kB
import { t as pruneMapToMaxSize } from "./map-size-BlrH_CnE.mjs"; import "./exec-approvals-B1rZTeax.mjs"; import { t as isApprovalNotFoundError } from "./approval-errors-Ccn5PiLn.mjs"; import "./plugin-approvals-BXljsQyC.mjs"; import "./approval-request-filters-RxKxwld1.mjs"; import "./exec-approval-reply-CXR1z8iH.mjs"; import "./approval-client-helpers-69ft5D1A.mjs"; import "./approval-request-account-binding-DBmelzzf.mjs"; import "./exec-approval-session-target-BgMUNFyN.mjs"; import "./approval-native-helpers-DdMS44to.mjs"; import "./approval-delivery-helpers-FhMwR_wW.mjs"; import "./approval-native-runtime-COAvADli.mjs"; import "./exec-approval-command-display-BGbZnsXu.mjs"; import "./approval-renderers-DgHwslqa.mjs"; import { randomBytes } from "node:crypto"; //#region src/plugin-sdk/approval-native-controls.ts /** Own one plugin's process-local native controls through resolution and card updates. */ function createNativeApprovalControlRegistry(params) { const bindings = /* @__PURE__ */ new Map(); const resolving = /* @__PURE__ */ new Set(); const get = (token) => { const binding = bindings.get(token); if (!binding) return null; if (binding.expiresAtMs <= Date.now()) { bindings.delete(token); if (params.releaseClaimOnLookupExpiry) resolving.delete(token); return null; } return binding; }; const complete = (token) => { const binding = bindings.get(token); resolving.delete(token); bindings.delete(token); if (binding) params.onComplete?.(binding); }; return { createToken: () => randomBytes(18).toString("base64url"), register(binding) { if (binding.expiresAtMs <= Date.now()) return false; bindings.delete(binding.token); bindings.set(binding.token, binding); pruneMapToMaxSize(bindings, 1024); return true; }, get, values: () => bindings.values(), pruneExpired(nowMs) { for (const [token, binding] of bindings) if (binding.expiresAtMs <= nowMs) { bindings.delete(token); resolving.delete(token); } }, unregister(tokens) { for (const token of tokens) complete(token); }, async settle(token, resolveAndUpdate) { const binding = get(token); if (!binding) return { kind: "missing" }; if (resolving.has(token)) return { kind: "in-flight" }; resolving.add(token); let result; try { result = await resolveAndUpdate(binding); } catch (error) { if (isApprovalNotFoundError(error)) { complete(token); return { kind: "not-found", binding }; } resolving.delete(token); throw error; } complete(token); return { kind: "settled", binding, result }; } }; } //#endregion export { createNativeApprovalControlRegistry as t };