UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

39 lines (38 loc) 2.57 kB
import { t as ErrorCodes } from "./gateway-error-details-w0nAGBBp.js"; import { N as validateCanvasDocumentViewParams } from "./src-BiL5aQto.js"; import { d as isGatewaySubordinateWorkAdmissionClosed } from "./gateway-work-admission-R1IpuDim.js"; import { d as errorShape } from "./error-codes-Bo8q2D1o.js"; import { r as buildSandboxHostPath } from "./sandbox-host-BttkEpCR.js"; import { n as readCanvasDocumentHtmlSource } from "./documents-CbIJFnxI.js"; import { t as isCoreCanvasHostEnabled } from "./config-BdhaCXwT.js"; import { n as defineValidatedGatewayMethod } from "./validation-pzrlzFvo.js"; //#region src/gateway/server-methods/canvas.ts const CANVAS_WIDGET_VIEW_MAX_BYTES = 2097152; const CANVAS_WIDGET_UNAVAILABLE = "Canvas widget unavailable; reload the chat or ask the agent to recreate it."; const canvasHandlers = { "canvas.document.view": defineValidatedGatewayMethod("canvas.document.view", validateCanvasDocumentViewParams, async (invocation) => { const { params, context, client, respond } = invocation; const resolveContext = context.resolveGatewayContext; const methodRegistry = context.getGatewayMethodRegistry?.(); const assertActive = () => { invocation.signal?.throwIfAborted(); invocation.sessionMutationCommitGuard?.(); if (!resolveContext || resolveContext() !== context || context.resolveGatewayContext !== resolveContext || context.getGatewayMethodRegistry?.() !== methodRegistry || client?.invalidated === true || client?.connId && context.isConnectionActive?.(client.connId) === false || isGatewaySubordinateWorkAdmissionClosed() || !isCoreCanvasHostEnabled(context.getRuntimeConfig())) throw new Error(CANVAS_WIDGET_UNAVAILABLE); }; try { assertActive(); const [document, sandboxPort] = await Promise.all([readCanvasDocumentHtmlSource(params.docId, { maxBytes: CANVAS_WIDGET_VIEW_MAX_BYTES }), context.getMcpAppSandboxPort?.() ?? context.ensureSandboxHostPort?.()]); assertActive(); if (document.cspSandbox !== "scripts" || Buffer.byteLength(document.html, "utf8") > CANVAS_WIDGET_VIEW_MAX_BYTES || sandboxPort === void 0) throw new Error(CANVAS_WIDGET_UNAVAILABLE); const configuredOrigin = context.getRuntimeConfig().mcp?.apps?.sandboxOrigin; respond(true, { html: document.html, sandboxUrl: buildSandboxHostPath({ blockDescendantFrames: true }), sandboxPort, ...configuredOrigin ? { sandboxOrigin: new URL(configuredOrigin).origin } : {} }); } catch { respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, CANVAS_WIDGET_UNAVAILABLE)); } }) }; //#endregion export { canvasHandlers };