UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

58 lines (57 loc) • 3.21 kB
import { r as BoardValidationError } from "./board-layout-6DyK3jbx.mjs"; import { a as resolveBoardWidgetContentKindResourceUrls, i as resolveBoardWidgetContentKindByPluginKind } from "./board-widget-content-kinds-DNQ145aM.mjs"; import { t as buildWidgetDocument } from "./wrap-IO-k8BF1.mjs"; import { c as verifyBoardViewTicket, o as requireBoardViewTicketAuthority } from "./board-view-ticket-DDU-9anz.mjs"; //#region src/gateway/board-widget-view.ts async function withAuthorizedBoardWidgetView(store, ticket, consume, options = {}) { const claims = verifyBoardViewTicket(ticket, options); if (!claims) throw new BoardValidationError("invalid_operation", "board widget view ticket is invalid"); requireBoardViewTicketAuthority(claims, options.gatewayContext); const session = { sessionKey: claims.sessionKey, agentId: claims.agentId }; return await store.useWidgetDocument(session, claims.name, (document) => { const authority = requireBoardViewTicketAuthority(claims, options.gatewayContext); if (claims.expiresAtMs <= (options.nowMs ?? Date.now())) throw new BoardValidationError("invalid_operation", "board widget view ticket is expired"); if (!document || !("viewGeneration" in document) || document.grantState !== "none" && document.grantState !== "granted" || document.revision !== claims.revision || document.viewGeneration !== claims.viewGeneration) throw new BoardValidationError("invalid_operation", "board widget view ticket is stale"); if (claims.pluginFrame) { if (!("source" in document) || document.pluginKind !== claims.pluginFrame.pluginKind) throw new BoardValidationError("invalid_operation", "board widget view ticket is stale"); const registration = resolveBoardWidgetContentKindByPluginKind(authority.pluginRegistry, document.pluginKind); const resourceUrls = registration ? resolveBoardWidgetContentKindResourceUrls(registration, claims.pluginFrame.scopedHostUrl) : void 0; if (!registration || !resourceUrls) throw new BoardValidationError("invalid_operation", "board widget content kind is unavailable"); const resourceOrigins = [...new Set(Object.values(resourceUrls).map((url) => new URL(url).origin))]; const body = registration.definition.composeDocument({ source: document.source, title: document.title ?? claims.name, resourceUrls, promptGranted: document.grantState === "granted" && document.declared?.tools?.includes("prompt") === true }); const composed = { html: buildWidgetDocument(document.title ?? claims.name, body, { connectOrigins: document.declared?.netOrigins, scriptOrigins: resourceOrigins }), revision: document.revision, sha256: document.sha256, viewGeneration: document.viewGeneration, grantState: document.grantState, ...document.declared ? { declared: document.declared } : {}, resourceOrigins }; return consume({ ...session, name: claims.name, document: composed }); } if (!("html" in document)) throw new BoardValidationError("invalid_operation", "board widget view ticket is stale"); return consume({ ...session, name: claims.name, document }); }); } //#endregion export { withAuthorizedBoardWidgetView as t };