openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
39 lines (38 loc) • 2.57 kB
JavaScript
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 };