UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

76 lines (75 loc) 2.86 kB
import { r as truncateUtf16Safe } from "./utf16-slice-D_ngcYKd.js"; import { p as redactSensitiveText } from "./redact-BtvPPfTi.js"; //#region src/gateway/local-user-ingress.ts const ingressByOwner = /* @__PURE__ */ new WeakMap(); function freezeLocalUserIngress(facts) { Object.freeze(facts.ingress); Object.freeze(facts.invoker); for (const item of facts.assurance ?? []) Object.freeze(item); Object.freeze(facts.assurance); return Object.freeze({ facts: Object.freeze(facts) }); } function safeDisplayLabel(value) { const label = value?.trim(); return label ? truncateUtf16Safe(redactSensitiveText(redactSensitiveText(label, { mode: "tools" }), { mode: "tools" }), 128) : void 0; } /** Prepare attribution once from authenticated connection facts; credentials never become people. */ function prepareGatewayLocalUserIngress(params) { const profileId = params.profile?.profileId.trim(); const pairedDeviceId = params.pairedDeviceId?.trim(); const displayLabel = safeDisplayLabel(params.profile?.displayName); const assurance = []; if (profileId) assurance.push({ kind: "durable-profile", rawEvidenceRef: profileId, strength: "boundary-verified" }); if (params.authMethod === "trusted-proxy") assurance.push({ kind: "trusted-proxy", rawEvidenceRef: profileId ?? "gateway-auth:trusted-proxy", strength: "boundary-verified" }); else if (params.authMethod === "tailscale") assurance.push({ kind: "tailscale-whois", rawEvidenceRef: profileId ?? "gateway-auth:tailscale", strength: "boundary-verified" }); if (pairedDeviceId) assurance.push({ kind: "device-proof", rawEvidenceRef: pairedDeviceId, strength: "cryptographic" }); if (params.isLocalClient) assurance.push({ kind: "local-process", rawEvidenceRef: "gateway-transport:local", strength: "boundary-verified" }); const rawSourceRef = profileId ?? pairedDeviceId; return freezeLocalUserIngress({ ingress: { kind: "gateway-client", boundary: "gateway.ws.authenticated-connect", state: "present", ...rawSourceRef ? { rawSourceRef } : {} }, ...profileId ? { invoker: { state: "present", kind: "person", rawPrincipalRef: profileId, ...displayLabel ? { displayLabel } : {} } } : params.authenticatedUserExpected ? { invoker: { state: "unknown" } } : {}, ...assurance.length > 0 ? { assurance } : {} }); } function attachGatewayLocalUserIngress(owner, ingress) { ingressByOwner.set(owner, ingress); } function getGatewayLocalUserIngress(owner) { return owner ? ingressByOwner.get(owner) : void 0; } function transferGatewayLocalUserIngress(source, target) { const ingress = ingressByOwner.get(source); if (ingress) ingressByOwner.set(target, ingress); } //#endregion export { transferGatewayLocalUserIngress as i, getGatewayLocalUserIngress as n, prepareGatewayLocalUserIngress as r, attachGatewayLocalUserIngress as t };