openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
42 lines (41 loc) • 1.79 kB
JavaScript
import { r as buildSandboxHostPath } from "./sandbox-host-BRz3YO81.mjs";
import { t as WIDGET_CDN_ORIGINS } from "./widget-html-DuR2hZeB.mjs";
import { t as WIDGET_MEDIA_SOURCES } from "./widget-media-DIMzopdf.mjs";
//#region src/gateway/board-sandbox.ts
function grantedConnectOrigins(document) {
if (document.grantState !== "granted") return;
const origins = document.declared?.netOrigins;
return origins?.length ? origins : void 0;
}
function buildBoardWidgetSandboxPath(document) {
const connectDomains = grantedConnectOrigins(document);
return buildSandboxHostPath({
blockDescendantFrames: true,
mediaDomains: [...WIDGET_MEDIA_SOURCES, ...document.resourceOrigins ?? []],
resourceDomains: [.../* @__PURE__ */ new Set([...WIDGET_CDN_ORIGINS, ...document.resourceOrigins ?? []])],
...connectDomains ? { connectDomains } : {}
});
}
/** Defense in depth for direct/legacy widget document loads outside the proxy host. */
function buildBoardWidgetContentSecurityPolicy(document) {
const connectSources = grantedConnectOrigins(document)?.join(" ") ?? "'none'";
const resourceSources = document.resourceOrigins?.join(" ") ?? "";
const cdnSources = WIDGET_CDN_ORIGINS.join(" ");
return [
"default-src 'none'",
`script-src 'unsafe-inline' ${cdnSources} ${resourceSources}`.trim(),
`style-src 'unsafe-inline' ${cdnSources}`,
`font-src data: ${cdnSources}`,
`img-src data: ${resourceSources}`.trim(),
`media-src data: ${WIDGET_MEDIA_SOURCES.join(" ")} ${resourceSources}`.trim(),
`connect-src ${connectSources}`,
"webrtc 'block'",
"base-uri 'none'",
"object-src 'none'",
"form-action 'none'",
"frame-src 'none'",
"sandbox allow-scripts"
].join("; ");
}
//#endregion
export { buildBoardWidgetSandboxPath as n, buildBoardWidgetContentSecurityPolicy as t };