From 8eb5caa63c74a2e3e3cc5b54b1a206980de173b8 Mon Sep 17 00:00:00 2001 From: Max Peterson Date: Sun, 9 Aug 2026 20:22:45 -0700 Subject: [PATCH 1/8] add entrypoint-based custom export api - implement design proposed in #114 --- .gitignore | 2 + .../__tests__/browser-export.test.ts | 232 +++++++++++++++-- .../__tests__/format-blueprints.test.ts | 46 +++- .../__tests__/gadget-export.test.ts | 185 ++++++++++++++ .../browser/browser-export-page.ts | 82 ++++++ .../browser-export-runtime.ts | 6 +- .../browser/html-sanitizer-runtime.ts | 21 ++ .../build-browser-runtime.mjs | 40 ++- .../format-blueprints/workspace-docs.gadget | Bin 25000 -> 27375 bytes .../format-blueprints/workspace-docs.json | 2 +- .../format-blueprints/workspace-sheets.gadget | Bin 39404 -> 40309 bytes .../format-blueprints/workspace-sheets.json | 2 +- .../format-blueprints/workspace-slides.gadget | Bin 49977 -> 50769 bytes .../format-blueprints/workspace-slides.json | 2 +- packages/workshop-backend/package.json | 5 +- packages/workshop-backend/src/agent.ts | 6 +- .../workshop-backend/src/browser-export.ts | 200 ++++++--------- .../workshop-backend/src/export-limits.ts | 80 ++++++ .../workshop-backend/src/gadget-export.ts | 142 +++++++++++ packages/workshop-backend/src/overseer.ts | 138 +++++++---- .../workshop-backend/tsconfig.browser.json | 12 + .../workshop-frontend/src/GadgetEditor.tsx | 1 - .../src/GadgetExportMenu.test.tsx | 233 ++++++++++++++++++ .../src/GadgetExportMenu.tsx | 135 ++++++++-- .../workshop-frontend/src/GadgetUseView.tsx | 2 +- .../src/fileTransfers.test.ts | 27 ++ .../workshop-frontend/src/fileTransfers.ts | 4 +- packages/workshop-shared/src/api.ts | 32 ++- pnpm-lock.yaml | 13 + 29 files changed, 1397 insertions(+), 253 deletions(-) create mode 100644 packages/workshop-backend/__tests__/gadget-export.test.ts create mode 100644 packages/workshop-backend/browser/browser-export-page.ts rename packages/workshop-backend/{src => browser}/browser-export-runtime.ts (90%) create mode 100644 packages/workshop-backend/browser/html-sanitizer-runtime.ts create mode 100644 packages/workshop-backend/src/export-limits.ts create mode 100644 packages/workshop-backend/src/gadget-export.ts create mode 100644 packages/workshop-backend/tsconfig.browser.json create mode 100644 packages/workshop-frontend/src/GadgetExportMenu.test.tsx diff --git a/.gitignore b/.gitignore index 170008326..7e3717056 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,8 @@ packages/gatekeeper-*/src/generated/app.txt # Bundled format blueprints (regenerated at build time from FORMAT_BLUEPRINTS_DIR). packages/workshop-backend/src/generated/format-blueprints.ts packages/workshop-backend/src/generated/browser-export-runtime.txt +packages/workshop-backend/src/generated/html-sanitizer-runtime.txt +packages/workshop-backend/src/generated/browser-export-page.js # TypeScript build info *.tsbuildinfo diff --git a/packages/workshop-backend/__tests__/browser-export.test.ts b/packages/workshop-backend/__tests__/browser-export.test.ts index 04ca6302b..371c9faae 100644 --- a/packages/workshop-backend/__tests__/browser-export.test.ts +++ b/packages/workshop-backend/__tests__/browser-export.test.ts @@ -3,8 +3,10 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; const launch = vi.hoisted(() => vi.fn()); vi.mock("@cloudflare/puppeteer", () => ({ launch })); -const { BrowserRpcTransport, limitStream, renderGadgetPdf } = +const { BrowserRpcTransport, renderGadgetInBrowser } = await import("../src/browser-export.js"); +const { createExportDeadline, limitExportStream } = + await import("../src/export-limits.js"); type Harness = { browserClosed: () => boolean; @@ -12,6 +14,15 @@ type Harness = { gadgetDisposed: () => boolean; pdfRequested: () => boolean; renderSettled: () => boolean; + exportDocument: () => string; + exportDocumentCsp: () => string | undefined; + blobRequestAborted: () => boolean; + htmlSanitized: () => boolean; + sanitizerInstalled: () => boolean; + sanitizedInIsolatedRealm: () => boolean; + mediaType: () => string | undefined; + screenshotType: () => string | undefined; + screenshotFullPage: () => boolean | undefined; }; function makeHarness(pdfChunks = ["%PDF-1.4"], closePdf = true) { @@ -21,26 +32,94 @@ function makeHarness(pdfChunks = ["%PDF-1.4"], closePdf = true) { let gadgetDisposed = false; let pdfRequested = false; let renderSettled = false; + let exportDocument = ""; + let exportDocumentCsp: string | undefined; + let blobRequestAborted = false; + let htmlSanitized = false; + let sanitizerInstalled = false; + let sanitizedInIsolatedRealm = false; + let mediaType: string | undefined; + let screenshotType: string | undefined; + let screenshotFullPage: boolean | undefined; + let navigated = false; + let requestHandler: ((request: unknown) => void) | undefined; + const evaluate = ( + isolated: boolean, + fn: ((...args: never[]) => unknown) | string, + ...args: unknown[] + ) => { + if (typeof fn === "string") { + if (!isolated) throw new Error("HTML sanitizer was installed in the main world."); + sanitizerInstalled = true; + return Promise.resolve(); + } + if (fn.toString().includes("__workshopExportModulePromise")) { + if (isolated) throw new Error("Client module was awaited outside the main world."); + clientInitialized = true; + return Promise.resolve(); + } + if (fn.toString().includes("MutationObserver")) { + if (!isolated) throw new Error("DOM settling ran in the main world."); + expect(clientInitialized).toBe(true); + renderSettled = true; + return Promise.resolve(); + } + if (fn.toString().includes("document.title")) { + if (!isolated) throw new Error("Document title was assigned in the main world."); + documentTitle = typeof args[0] === "string" ? args[0] : undefined; + return Promise.resolve(); + } + if (fn.toString().includes("__workshopExportSanitizeHtml")) { + if (!isolated) throw new Error("Main-world sanitizer was invoked."); + expect(sanitizerInstalled).toBe(true); + sanitizedInIsolatedRealm = true; + htmlSanitized = typeof args[0] === "string" && + args[0].includes("script-src 'none'") && + fn.toString().includes("ownerDocument") && + !fn.toString().includes("DOMParser") && + fn.toString().includes("charset"); + return Promise.resolve("\nSnapshot"); + } + // The RPC transport polls this; the fake page never has a message to deliver. + return new Promise(() => {}); + }; + const mainFrame = { + isolatedRealm: () => ({ + evaluate: (fn: (...args: never[]) => unknown, ...args: unknown[]) => + evaluate(true, fn, ...args), + }), + }; let page = { setRequestInterception: async () => {}, - on: () => {}, - goto: async () => {}, - mainFrame: () => ({}), - emulateMediaType: async () => {}, - evaluate: (fn: (...args: never[]) => unknown, ...args: unknown[]) => { - if (fn.toString().includes("__workshopExportModulePromise")) { - clientInitialized = true; - renderSettled = fn.toString().includes("MutationObserver"); - return Promise.resolve(); - } - if (fn.toString().includes("document.title")) { - documentTitle = typeof args[0] === "string" ? args[0] : undefined; - return Promise.resolve(); - } - // The RPC transport polls this; the fake page never has a message to deliver. - return new Promise(() => {}); + on: (event: string, handler: (request: unknown) => void) => { + if (event === "request") requestHandler = handler; + }, + goto: async () => { + navigated = true; + requestHandler?.({ + url: () => "https://gadget-export.invalid/", + isNavigationRequest: () => true, + frame: () => mainFrame, + respond: async (response: {body: string, headers?: Record}) => { + exportDocument = response.body; + exportDocumentCsp = response.headers?.["Content-Security-Policy"]; + }, + }); + requestHandler?.({ + url: () => "blob:https://gadget-export.invalid/test", + isNavigationRequest: () => false, + frame: () => mainFrame, + abort: async () => { blobRequestAborted = true; }, + }); }, + mainFrame: () => mainFrame, + emulateMediaType: async (value: string) => { + expect(navigated).toBe(false); + mediaType = value; + }, + evaluate: (fn: (...args: never[]) => unknown, ...args: unknown[]) => + evaluate(false, fn, ...args), createPDFStream: async () => { expect(clientInitialized).toBe(true); expect(renderSettled).toBe(true); @@ -53,6 +132,11 @@ function makeHarness(pdfChunks = ["%PDF-1.4"], closePdf = true) { }, }); }, + screenshot: async ({type, fullPage}: {type: string, fullPage?: boolean}) => { + screenshotType = type; + screenshotFullPage = fullPage; + return new TextEncoder().encode(type); + }, }; launch.mockResolvedValue({ @@ -74,17 +158,37 @@ function makeHarness(pdfChunks = ["%PDF-1.4"], closePdf = true) { gadgetDisposed: () => gadgetDisposed, pdfRequested: () => pdfRequested, renderSettled: () => renderSettled, + exportDocument: () => exportDocument, + exportDocumentCsp: () => exportDocumentCsp, + blobRequestAborted: () => blobRequestAborted, + htmlSanitized: () => htmlSanitized, + sanitizerInstalled: () => sanitizerInstalled, + sanitizedInIsolatedRealm: () => sanitizedInIsolatedRealm, + mediaType: () => mediaType, + screenshotType: () => screenshotType, + screenshotFullPage: () => screenshotFullPage, }; return { gadget, harness }; } -function render(pdfChunks?: string[], closePdf = true) { +function render( + pdfChunks?: string[], + closePdf = true, + contentType = "application/pdf", +) { let { gadget, harness } = makeHarness(pdfChunks, closePdf); - let stream = renderGadgetPdf( + let stream = renderGadgetInBrowser( {} as BrowserRun, "export default {}", "Test Gadget", gadget as never, + { + id: "test-format", + label: "Test", + mode: "browser", + contentType, + fileExtension: ".test", + }, ); return { stream, harness }; } @@ -129,17 +233,51 @@ describe("BrowserRpcTransport", () => { describe("limitStream", () => { it("passes through output that stays within the cap", async () => { - expect(await collect(limitStream(streamOf(["abc", "de"]), 5))).toBe("abcde"); + expect(await collect(limitExportStream( + streamOf(["abc", "de"]), + createExportDeadline("timed out"), + undefined, + 5, + ))).toBe("abcde"); }); it("fails as soon as the cap is exceeded rather than buffering the whole export", async () => { - let reader = limitStream(streamOf(["abcd", "efgh"]), 6).getReader(); + let reader = limitExportStream( + streamOf(["abcd", "efgh"]), + createExportDeadline("timed out"), + undefined, + 6, + ).getReader(); await expect(reader.read()).resolves.toMatchObject({ done: false }); await expect(reader.read()).rejects.toThrow("may not exceed 6 bytes"); }); + + it("releases resources when a hostile source never settles cancellation", async () => { + vi.useFakeTimers(); + try { + const release = vi.fn(async () => {}); + const source = new ReadableStream({ + pull() { return new Promise(() => {}); }, + cancel() { return new Promise(() => {}); }, + }); + const reader = limitExportStream( + source, + createExportDeadline("timed out", 10), + release, + ).getReader(); + const rejection = expect(reader.read()).rejects.toThrow("timed out"); + + await vi.advanceTimersByTimeAsync(10); + + await rejection; + expect(release).toHaveBeenCalledOnce(); + } finally { + vi.useRealTimers(); + } + }); }); -describe("renderGadgetPdf", () => { +describe("renderGadgetInBrowser", () => { it("settles the client render, streams a PDF, and releases the browser", async () => { let { stream, harness } = render(); @@ -147,6 +285,35 @@ describe("renderGadgetPdf", () => { expect(harness.clientInitialized()).toBe(true); expect(harness.renderSettled()).toBe(true); expect(harness.pdfRequested()).toBe(true); + expect(harness.mediaType()).toBe("print"); + expect(harness.browserClosed()).toBe(true); + expect(harness.exportDocument()).toContain( + 'globalThis.gadgetExportFormatId%20%3D%20%22test-format%22', + ); + expect(harness.exportDocumentCsp()).toContain("img-src data:"); + expect(harness.exportDocumentCsp()).not.toContain("blob:"); + expect(harness.blobRequestAborted()).toBe(true); + }); + + it("exports an inert snapshot with locally bundled DOMPurify", async () => { + let { stream, harness } = render(undefined, true, "text/html"); + + expect(await collect(await stream)).toContain("Snapshot"); + expect(harness.htmlSanitized()).toBe(true); + expect(harness.sanitizerInstalled()).toBe(true); + expect(harness.sanitizedInIsolatedRealm()).toBe(true); + expect(harness.browserClosed()).toBe(true); + }); + + it.each([ + ["image/png", "png"], + ["image/jpeg", "jpeg"], + ])("captures full-page %s screenshots", async (contentType, screenshotType) => { + let { stream, harness } = render(undefined, true, contentType); + + expect(await collect(await stream)).toBe(screenshotType); + expect(harness.screenshotType()).toBe(screenshotType); + expect(harness.screenshotFullPage()).toBe(true); expect(harness.browserClosed()).toBe(true); }); @@ -166,11 +333,12 @@ describe("renderGadgetPdf", () => { let { stream, harness } = render(["first"], false); let reader = (await stream).getReader(); await expect(reader.read()).resolves.toMatchObject({ done: false }); + let timedOut = expect(reader.read()).rejects.toThrow("Browser export timed out."); await vi.advanceTimersByTimeAsync(30_000); + await timedOut; expect(harness.browserClosed()).toBe(true); - await reader.cancel(); } finally { vi.useRealTimers(); } @@ -183,11 +351,18 @@ describe("renderGadgetPdf", () => { let browserClosed = false; let gadgetDisposed = false; launch.mockReturnValue(pendingLaunch.promise); - let result = renderGadgetPdf( + let result = renderGadgetInBrowser( {} as BrowserRun, "export default {}", "Test Gadget", { [Symbol.dispose]: () => { gadgetDisposed = true; } } as never, + { + id: "pdf", + label: "PDF", + mode: "browser", + contentType: "application/pdf", + fileExtension: ".pdf", + }, ); let rejection = expect(result).rejects.toThrow("Browser export timed out."); @@ -209,11 +384,18 @@ describe("renderGadgetPdf", () => { let gadgetDisposed = false; launch.mockRejectedValue(new Error("no browser available")); - await expect(renderGadgetPdf( + await expect(renderGadgetInBrowser( {} as BrowserRun, "export default {}", "Test Gadget", { [Symbol.dispose]: () => { gadgetDisposed = true; } } as never, + { + id: "pdf", + label: "PDF", + mode: "browser", + contentType: "application/pdf", + fileExtension: ".pdf", + }, )).rejects.toThrow("no browser available"); expect(gadgetDisposed).toBe(true); }); diff --git a/packages/workshop-backend/__tests__/format-blueprints.test.ts b/packages/workshop-backend/__tests__/format-blueprints.test.ts index ed6b0a8a0..6ff332554 100644 --- a/packages/workshop-backend/__tests__/format-blueprints.test.ts +++ b/packages/workshop-backend/__tests__/format-blueprints.test.ts @@ -4,14 +4,17 @@ import { parseBlueprintArchive, parseBlueprintKvRecord, sanitizeBlueprintOutput import { formatBlueprintsManifestVersion, installFormatBlueprints } from "../src/format-blueprints.js"; import { FORMAT_BLUEPRINTS } from "../src/generated/format-blueprints.js"; -async function readClientCode(entry: (typeof FORMAT_BLUEPRINTS)[number]): Promise { +async function readBlueprintFile( + entry: (typeof FORMAT_BLUEPRINTS)[number], + filename: string, +): Promise { let archive = new Response(Uint8Array.fromBase64(entry.archive) as BufferSource).body!; let {content} = await parseBlueprintArchive(archive); let decompressed = content.pipeThrough(new DecompressionStream("gzip")); let update = new Uint8Array(await new Response(decompressed).arrayBuffer()); let doc = new Y.Doc(); Y.applyUpdateV2(doc, update); - return doc.getMap().get("client.js")?.toString() ?? ""; + return doc.getMap().get(filename)?.toString() ?? ""; } // Minimal in-memory stand-ins for the two bindings the installer writes to. They record what was @@ -79,7 +82,44 @@ describe("bundled format blueprints", () => { it("ships print layouts for every standard output format", async () => { for (let entry of FORMAT_BLUEPRINTS) { - expect(await readClientCode(entry), entry.blueprintId).toContain("@media print"); + expect(await readBlueprintFile(entry, "client.js"), entry.blueprintId) + .toContain("@media print"); + } + }); + + it("renders document HTML and PDF exports without the editor chrome", async () => { + let entry = FORMAT_BLUEPRINTS.find(blueprint => blueprint.blueprintId === "format.document")!; + let client = await readBlueprintFile(entry, "client.js"); + + expect(client).toContain('["html", "pdf"].includes(globalThis.gadgetExportFormatId)'); + expect(client).toContain('document.documentElement.classList.add("document-export")'); + expect(client).toContain("app.replaceChildren(canvas)"); + }); + + it("declares the intended export formats for every standard output format", async () => { + let expectedFormats: Record = { + "format.document": [ + 'id: "markdown", label: "Markdown", mode: "server", contentType: "text/markdown"', + 'id: "html", label: "HTML", mode: "browser", contentType: "text/html"', + 'id: "pdf", label: "PDF", mode: "browser", contentType: "application/pdf"', + ], + "format.slides": [ + 'id: "html", label: "HTML", mode: "browser", contentType: "text/html"', + 'id: "pdf", label: "PDF", mode: "browser", contentType: "application/pdf"', + ], + "format.spreadsheet": [ + 'const CSV_FORMAT_PREFIX = "csv:"', + 'mode: "server"', + 'contentType: "text/csv"', + ], + }; + + for (let entry of FORMAT_BLUEPRINTS) { + let serverCode = await readBlueprintFile(entry, "server.js"); + expect(serverCode, entry.blueprintId).toContain("export class ExportHandler"); + for (let declaration of expectedFormats[entry.blueprintId] ?? []) { + expect(serverCode, `${entry.blueprintId}: ${declaration}`).toContain(declaration); + } } }); diff --git a/packages/workshop-backend/__tests__/gadget-export.test.ts b/packages/workshop-backend/__tests__/gadget-export.test.ts new file mode 100644 index 000000000..00d55da6a --- /dev/null +++ b/packages/workshop-backend/__tests__/gadget-export.test.ts @@ -0,0 +1,185 @@ +import { describe, expect, it, vi } from "vitest"; +import { RpcStub, RpcTarget } from "cloudflare:workers"; +import { + defaultExportFormats, + exportServerFormat, + readCustomExportFormats, + validateExportFormats, +} from "../src/gadget-export"; + +function streamOf(chunks: string[]): ReadableStream { + return new ReadableStream({ + start(controller) { + for (const chunk of chunks) controller.enqueue(new TextEncoder().encode(chunk)); + controller.close(); + }, + }); +} + +class TestGadgetTarget extends RpcTarget { + getLabel(): string { + return "Capability format"; + } +} + +class TestExportHandlerTarget extends RpcTarget { + async getExportFormats(gadget: RpcStub) { + return [{ + id: "capability", + label: await gadget.getLabel(), + mode: "server", + contentType: "text/plain", + fileExtension: ".txt", + }]; + } +} + +describe("Gadget export formats", () => { + it("provides fresh HTML and PDF defaults", () => { + const first = defaultExportFormats(); + const second = defaultExportFormats(); + + expect(first.map(format => format.id)).toEqual(["html", "pdf"]); + expect(first).toEqual(second); + expect(first).not.toBe(second); + expect(first[0]).not.toBe(second[0]); + }); + + it("accepts browser and server formats", () => { + const formats = validateExportFormats([ + { + id: "png", + label: "Image", + mode: "browser", + contentType: "image/png", + fileExtension: ".png", + }, + { + id: "csv", + label: "CSV", + mode: "server", + contentType: "text/csv", + fileExtension: ".csv", + ignored: "value", + }, + ]); + + expect(formats.map(format => format.id)).toEqual(["png", "csv"]); + expect(formats[1]).not.toHaveProperty("ignored"); + }); + + it("rejects duplicate ids and unsupported browser content types", () => { + const format = { + id: "data", + label: "Data", + mode: "server", + contentType: "text/csv", + fileExtension: ".csv", + }; + expect(() => validateExportFormats([format, format])).toThrow("id is not unique"); + expect(() => validateExportFormats([{ + ...format, + mode: "browser", + }])).toThrow("unsupported content type"); + }); + + it("rejects unsafe file extensions and invalid media types", () => { + const format = { + id: "data", + label: "Data", + mode: "server", + contentType: "text/csv", + fileExtension: ".csv", + }; + expect(() => validateExportFormats([{ + ...format, + fileExtension: "/report.csv", + }])).toThrow("invalid file extension"); + expect(() => validateExportFormats([{ + ...format, + contentType: "not a media type", + }])).toThrow("invalid content type"); + }); + + it("uses defaults only for an absent entrypoint and propagates handler failures", async () => { + const missing = { + async getExportFormats() { + throw new Error("Worker has no such entrypoint: ExportHandler"); + }, + }; + await expect(readCustomExportFormats(missing, {})).resolves.toBeNull(); + + const broken = { + async getExportFormats() { + throw new Error("handler failed"); + }, + }; + await expect(readCustomExportFormats(broken, {})).rejects.toThrow("handler failed"); + }); + + it("passes a serializable Gadget capability to a native RPC handler", async () => { + using gadget = new RpcStub(new TestGadgetTarget()); + using handler = new RpcStub(new TestExportHandlerTarget()); + + await expect(readCustomExportFormats(handler, gadget)).resolves.toEqual([{ + id: "capability", + label: "Capability format", + mode: "server", + contentType: "text/plain", + fileExtension: ".txt", + }]); + }); + + it("times out format discovery", async () => { + vi.useFakeTimers(); + try { + const result = readCustomExportFormats({ + getExportFormats: () => new Promise(() => {}), + }, {}); + const rejection = expect(result).rejects.toThrow( + "Listing Gadget export formats timed out.", + ); + await vi.advanceTimersByTimeAsync(30_000); + await rejection; + } finally { + vi.useRealTimers(); + } + }); +}); + +describe("exportServerFormat", () => { + it("streams server-generated content", async () => { + const stream = await exportServerFormat(async () => streamOf(["a", "bc"])); + expect(await new Response(stream).text()).toBe("abc"); + }); + + it("times out while waiting for the handler", async () => { + vi.useFakeTimers(); + try { + const result = exportServerFormat(() => new Promise(() => {})); + const rejection = expect(result).rejects.toThrow("Gadget export timed out."); + await vi.advanceTimersByTimeAsync(30_000); + await rejection; + } finally { + vi.useRealTimers(); + } + }); + + it("cancels a stream returned after the handler deadline", async () => { + vi.useFakeTimers(); + try { + const pending = Promise.withResolvers>(); + const result = exportServerFormat(() => pending.promise); + const rejection = expect(result).rejects.toThrow("Gadget export timed out."); + await vi.advanceTimersByTimeAsync(30_000); + await rejection; + + const cancel = vi.fn(); + pending.resolve(new ReadableStream({cancel})); + await vi.advanceTimersByTimeAsync(0); + expect(cancel).toHaveBeenCalled(); + } finally { + vi.useRealTimers(); + } + }); +}); diff --git a/packages/workshop-backend/browser/browser-export-page.ts b/packages/workshop-backend/browser/browser-export-page.ts new file mode 100644 index 000000000..8ff2e8565 --- /dev/null +++ b/packages/workshop-backend/browser/browser-export-page.ts @@ -0,0 +1,82 @@ +// These functions run in the remote browser via Puppeteer's page.evaluate(). +// While they are imported by the Worker, they never run in the Worker, and are +// typed for the browser environment. Functions that need to interact directly +// with client.js run in the main world. Everything else runs in an isolated +// realm. + +declare global { + // Globals set in the main world: + + /** Sends a Cap'n Web RPC message from the Worker to the browser-side session. */ + var __workshopExportSendToBrowser: (message: string) => void; + /** Receives the next Cap'n Web RPC message from the browser-side session. */ + var __workshopExportReceiveFromBrowser: () => Promise; + /** Settles when the Gadget client module has finished loading. */ + var __workshopExportModulePromise: Promise>; + + // Globals set in the isolated realm: + + /** Sanitizes a complete HTML document inside Puppeteer's isolated realm. */ + var __workshopExportSanitizeHtml: (html: string) => HTMLHtmlElement; +} + +// Functions that run in the main world: + +/** Delivers one Cap'n Web RPC message to the browser-side session. */ +export function sendToBrowser(message: string): void { + globalThis.__workshopExportSendToBrowser(message); +} + +/** Receives one Cap'n Web RPC message from the browser-side session. */ +export function receiveFromBrowser(): Promise { + return globalThis.__workshopExportReceiveFromBrowser(); +} + +/** Waits for the Gadget client module to finish evaluating in the main world. */ +export async function waitForClientModule(): Promise { + await globalThis.__workshopExportModulePromise; +} + +// Functions that run in the isolated realm: + +/** Waits until the rendered DOM has remained unchanged for the requested interval. */ +export function waitForDomSettled(quietMs: number): Promise { + return new Promise(resolve => { + let timer: ReturnType; + const observer = new MutationObserver(() => { + clearTimeout(timer); + timer = setTimeout(finish, quietMs); + }); + function finish() { + observer.disconnect(); + resolve(); + } + observer.observe(document.documentElement, { + subtree: true, + childList: true, + attributes: true, + characterData: true, + }); + timer = setTimeout(finish, quietMs); + }); +} + +/** Assigns the title used by PDF viewers and the static HTML snapshot. */ +export function setDocumentTitle(title: string): void { + document.title = title; +} + +/** Creates an inert, self-contained HTML snapshot of the rendered Gadget. */ +export function createStaticHtmlSnapshot(csp: string): string { + const sanitized = globalThis.__workshopExportSanitizeHtml( + `\n${document.documentElement.outerHTML}`, + ); + const ownerDocument = sanitized.ownerDocument; + const policy = ownerDocument.createElement("meta"); + policy.httpEquiv = "Content-Security-Policy"; + policy.content = csp; + const charset = ownerDocument.createElement("meta"); + charset.setAttribute("charset", "utf-8"); + ownerDocument.head!.prepend(charset, policy); + return `\n${sanitized.outerHTML}`; +} diff --git a/packages/workshop-backend/src/browser-export-runtime.ts b/packages/workshop-backend/browser/browser-export-runtime.ts similarity index 90% rename from packages/workshop-backend/src/browser-export-runtime.ts rename to packages/workshop-backend/browser/browser-export-runtime.ts index e3696e60b..c9ed4aede 100644 --- a/packages/workshop-backend/src/browser-export-runtime.ts +++ b/packages/workshop-backend/browser/browser-export-runtime.ts @@ -1,8 +1,8 @@ import { RpcSession, RpcStub, RpcTarget, type RpcTransport } from "capnweb"; -// This code runs in the remote browser used for rendering the Gadget UI for export. It -// runs before the Gadget client module is loaded and is mainly responsible for setting -// up the RPC session to the Gadget server. +// This code runs in the main world of the remote browser used for rendering the +// Gadget UI for export. It runs before the Gadget client module is loaded and +// is mainly responsible for setting up the RPC session to the Gadget server. declare global { /** Data URL containing the Gadget client module. */ diff --git a/packages/workshop-backend/browser/html-sanitizer-runtime.ts b/packages/workshop-backend/browser/html-sanitizer-runtime.ts new file mode 100644 index 000000000..28b37c25f --- /dev/null +++ b/packages/workshop-backend/browser/html-sanitizer-runtime.ts @@ -0,0 +1,21 @@ +import createDOMPurify from "dompurify"; + +// This code runs in the isolated realm prior to HTML export. It provides an +// HTML sanitizer API to functions called by page.evaluate(). Ideally these +// functions could use the [HTML Sanitizer +// API](https://developer.mozilla.org/en-US/docs/Web/API/HTML_Sanitizer_API) and +// we wouldn't need this file or dompurify as a dependency at all, but Browser +// Run uses an older version of Chromium that doesn't support the HTML Sanitizer +// API. When Browser Run eventually updates Chromium to a supported version, we +// can get rid of this file and dompurify. + +declare global { + /** Sanitizes a complete HTML document inside Puppeteer's isolated realm. */ + var __workshopExportSanitizeHtml: (html: string) => HTMLHtmlElement; +} + +const purifier = createDOMPurify(window); +globalThis.__workshopExportSanitizeHtml = html => purifier.sanitize(html, { + WHOLE_DOCUMENT: true, + RETURN_DOM: true, +}) as HTMLHtmlElement; diff --git a/packages/workshop-backend/build-browser-runtime.mjs b/packages/workshop-backend/build-browser-runtime.mjs index 972a8bbb6..14a25586a 100644 --- a/packages/workshop-backend/build-browser-runtime.mjs +++ b/packages/workshop-backend/build-browser-runtime.mjs @@ -4,9 +4,29 @@ import { fileURLToPath } from "node:url"; import { build } from "esbuild"; const packageDir = dirname(fileURLToPath(import.meta.url)); -const outputFile = resolve(packageDir, "src/generated/browser-export-runtime.txt"); -const result = await build({ - entryPoints: [resolve(packageDir, "src/browser-export-runtime.ts")], +const runtimeOutputFile = resolve(packageDir, "src/generated/browser-export-runtime.txt"); +const sanitizerOutputFile = resolve(packageDir, "src/generated/html-sanitizer-runtime.txt"); +const pageOutputFile = resolve(packageDir, "src/generated/browser-export-page.js"); + +const runtimeResult = await build({ + entryPoints: [resolve(packageDir, "browser/browser-export-runtime.ts")], + bundle: true, + format: "iife", + platform: "browser", + target: "es2025", + minify: true, + write: false, +}); +const pageResult = await build({ + entryPoints: [resolve(packageDir, "browser/browser-export-page.ts")], + bundle: true, + format: "esm", + platform: "browser", + target: "es2025", + write: false, +}); +const sanitizerResult = await build({ + entryPoints: [resolve(packageDir, "browser/html-sanitizer-runtime.ts")], bundle: true, format: "iife", platform: "browser", @@ -14,9 +34,15 @@ const result = await build({ minify: true, write: false, }); -const contents = new TextDecoder().decode(result.outputFiles[0].contents); -if (!existsSync(outputFile) || readFileSync(outputFile, "utf8") !== contents) { - mkdirSync(dirname(outputFile), { recursive: true }); - writeFileSync(outputFile, contents); +writeIfChanged(runtimeOutputFile, runtimeResult.outputFiles[0].contents); +writeIfChanged(sanitizerOutputFile, sanitizerResult.outputFiles[0].contents); +writeIfChanged(pageOutputFile, pageResult.outputFiles[0].contents); + +function writeIfChanged(outputFile, bytes) { + const contents = new TextDecoder().decode(bytes); + if (!existsSync(outputFile) || readFileSync(outputFile, "utf8") !== contents) { + mkdirSync(dirname(outputFile), { recursive: true }); + writeFileSync(outputFile, contents); + } } diff --git a/packages/workshop-backend/format-blueprints/workspace-docs.gadget b/packages/workshop-backend/format-blueprints/workspace-docs.gadget index e8d08bfa0b2f49e900fa9e1a54548e8a8ab5be06..8ff99f571c663bb2fe49e90f1b8947fdf3dbcad1 100644 GIT binary patch delta 27303 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%0AYj$E*e0I&R7s; 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 RcVB$*{{igfI$iQo0RZ%pQ8)kq diff --git a/packages/workshop-backend/format-blueprints/workspace-docs.json b/packages/workshop-backend/format-blueprints/workspace-docs.json index 2fb902338..85b7b2096 100644 --- a/packages/workshop-backend/format-blueprints/workspace-docs.json +++ b/packages/workshop-backend/format-blueprints/workspace-docs.json @@ -10,5 +10,5 @@ "icon": "fileText" }, "author": { "type": "user", "name": "Cloudflare", "id": "agent@cloudflare.com" }, - "revision": 4 + "revision": 6 } diff --git a/packages/workshop-backend/format-blueprints/workspace-sheets.gadget b/packages/workshop-backend/format-blueprints/workspace-sheets.gadget index 84102c1a1e349a7ddd5119c7a252f446883cdf5a..bfd866cc07ee023e12e9c4840ddf1c0376aadf6f 100644 GIT binary patch delta 40306 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 F0sthqf*=3@ delta 49388 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 && exit 1", "deploy": "wrangler deploy", "build:worker": "node build-browser-runtime.mjs && pnpm exec capnweb-validate build --out .wrangler/validate", + "build": "node build-browser-runtime.mjs && node scripts/build-format-blueprints.mjs && tsc --project tsconfig.browser.json && tsc", "clean": "rm -rf dist", "test:integration": "node build-browser-runtime.mjs && node scripts/build-format-blueprints.mjs && vitest run --config vitest.integration.config.ts", "test:run": "node build-browser-runtime.mjs && node scripts/build-format-blueprints.mjs && vitest run && vitest run --config vitest.integration.config.ts", @@ -25,10 +26,12 @@ "capnweb-validate": "catalog:", "diff": "^8.0.4", "jose": "^6.2.8", - "yjs": "^13.6.31" + "yjs": "^13.6.31", + "zod": "^4.4.3" }, "devDependencies": { "@cloudflare/vitest-pool-workers": "catalog:", + "dompurify": "^3.4.13", "esbuild": "^0.28.1", "typescript": "catalog:", "vitest": "catalog:", diff --git a/packages/workshop-backend/src/agent.ts b/packages/workshop-backend/src/agent.ts index 23a79d9ed..03d272db1 100644 --- a/packages/workshop-backend/src/agent.ts +++ b/packages/workshop-backend/src/agent.ts @@ -490,7 +490,11 @@ Note that there is no index.html. Instead, client.js must build the entire UI us Make Gadget UIs responsive and usable on both desktop and phones by default. -Every Gadget UI can be exported to PDF using platform-owned controls outside the Gadget. Never add print or export UI to a Gadget and never call \`window.print()\`. When asked to support or improve PDF export, only add standard print CSS such as \`@media print\`, \`@page\`, and CSS fragmentation properties so the PDF remains readable. +Every Gadget UI can be exported to HTML or PDF using platform-owned controls outside the Gadget. Never add print or export UI to a Gadget and never call \`window.print()\`. Browser-mode exports render using print media. When asked to support or improve browser export, use standard print CSS such as \`@media print\`, \`@page\`, and CSS fragmentation properties so the output remains readable. + +During a browser-mode export, the client context is initialized with another special global variable named \`gadgetExportFormatId\`. This variable is only defined during export; during normal interactive rendering, referencing it directly throws a \`ReferenceError\`. Guard access with \`typeof gadgetExportFormatId !== "undefined"\` or read \`globalThis.gadgetExportFormatId\`. Use \`gadgetExportFormatId\` when the Gadget supports multiple HTML, PDF, PNG, or JPEG export variants. Do not declare or import \`gadgetExportFormatId\` in client.js. + +To add, replace, or disable export formats, server.js may export a class named \`ExportHandler\`, which must extend \`WorkerEntrypoint\`. Its \`getExportFormats(gadget)\` method returns the complete list of formats, and its \`export(gadget, id)\` method returns a \`ReadableStream\` for formats whose mode is \`"server"\`. If \`getExportFormats(gadget)\` returns only browser-mode formats, do not implement \`export(gadget, id)\`. \`export\` is valid as a JavaScript class method name; write it directly as \`async export(gadget, id)\`, without quoting it or using a computed property. Browser mode supports \`text/html\`, \`application/pdf\`, \`image/png\`, and \`image/jpeg\`; server mode supports any media type. Each format must contain a unique non-empty \`id\`, a \`label\`, a \`mode\`, a \`contentType\`, and a \`fileExtension\` beginning with a dot. Returning an empty list disables export. The Workshop supplies default HTML and PDF formats only when server.js does not export \`ExportHandler\` at all. Both the client and server run inside a strictly isolated sandbox. They cannot make requests to the Internet, e.g. by calling \`fetch()\`. Instead, a Gadget communicates with the outside world strictly through its "bindings", that is, the Cloudflare Workers \`env\` API, which code in the Durable Object class can access as \`this.env\`. diff --git a/packages/workshop-backend/src/browser-export.ts b/packages/workshop-backend/src/browser-export.ts index b792b2b1e..f858a4581 100644 --- a/packages/workshop-backend/src/browser-export.ts +++ b/packages/workshop-backend/src/browser-export.ts @@ -1,7 +1,18 @@ import { launch, type Page } from "@cloudflare/puppeteer"; import { RpcSession, type RpcStub, type RpcTransport } from "capnweb"; import { createLogger } from "@gadgets/backend-utils/logger"; +import type { GadgetExportFormat } from "@gadgets/workshop-shared/api"; import BROWSER_EXPORT_RUNTIME from "./generated/browser-export-runtime.txt"; +import HTML_SANITIZER_RUNTIME from "./generated/html-sanitizer-runtime.txt"; +import { + createStaticHtmlSnapshot, + receiveFromBrowser, + sendToBrowser, + setDocumentTitle, + waitForClientModule, + waitForDomSettled, +} from "./generated/browser-export-page.js"; +import { createExportDeadline, limitExportStream } from "./export-limits"; type BrowserExportLogFields = { event?: string; @@ -10,10 +21,6 @@ type BrowserExportLogFields = { const logger = createLogger({ component: "workshop.browser-export" }); -/** Wall-clock budget covering launch, rendering, and delivery of the entire export. */ -const MAX_EXPORT_DURATION_MS = 30_000; -/** Largest export the Workshop will stream. Enforced while streaming, never buffered in full. */ -const MAX_EXPORT_BYTES = 100 * 1024 * 1024; /** Quiet period indicating that the client has finished its initial DOM updates. */ const DOM_SETTLE_MS = 250; /** Budget for releasing the browser session once an export has settled. */ @@ -28,27 +35,18 @@ const EXPORT_DOCUMENT_URL = "https://gadget-export.invalid/"; // running inside an iframe in the user's browser. We should close the gap in both places. For now, // extending the same gap to remotely-rendered gadgets is acceptable. const EXPORT_DOCUMENT_CSP = "default-src 'none'; frame-src 'none'; script-src data:; " + - "style-src data: 'unsafe-inline'; img-src data: blob:; media-src data: blob:; " + + "style-src data: 'unsafe-inline'; img-src data:; media-src data:; " + "font-src data:; object-src 'none'; base-uri 'none'; form-action 'none'; " + "connect-src 'none'; sandbox allow-scripts;"; +const STATIC_HTML_CSP = "default-src 'none'; frame-src 'none'; script-src 'none'; " + + "style-src data: 'unsafe-inline'; img-src data:; media-src data:; font-src data:; " + + "object-src 'none'; base-uri 'none'; form-action 'none'; connect-src 'none';"; -function createDeadline(ms: number, message: string) { - let expired = Promise.withResolvers(); - let timer = setTimeout(() => expired.reject(new Error(message)), ms); - expired.promise.catch(() => {}); - - return { - race(work: Promise): Promise { - return Promise.race([work, expired.promise]); - }, - clear(): void { - clearTimeout(timer); - }, - onExpire(callback: () => Promise): void { - void expired.promise.catch(callback).catch(() => {}); - }, - }; -} +// Puppeteer's isolated realm is intentionally absent from its public bundled types, though its +// own security-sensitive DOM helpers use it. Keep this narrow until the method is public. +type FrameWithIsolatedRealm = ReturnType & { + isolatedRealm(): Pick; +}; async function closeBrowser(browser: Awaited>): Promise { let timer: ReturnType; @@ -90,10 +88,7 @@ export class BrowserRpcTransport implements RpcTransport { ++this.#pendingSendCount; this.#pendingSendChars += message.length; let delivered = this.#sendChain.then(() => - this.#untilAborted(this.page.evaluate( - text => globalThis.__workshopExportSendToBrowser(text), - message, - ))); + this.#untilAborted(this.page.evaluate(sendToBrowser, message))); let settled = delivered.finally(() => { --this.#pendingSendCount; this.#pendingSendChars -= message.length; @@ -104,7 +99,7 @@ export class BrowserRpcTransport implements RpcTransport { async receive(): Promise { let message = await this.#untilAborted( - this.page.evaluate(() => globalThis.__workshopExportReceiveFromBrowser()), + this.page.evaluate(receiveFromBrowser), ); if (typeof message !== "string") { throw new Error("The Gadget export RPC message from the browser was not a string."); @@ -132,13 +127,14 @@ function scriptUrl(source: string): string { return `data:text/javascript;charset=utf-8,${encodeURIComponent(source)}`; } -function makeExportHtml(clientCode: string): string { +function makeExportHtml(clientCode: string, formatId: string): string { let clientPrefix = String.raw`//# sourceURL=client.js const { gadget, RpcStub, RpcTarget } = globalThis.__workshopExportRuntime; delete globalThis.__workshopExportRuntime; `; let clientUrl = scriptUrl(clientPrefix + clientCode); let runtimeUrl = scriptUrl( + `globalThis.gadgetExportFormatId = ${JSON.stringify(formatId)};\n` + `globalThis.__workshopExportClientUrl = ${JSON.stringify(clientUrl)};\n` + BROWSER_EXPORT_RUNTIME); @@ -153,102 +149,21 @@ delete globalThis.__workshopExportRuntime; `; } -/** Limits the size of the exported file streamed back to the client. */ -export function limitStream( - source: ReadableStream, - maxBytes: number, -): ReadableStream { - let total = 0; - let limiter = new TransformStream({ - transform(chunk, controller) { - total += chunk.byteLength; - if (total > maxBytes) { - controller.error(new Error(`Gadget exports may not exceed ${maxBytes} bytes.`)); - return; - } - controller.enqueue(chunk); - }, - }); - void source.pipeTo(limiter.writable).catch(() => {}); - return limiter.readable; -} - -/** Releases the browser session once the export stream completes, fails, or is cancelled. */ -function releaseWhenSettled( - source: ReadableStream, - release: () => Promise, -): ReadableStream { - let reader = source.getReader(); - return new ReadableStream({ - async pull(controller) { - let chunk; - try { - chunk = await reader.read(); - } catch (error) { - await release(); - throw error; - } - if (chunk.done) { - await release(); - controller.close(); - } else { - controller.enqueue(chunk.value); - } - }, - async cancel(reason) { - await reader.cancel(reason).catch(() => {}); - await release(); - }, - }); -} - -async function waitForDomSettled(page: Page): Promise { - await page.evaluate(async (quietMs: number) => { - const browser = globalThis as unknown as { - __workshopExportModulePromise: Promise>; - document: { documentElement: unknown }; - MutationObserver: new(callback: () => void) => { - observe(target: unknown, options: Record): void; - disconnect(): void; - }; - }; - // Make sure that client module has been loaded before watching DOM. - await browser.__workshopExportModulePromise; - await new Promise(resolve => { - let timer: ReturnType; - let observer = new browser.MutationObserver(() => { - clearTimeout(timer); - timer = setTimeout(finish, quietMs); - }); - function finish() { - observer.disconnect(); - resolve(); - } - observer.observe(browser.document.documentElement, { - subtree: true, - childList: true, - attributes: true, - characterData: true, - }); - timer = setTimeout(finish, quietMs); - }); - }, DOM_SETTLE_MS); -} - /** - * Renders a Gadget's UI as PDF in a remote browser and streams the bytes back. + * Renders a Gadget's browser-mode export and streams the bytes back. * * Takes ownership of `gadget` and disposes it once the export settles. The * returned stream must be consumed or cancelled: the browser session stays open * until it settles or times out. */ -export async function renderGadgetPdf( +export async function renderGadgetInBrowser( browserBinding: BrowserRun, clientCode: string, documentTitle: string, gadget: RpcStub, + format: GadgetExportFormat, ): Promise> { - let deadline = createDeadline(MAX_EXPORT_DURATION_MS, "Browser export timed out."); + const deadline = createExportDeadline("Browser export timed out."); let launchPromise = launch(browserBinding); let browser: Awaited>; @@ -284,11 +199,10 @@ export async function renderGadgetPdf( } return releasePromise; }; - deadline.onExpire(release); - try { let source = await deadline.race((async () => { let page = await browser.newPage(); + await page.emulateMediaType("print"); await page.setRequestInterception(true); page.on("request", (request) => { let url = request.url(); @@ -298,9 +212,9 @@ export async function renderGadgetPdf( status: 200, contentType: "text/html", headers: {"Content-Security-Policy": EXPORT_DOCUMENT_CSP}, - body: makeExportHtml(clientCode), + body: makeExportHtml(clientCode, format.id), }); - } else if (url === "about:blank" || url.startsWith("data:") || url.startsWith("blob:")) { + } else if (url === "about:blank" || url.startsWith("data:")) { void request.continue(); } else { void request.abort(); @@ -311,24 +225,50 @@ export async function renderGadgetPdf( page.on("close", () => transport.abort(new Error("Browser page closed."))); let rpcSession = new RpcSession(transport, gadget); sessionCloser = rpcSession.getRemoteMain(); - await waitForDomSettled(page); - await page.emulateMediaType("print"); - await page.evaluate(title => { - let browser = globalThis as unknown as { document: { title: string } }; - browser.document.title = title; - }, documentTitle); - return page.createPDFStream({ - preferCSSPageSize: true, - printBackground: true, - waitForFonts: true, - }); + await page.evaluate(waitForClientModule); + const frame = page.mainFrame() as FrameWithIsolatedRealm; + const isolatedRealm = frame.isolatedRealm(); + await isolatedRealm.evaluate(waitForDomSettled, DOM_SETTLE_MS); + await isolatedRealm.evaluate(setDocumentTitle, documentTitle); + switch (format.contentType) { + case "application/pdf": + return page.createPDFStream({ + preferCSSPageSize: true, + printBackground: true, + waitForFonts: true, + }); + case "text/html": { + await isolatedRealm.evaluate(HTML_SANITIZER_RUNTIME); + const html = await isolatedRealm.evaluate(createStaticHtmlSnapshot, STATIC_HTML_CSP); + return streamBytes(new TextEncoder().encode(html)); + } + case "image/png": + return streamBytes(await page.screenshot({type: "png", fullPage: true})); + case "image/jpeg": + return streamBytes(await page.screenshot({type: "jpeg", fullPage: true})); + default: + throw new Error(`Unsupported browser export content type: ${format.contentType}`); + } })()); - return releaseWhenSettled(limitStream(source, MAX_EXPORT_BYTES), release); + return limitExportStream(source, deadline, release); } catch (error) { // Deliberately omits the caught value: failures here can carry Gadget-authored exception text, // which must not reach logs or the external issue Reporter. logger.warn("failed to render gadget export", { event: "gadget.export.render.failed" }); - await release(); + if (error === deadline.error) { + void release(); + } else { + await release(); + } throw error; } } + +function streamBytes(bytes: Uint8Array): ReadableStream { + return new ReadableStream({ + start(controller) { + controller.enqueue(bytes); + controller.close(); + }, + }); +} diff --git a/packages/workshop-backend/src/export-limits.ts b/packages/workshop-backend/src/export-limits.ts new file mode 100644 index 000000000..918cde7d6 --- /dev/null +++ b/packages/workshop-backend/src/export-limits.ts @@ -0,0 +1,80 @@ +/** Wall-clock budget covering generation and delivery of an export. */ +export const MAX_EXPORT_DURATION_MS = 30_000; + +/** Largest export the Workshop will stream. */ +export const MAX_EXPORT_BYTES = 100 * 1024 * 1024; + +/** A deadline shared by export setup and stream delivery. */ +export type ExportDeadline = ReturnType; + +/** Creates a rejectable wall-clock deadline for an export operation. */ +export function createExportDeadline(message: string, durationMs = MAX_EXPORT_DURATION_MS) { + const expired = Promise.withResolvers(); + const error = new Error(message); + const timer = setTimeout(() => expired.reject(error), durationMs); + expired.promise.catch(() => {}); + + return { + error, + race(work: Promise): Promise { + return Promise.race([work, expired.promise]); + }, + clear(): void { + clearTimeout(timer); + }, + onExpire(callback: (reason: Error) => Promise): void { + void expired.promise.catch(callback).catch(() => {}); + }, + }; +} + +/** Enforces export size and duration while releasing owned resources on settlement. */ +export function limitExportStream( + source: ReadableStream, + deadline: ExportDeadline, + release: () => Promise = async () => {}, + maxBytes = MAX_EXPORT_BYTES, +): ReadableStream { + const reader = source.getReader(); + let total = 0; + let settlePromise: Promise | undefined; + const settle = (cancelSource: boolean, reason?: unknown) => { + if (!settlePromise) { + deadline.clear(); + settlePromise = (async () => { + await release(); + // Cancellation is advisory. A hostile Gadget stream must not keep the + // export or its owned browser alive by returning a promise that never settles. + if (cancelSource) void reader.cancel(reason).catch(() => {}); + })(); + } + return settlePromise; + }; + + deadline.onExpire(reason => settle(true, reason)); + + return new ReadableStream({ + async pull(controller) { + try { + const chunk = await deadline.race(reader.read()); + if (chunk.done) { + await settle(false); + controller.close(); + return; + } + total += chunk.value.byteLength; + if (total > maxBytes) { + throw new Error(`Gadget exports may not exceed ${maxBytes} bytes.`); + } + controller.enqueue(chunk.value); + } catch (error) { + const cleanup = settle(true, error); + if (error !== deadline.error) await cleanup; + throw error; + } + }, + async cancel(reason) { + await settle(true, reason); + }, + }); +} diff --git a/packages/workshop-backend/src/gadget-export.ts b/packages/workshop-backend/src/gadget-export.ts new file mode 100644 index 000000000..d398d0d88 --- /dev/null +++ b/packages/workshop-backend/src/gadget-export.ts @@ -0,0 +1,142 @@ +import type { GadgetExportFormat } from "@gadgets/workshop-shared/api"; +import type { DurableObject, RpcStub, RpcTarget, WorkerEntrypoint } from "cloudflare:workers"; +import { z } from "zod"; +import { createExportDeadline, limitExportStream } from "./export-limits"; + +/** Name of the optional Gadget export handler entrypoint. */ +export const GADGET_EXPORT_ENTRYPOINT = "ExportHandler"; + +type GadgetExportCapability = + RpcStub>; + +/** Optional Worker entrypoint exported by a Gadget to customize file exports. */ +export interface GadgetExportEntrypoint + extends WorkerEntrypoint { + /** Lists all export formats supported by the Gadget. */ + getExportFormats(gadget: GadgetExportCapability): Promise; + + /** Produces the content for a server-mode export format. */ + export(gadget: GadgetExportCapability, id: string): Promise>; +} + +const MAX_EXPORT_FORMATS = 32; +const MAX_EXPORT_ID_LENGTH = 128; +const MAX_EXPORT_LABEL_LENGTH = 128; +const MAX_CONTENT_TYPE_LENGTH = 255; +const MAX_FILE_EXTENSION_LENGTH = 32; + +const BROWSER_CONTENT_TYPES = new Set([ + "text/html", + "application/pdf", + "image/png", + "image/jpeg", +]); + +function boundedString(name: string, maxLength: number) { + return z.string() + .min(1, `Gadget export format ${name} must be between 1 and ${maxLength} characters.`) + .max(maxLength, + `Gadget export format ${name} must be between 1 and ${maxLength} characters.`); +} + +const EXPORT_FORMAT_SCHEMA: z.ZodType = z.object({ + id: boundedString("id", MAX_EXPORT_ID_LENGTH), + label: boundedString("label", MAX_EXPORT_LABEL_LENGTH), + mode: z.enum(["browser", "server"]), + contentType: boundedString("contentType", MAX_CONTENT_TYPE_LENGTH) + .regex(/^[-!#$%&'*+.^_`|~0-9A-Za-z]+\/[-!#$%&'*+.^_`|~0-9A-Za-z]+$/, + "Gadget export format has an invalid content type."), + fileExtension: boundedString("fileExtension", MAX_FILE_EXTENSION_LENGTH) + .regex(/^\.[A-Za-z0-9][A-Za-z0-9._-]*$/, + "Gadget export format has an invalid file extension."), +}).superRefine((format, context) => { + if (format.mode === "browser" && !BROWSER_CONTENT_TYPES.has(format.contentType)) { + context.addIssue({ + code: "custom", + path: ["contentType"], + message: `Browser export format ${format.id} has an unsupported content type.`, + }); + } +}); + +const EXPORT_FORMATS_SCHEMA = z.array(EXPORT_FORMAT_SCHEMA) + .max(MAX_EXPORT_FORMATS, `A Gadget may define at most ${MAX_EXPORT_FORMATS} export formats.`) + .superRefine((formats, context) => { + const ids = new Set(); + formats.forEach((format, index) => { + if (ids.has(format.id)) { + context.addIssue({ + code: "custom", + path: [index, "id"], + message: `Gadget export format id is not unique: ${format.id}`, + }); + } + ids.add(format.id); + }); + }); + +const DEFAULT_EXPORT_FORMATS: GadgetExportFormat[] = [ + { + id: "html", + label: "HTML", + mode: "browser", + contentType: "text/html", + fileExtension: ".html", + }, + { + id: "pdf", + label: "PDF", + mode: "browser", + contentType: "application/pdf", + fileExtension: ".pdf", + }, +]; + +/** Returns fresh copies of the default HTML and PDF export formats. */ +export function defaultExportFormats(): GadgetExportFormat[] { + return DEFAULT_EXPORT_FORMATS.map(format => ({...format})); +} + +/** Validates and normalizes export format metadata returned by Gadget code. */ +export function validateExportFormats(value: unknown): GadgetExportFormat[] { + const result = EXPORT_FORMATS_SCHEMA.safeParse(value); + if (!result.success) { + throw new Error(result.error.issues[0]?.message ?? "Invalid Gadget export formats."); + } + return result.data; +} + +/** Reads custom formats, returning null only when the named entrypoint is absent. */ +export async function readCustomExportFormats( + handler: {getExportFormats(gadget: Gadget): Promise}, + gadget: Gadget, +): Promise { + const deadline = createExportDeadline("Listing Gadget export formats timed out."); + try { + return validateExportFormats(await deadline.race(handler.getExportFormats(gadget))); + } catch (error) { + if (error instanceof Error && + error.message === `Worker has no such entrypoint: ${GADGET_EXPORT_ENTRYPOINT}`) { + return null; + } + throw error; + } finally { + deadline.clear(); + } +} + +/** Applies the platform export limits to a Gadget-generated server stream. */ +export async function exportServerFormat( + createStream: () => Promise>, +): Promise> { + const deadline = createExportDeadline("Gadget export timed out."); + const streamPromise = createStream(); + try { + const source = await deadline.race(streamPromise); + return limitExportStream(source, deadline); + } catch (error) { + deadline.clear(); + void streamPromise.then(stream => stream.cancel(error), () => {}).catch(() => {}); + throw error; + } +} diff --git a/packages/workshop-backend/src/overseer.ts b/packages/workshop-backend/src/overseer.ts index 43361797e..3dd8b6453 100644 --- a/packages/workshop-backend/src/overseer.ts +++ b/packages/workshop-backend/src/overseer.ts @@ -40,12 +40,20 @@ import { collectSlashCommands, invokeSlashCommand } from "./slash-commands"; import { createWorkshopLogger, obsContext, traced } from "./observability"; import { wrapDoStubForTelemetry } from "./do-telemetry"; import type { ChatGatewayRpcTarget, SubmitExternalMessageResult } from "@gadgets/workshop-shared/external-message-gateway"; +import type { GadgetExportFormat } from "@gadgets/workshop-shared/api"; import { assertChatAttachmentSupportedByProvider, isAllowedChatAttachmentImageMimeType, validateChatAttachmentUpload, } from "./chat-attachment-validation"; -import { renderGadgetPdf } from "./browser-export"; +import { renderGadgetInBrowser } from "./browser-export"; +import { + defaultExportFormats, + exportServerFormat, + GADGET_EXPORT_ENTRYPOINT, + type GadgetExportEntrypoint, + readCustomExportFormats, +} from "./gadget-export"; const logger = createWorkshopLogger("workshop.overseer"); export const AGENT_RUNNING_ERROR_MESSAGE = "Agent is running, wait for it to finish."; @@ -2521,13 +2529,78 @@ class OverseerImpl implements AgentHooks { }, }); - // Explicitly construct at RpcStub around the proxy to work around a workerd bug where + // Explicitly construct an RpcStub around the proxy to work around a workerd bug where // returning an RpcTarget proxy as the top-level return value from an RPC isn't detected // correctly. // @ts-expect-error NativeRpcStub still has infinite recursion problems, fixed in Cap'n Web. return new NativeRpcStub(proxy) as RpcStub; } + getGadgetUiBundle(gadgetId: WorkpieceId, chatId?: number): UiBundle | null { + this.prepareGadgetChat(chatId); + + let {ydoc} = this.buildYDoc("current"); + if (chatId !== undefined) { + this.getProposedChanges(chatId).forEach(({update}) => { + if (update !== undefined) Y.applyUpdateV2(ydoc, update); + }); + } + + let file = ydoc.getMap(this.gadgetRootName(gadgetId)).get("client.js"); + return file ? {jsCode: file.toString()} : null; + } + + async getGadgetExportFormats(gadgetId: WorkpieceId, chatId?: number) + : Promise { + this.prepareGadgetChat(chatId); + return (await this.#resolveGadgetExportFormats(gadgetId, chatId)).formats; + } + + async exportGadget(gadgetId: WorkpieceId, formatId: string, chatId?: number) + : Promise> { + this.prepareGadgetChat(chatId); + let {formats, handler} = await this.#resolveGadgetExportFormats(gadgetId, chatId); + let format = formats.find(candidate => candidate.id === formatId); + if (!format) throw new Error(`This Gadget does not support export format: ${formatId}`); + + if (format.mode === "server") { + if (!handler) throw new Error("The Gadget export handler is unavailable."); + using gadget = await this.getGadgetFacet(gadgetId, chatId); + // The facet is a native RpcStub at runtime, despite its Cap'n Web type for browser callers. + return await exportServerFormat(() => + handler.export(gadget as NativeRpcStub, format.id)); + } + + let browser = this.env.BROWSER; + if (!browser) throw new Error("Gadget export is not configured for this deployment."); + let bundle = this.getGadgetUiBundle(gadgetId, chatId); + if (!bundle) throw new Error("This Gadget does not have a UI to export."); + let browserGadget = await this.getGadgetFacet(gadgetId, chatId); + let title = this.getGadgetRecord(gadgetId).title; + return renderGadgetInBrowser(browser, bundle.jsCode, title, browserGadget, format); + } + + prepareGadgetChat(chatId?: number): void { + if (chatId !== undefined) { + let meta = this.getChatMetaOrThrow(chatId); + if (!meta.activeAgent) this.materializeChatDraft(chatId, meta); + } + } + + async #resolveGadgetExportFormats(gadgetId: WorkpieceId, chatId?: number): Promise<{ + formats: GadgetExportFormat[]; + handler: Fetcher | null; + }> { + let handler = this.loadGadgetWorker(gadgetId, chatId) + .getEntrypoint(GADGET_EXPORT_ENTRYPOINT); + using gadget = await this.getGadgetFacet(gadgetId, chatId); + // The facet is a native RpcStub at runtime, despite its Cap'n Web type for browser callers. + let formats = await readCustomExportFormats(handler, gadget as NativeRpcStub); + return formats === null + ? {formats: defaultExportFormats(), handler: null} + : {formats, handler}; + } + // Load a WorkerEntrypoint exported by the gadget, used to implement a hook. // // TODO: There should be a way to simulate hooks within the context of a particular chat thread, @@ -9230,30 +9303,7 @@ class GadgetClientImpl extends RpcTarget implements GadgetClient { } async getUiBundle(chatId?: number): Promise { - // TODO: Bundle the UI? For now we just return client.js. - if (chatId !== undefined) { - let meta = this.impl.getChatMetaOrThrow(chatId); - if (!meta.activeAgent) { - this.impl.materializeChatDraft(chatId, meta); - } - } - - let {ydoc} = this.impl.buildYDoc("current"); - - if (chatId !== undefined) { - this.impl.getProposedChanges(chatId).forEach(({update}) => { - if (update !== undefined) { - Y.applyUpdateV2(ydoc, update); - } - }); - } - - let file = ydoc.getMap(this.impl.gadgetRootName(this.id)).get("client.js"); - if (file) { - return { jsCode: file.toString() }; - } else { - return null; - } + return this.impl.getGadgetUiBundle(this.id, chatId); } async connectToGadget(chatId?: number): Promise> { @@ -9266,15 +9316,12 @@ class GadgetClientImpl extends RpcTarget implements GadgetClient { return this.impl.getGadgetFacet(this.id, chatId); } - async exportPdf(chatId?: number): Promise> { - // Read as possibly-undefined: self-hosted deployments may omit the binding (see env.d.ts). - let browser: BrowserRun | undefined = this.impl.env.BROWSER; - if (!browser) throw new Error("Gadget export is not configured for this deployment."); - let bundle = await this.getUiBundle(chatId); - if (!bundle) throw new Error("This Gadget does not have a UI to export."); - let gadget = await this.impl.getGadgetFacet(this.id, chatId); - let title = this.impl.getGadgetRecord(this.id).title; - return renderGadgetPdf(browser, bundle.jsCode, title, gadget); + async getExportFormats(chatId?: number): Promise { + return this.impl.getGadgetExportFormats(this.id, chatId); + } + + async export(formatId: string, chatId?: number): Promise> { + return this.impl.exportGadget(this.id, formatId, chatId); } async listBindings(chatId?: number): Promise { @@ -9502,10 +9549,7 @@ class UseGadgetClientInterface extends RpcTarget implements GadgetClient { if (chatId !== undefined) { this.#deny(); } - - let {ydoc} = this.impl.buildYDoc("current"); - let file = ydoc.getMap(this.impl.gadgetRootName(this.id)).get("client.js"); - return file ? { jsCode: file.toString() } : null; + return this.impl.getGadgetUiBundle(this.id); } async connectToGadget(chatId?: number): Promise> { @@ -9521,16 +9565,14 @@ class UseGadgetClientInterface extends RpcTarget implements GadgetClient { return this.impl.getGadgetFacet(this.id, undefined); } - async exportPdf(chatId?: number): Promise> { + async getExportFormats(chatId?: number): Promise { if (chatId !== undefined) this.#deny(); - // Read as possibly-undefined: self-hosted deployments may omit the binding (see env.d.ts). - let browser: BrowserRun | undefined = this.impl.env.BROWSER; - if (!browser) throw new Error("Gadget export is not configured for this deployment."); - let bundle = await this.getUiBundle(); - if (!bundle) throw new Error("This Gadget does not have a UI to export."); - let gadget = await this.impl.getGadgetFacet(this.id); - let title = this.impl.getGadgetRecord(this.id).title; - return renderGadgetPdf(browser, bundle.jsCode, title, gadget); + return this.impl.getGadgetExportFormats(this.id); + } + + async export(id: string, chatId?: number): Promise> { + if (chatId !== undefined) this.#deny(); + return this.impl.exportGadget(this.id, id); } // --- Denied methods (build-only) --- diff --git a/packages/workshop-backend/tsconfig.browser.json b/packages/workshop-backend/tsconfig.browser.json new file mode 100644 index 000000000..0504f918c --- /dev/null +++ b/packages/workshop-backend/tsconfig.browser.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "target": "ES2022", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "module": "ESNext", + "moduleResolution": "bundler", + "types": [], + "noEmit": true + }, + "include": ["browser"] +} diff --git a/packages/workshop-frontend/src/GadgetEditor.tsx b/packages/workshop-frontend/src/GadgetEditor.tsx index 4eec39a21..f3619af3d 100644 --- a/packages/workshop-frontend/src/GadgetEditor.tsx +++ b/packages/workshop-frontend/src/GadgetEditor.tsx @@ -1601,7 +1601,6 @@ export default function GadgetEditor() { gadget={selectedGadgetStub} gadgetTitle={selectedGadgetSummary?.title ?? 'Gadget'} chatId={previewChatId} - disabled={activeTab !== 'app' || previewMode} /> )} diff --git a/packages/workshop-frontend/src/GadgetExportMenu.test.tsx b/packages/workshop-frontend/src/GadgetExportMenu.test.tsx new file mode 100644 index 000000000..b33663121 --- /dev/null +++ b/packages/workshop-frontend/src/GadgetExportMenu.test.tsx @@ -0,0 +1,233 @@ +// @vitest-environment jsdom +/* eslint-disable react/react-in-jsx-scope */ + +import { act, type ComponentProps, type ReactElement, type ReactNode } from 'react' +import { createRoot, type Root } from 'react-dom/client' +import { afterAll, afterEach, beforeEach, describe, expect, it, vi } from 'vitest' +import type { RpcStub } from 'capnweb' +import type { GadgetClient } from '@gadgets/workshop-shared/api' +import type { GadgetExportFormat } from '@gadgets/workshop-shared/api' + +const testGlobal = globalThis as typeof globalThis & { IS_REACT_ACT_ENVIRONMENT?: boolean } +const previousActEnvironment = testGlobal.IS_REACT_ACT_ENVIRONMENT +testGlobal.IS_REACT_ACT_ENVIRONMENT = true +afterAll(() => { + if (previousActEnvironment === undefined) delete testGlobal.IS_REACT_ACT_ENVIRONMENT + else testGlobal.IS_REACT_ACT_ENVIRONMENT = previousActEnvironment +}) + +const mocks = vi.hoisted(() => ({ + saveStreamToFile: vi.fn<( + createStream: () => Promise>, + filename: string, + fileType: {description: string; contentType: string; extension: string}, + ) => Promise>(), + toast: vi.fn<(toast: unknown) => void>(), +})) + +vi.mock('@cloudflare/kumo', () => { + const DropdownMenu = Object.assign( + ({ children, onOpenChange }: { + children: ReactNode + onOpenChange?: (open: boolean) => void + }) => ( +

+ + + {children} +
+ ), + { + Trigger: ({ render }: { render: ReactElement }) => render, + Content: ({ children }: { children: ReactNode }) =>
{children}
, + Item: ({ children, onClick }: { children: ReactNode; onClick?: () => void }) => ( + + ), + }, + ) + return { + DropdownMenu, + Tooltip: ({ children }: { children: ReactNode }) => <>{children}, + useKumoToastManager: () => ({ add: mocks.toast }), + } +}) + +vi.mock('@phosphor-icons/react', () => ({ + DownloadSimple: () => download, +})) + +vi.mock('./components/WorkshopControls', () => ({ + WorkshopIconButton: ({ children, ...props }: ComponentProps<'button'>) => ( + + ), +})) + +vi.mock('./fileTransfers', () => ({ + makeExportFilename: (title: string, extension: string) => `${title}${extension}`, + saveStreamToFile: mocks.saveStreamToFile, +})) + +import GadgetExportMenu from './GadgetExportMenu' + +let container: HTMLDivElement +let root: Root + +beforeEach(() => { + mocks.saveStreamToFile.mockReset() + mocks.toast.mockReset() + container = document.createElement('div') + document.body.appendChild(container) + root = createRoot(container) +}) + +afterEach(async () => { + await act(async () => root.unmount()) + container.remove() +}) + +function gadget(overrides: Partial): RpcStub { + return overrides as RpcStub +} + +function button(label: string): HTMLButtonElement | undefined { + return Array.from(container.querySelectorAll('button')) + .find(candidate => candidate.textContent === label) +} + +describe('GadgetExportMenu', () => { + it('loads formats on open and exports the selected one with its metadata', async () => { + const exportFormat = vi.fn<( + id: string, + chatId?: number, + ) => Promise>>( + async () => new ReadableStream(), + ) + const formats: GadgetExportFormat[] = [{ + id: 'csv', + label: 'CSV', + mode: 'server', + contentType: 'text/csv', + fileExtension: '.csv', + }] + const client = gadget({ + getExportFormats: vi.fn<(chatId?: number) => Promise>( + async () => formats, + ), + export: exportFormat, + }) + mocks.saveStreamToFile.mockImplementation(async (createStream) => { + await createStream() + }) + + await act(async () => { + root.render() + }) + expect(client.getExportFormats).not.toHaveBeenCalled() + + await act(async () => { button('open export menu')?.click() }) + await act(async () => { button('CSV')?.click() }) + + expect(client.getExportFormats).toHaveBeenCalledWith(7) + expect(exportFormat).toHaveBeenCalledWith('csv', 7) + expect(mocks.saveStreamToFile).toHaveBeenCalledWith( + expect.any(Function), + 'Report.csv', + { description: 'CSV', contentType: 'text/csv', extension: '.csv' }, + ) + }) + + it('shows an empty state without hiding or disabling the export button', async () => { + const client = gadget({ + getExportFormats: vi.fn<(chatId?: number) => Promise>( + async () => [], + ), + }) + + await act(async () => { + root.render() + }) + const trigger = container.querySelector('[aria-label="Export Gadget"]') + expect(trigger).not.toBeNull() + expect(trigger?.disabled).toBe(false) + + await act(async () => { button('open export menu')?.click() }) + + expect(container.textContent).toContain('This Gadget does not support exports.') + expect(container.querySelector('[aria-label="Export Gadget"]')).not.toBeNull() + }) + + it('does not render the control without a selected Gadget', async () => { + await act(async () => { + root.render() + }) + + expect(container.querySelector('[aria-label="Export Gadget"]')).toBeNull() + }) + + it('loads fresh formats on every open and ignores a response after close', async () => { + let resolveFirst!: (formats: GadgetExportFormat[]) => void + const first = new Promise(resolve => { resolveFirst = resolve }) + const second: GadgetExportFormat[] = [{ + id: 'csv:second', label: 'Second sheet', mode: 'server', + contentType: 'text/csv', fileExtension: '.csv', + }] + const getExportFormats = vi.fn<(chatId?: number) => Promise>() + .mockReturnValueOnce(first) + .mockResolvedValueOnce(second) + const client = gadget({ getExportFormats }) + + await act(async () => { + root.render() + }) + await act(async () => { button('open export menu')?.click() }) + + expect(container.querySelector('[role="status"][aria-label="Loading export formats"]')).not.toBeNull() + await act(async () => { button('close export menu')?.click() }) + expect(container.querySelector('[role="status"][aria-label="Loading export formats"]')).toBeNull() + + await act(async () => { button('open export menu')?.click() }) + expect(container.textContent).toContain('Second sheet') + + await act(async () => { + resolveFirst([{ + id: 'csv:first', label: 'First sheet', mode: 'server', + contentType: 'text/csv', fileExtension: '.csv', + }]) + await first + }) + + expect(container.textContent).not.toContain('First sheet') + expect(container.textContent).toContain('Second sheet') + expect(getExportFormats).toHaveBeenCalledTimes(2) + }) + + it('shows an inline error and retries format discovery', async () => { + const format: GadgetExportFormat = { + id: 'html', label: 'HTML', mode: 'browser', + contentType: 'text/html', fileExtension: '.html', + } + const getExportFormats = vi.fn<(chatId?: number) => Promise>() + .mockRejectedValueOnce(new Error('temporary failure')) + .mockResolvedValueOnce([format]) + const client = gadget({ getExportFormats }) + const consoleError = vi.spyOn(console, 'error').mockImplementation(() => {}) + + try { + await act(async () => { + root.render() + }) + await act(async () => { button('open export menu')?.click() }) + + expect(container.textContent).toContain('Export formats could not be loaded.') + expect(button('Try again')).toBeDefined() + + await act(async () => { button('Try again')?.click() }) + + expect(button('HTML')).toBeDefined() + expect(getExportFormats).toHaveBeenCalledTimes(2) + expect(mocks.toast).not.toHaveBeenCalled() + } finally { + consoleError.mockRestore() + } + }) +}) diff --git a/packages/workshop-frontend/src/GadgetExportMenu.tsx b/packages/workshop-frontend/src/GadgetExportMenu.tsx index 0b16dcd7e..a1d97e73a 100644 --- a/packages/workshop-frontend/src/GadgetExportMenu.tsx +++ b/packages/workshop-frontend/src/GadgetExportMenu.tsx @@ -1,8 +1,9 @@ -import { useState } from 'react' -import { Tooltip, useKumoToastManager } from '@cloudflare/kumo' +import { useEffect, useRef, useState } from 'react' +import { DropdownMenu, Tooltip, useKumoToastManager } from '@cloudflare/kumo' import { DownloadSimple } from '@phosphor-icons/react' import type { RpcStub } from 'capnweb' import type { GadgetClient } from '@gadgets/workshop-shared/api' +import type { GadgetExportFormat } from '@gadgets/workshop-shared/api' import { WorkshopIconButton } from './components/WorkshopControls' import { makeExportFilename, saveStreamToFile } from './fileTransfers' @@ -10,46 +11,130 @@ type Props = { gadget: RpcStub | null gadgetTitle: string chatId?: number - disabled?: boolean } -export default function GadgetExportMenu({ gadget, gadgetTitle, chatId, disabled }: Props) { - const [exporting, setExporting] = useState(false) +export default function GadgetExportMenu({ gadget, gadgetTitle, chatId }: Props) { + const [formats, setFormats] = useState(null) + const [loading, setLoading] = useState(false) + const [loadFailed, setLoadFailed] = useState(false) + const [exportingId, setExportingId] = useState(null) + const formatRequest = useRef(0) const toasts = useKumoToastManager() - const download = async () => { - if (!gadget || exporting) return + useEffect(() => { + ++formatRequest.current + setFormats(null) + setLoading(false) + setLoadFailed(false) + }, [gadget, chatId]) - setExporting(true) + const loadFormats = () => { + if (!gadget) return + const request = ++formatRequest.current + setFormats(null) + setLoading(true) + setLoadFailed(false) + void gadget.getExportFormats(chatId).then(result => { + if (formatRequest.current !== request) return + setFormats(result) + setLoading(false) + }, error => { + if (formatRequest.current !== request) return + console.error('Failed to list Gadget export formats:', error) + setLoading(false) + setLoadFailed(true) + }) + } + + const handleOpenChange = (open: boolean) => { + if (open) { + loadFormats() + } else { + ++formatRequest.current + setFormats(null) + setLoading(false) + setLoadFailed(false) + } + } + + const download = async (format: GadgetExportFormat) => { + if (!gadget || exportingId !== null) return + + setExportingId(format.id) try { await saveStreamToFile( - () => gadget.exportPdf(chatId), - makeExportFilename(gadgetTitle, '.pdf'), + () => gadget.export(format.id, chatId), + makeExportFilename(gadgetTitle, format.fileExtension), { - description: 'PDF document', - contentType: 'application/pdf', - extension: '.pdf', + description: format.label, + contentType: format.contentType, + extension: format.fileExtension, }, ) } catch (error) { - console.error('Failed to export Gadget as PDF:', error) - toasts.add({ title: 'Failed to export PDF', variant: 'error' }) + console.error(`Failed to export Gadget as ${format.label}:`, error) + toasts.add({ title: `Failed to export ${format.label}`, variant: 'error' }) } finally { - setExporting(false) + setExportingId(null) } } + if (!gadget) return null + + const exportingFormat = formats?.find(format => format.id === exportingId) + const tooltip = exportingFormat ? `Exporting to ${exportingFormat.label}` : 'Export Gadget' + return ( - + - { void download() }} - > - - - {exporting && ( + + + + + )} + /> + + {loading ? ( +
+ {['w-20', 'w-14'].map(width => ( +
+ + +
+ ))} +
+ ) : loadFailed ? ( +
+

Export formats could not be loaded.

+ +
+ ) : formats?.length === 0 ? ( +

+ This Gadget does not support exports. +

+ ) : formats?.map(format => ( + } + onClick={() => { void download(format) }} + className="!h-auto rounded-md !px-2.5 !py-1.5 text-[12px] leading-4 tracking-[-0.2px] text-kumo-default transition-colors data-highlighted:bg-kumo-tint" + > + {format.label} + + ))} +
+
+ {exportingId !== null && ( diff --git a/packages/workshop-frontend/src/GadgetUseView.tsx b/packages/workshop-frontend/src/GadgetUseView.tsx index aafd7745e..8d3015eea 100644 --- a/packages/workshop-frontend/src/GadgetUseView.tsx +++ b/packages/workshop-frontend/src/GadgetUseView.tsx @@ -23,7 +23,7 @@ import GadgetExportMenu from './GadgetExportMenu' // Gadget/Code/Connections controls, workspace activity, and every editor-only control. The // overseer and gadget passed in here are the restricted capabilities returned by openGadget() for // "use" sessions; calling anything outside getMetadata()/subscribeToMetadata()/subscribeToPresence()/ -// subscribeToWorkpieces()/getGadget() (and, on the gadget, getUiBundle()/connectToGadget()/exportPdf()) +// subscribeToWorkpieces()/getGadget() (and, on the gadget, UI connection and export methods) // would throw. // // When the workspace has more than one gadget, a simple picker in the top bar switches between diff --git a/packages/workshop-frontend/src/fileTransfers.test.ts b/packages/workshop-frontend/src/fileTransfers.test.ts index 6b883fae8..c9964b3f1 100644 --- a/packages/workshop-frontend/src/fileTransfers.test.ts +++ b/packages/workshop-frontend/src/fileTransfers.test.ts @@ -87,4 +87,31 @@ describe('export file transfers', () => { expect(source).not.toHaveBeenCalled() }) + it('preserves the advertised content type in the Blob fallback', async () => { + const createObjectURL = vi.fn<(blob: Blob) => string>(() => 'blob:test') + const oldCreateObjectURL = URL.createObjectURL + const oldRevokeObjectURL = URL.revokeObjectURL + const click = vi.spyOn(HTMLAnchorElement.prototype, 'click').mockImplementation(() => {}) + URL.createObjectURL = createObjectURL + URL.revokeObjectURL = vi.fn<(url: string) => void>() + try { + await saveStreamToFile( + async () => new ReadableStream({ + start(controller) { + controller.enqueue(new TextEncoder().encode('a,b')) + controller.close() + }, + }), + 'report.csv', + { description: 'CSV', contentType: 'text/csv', extension: '.csv' }, + ) + + expect(createObjectURL.mock.calls[0]?.[0].type).toBe('text/csv') + } finally { + URL.createObjectURL = oldCreateObjectURL + URL.revokeObjectURL = oldRevokeObjectURL + click.mockRestore() + } + }) + }) diff --git a/packages/workshop-frontend/src/fileTransfers.ts b/packages/workshop-frontend/src/fileTransfers.ts index 7a24349a3..3556a0982 100644 --- a/packages/workshop-frontend/src/fileTransfers.ts +++ b/packages/workshop-frontend/src/fileTransfers.ts @@ -89,7 +89,9 @@ export async function saveStreamToFile( } const stream = await createStream() - triggerBlobDownload(await new Response(stream).blob(), filename) + triggerBlobDownload(await new Response(stream, { + headers: { 'Content-Type': fileType.contentType }, + }).blob(), filename) } export function saveTextToFile(filename: string, content: string): void { diff --git a/packages/workshop-shared/src/api.ts b/packages/workshop-shared/src/api.ts index 67eb4b019..d858dd2d5 100644 --- a/packages/workshop-shared/src/api.ts +++ b/packages/workshop-shared/src/api.ts @@ -3314,6 +3314,24 @@ export interface WorkpieceClient extends RpcTarget { remove(): Promise; } +/** Describes a file export format supported by a Gadget. */ +export type GadgetExportFormat = { + /** Unique, non-empty identifier for this format. */ + id: string; + + /** User-facing label for the format. */ + label: string; + + /** Whether the Workshop captures a browser or invokes a server-side handler. */ + mode: "browser" | "server"; + + /** Media type of the exported file. */ + contentType: string; + + /** File extension, including the leading dot. */ + fileExtension: string; +}; + /** * Capability representing one gadget workpiece within a workspace. Obtained from * Overseer.createGadget() or Overseer.getGadget(). Workspace-level concerns (code sync, chats, @@ -3339,10 +3357,16 @@ export interface GadgetClient extends WorkpieceClient { connectToGadget(chatId?: number): Promise>; /** - * Renders the Gadget's UI as a PDF. If `chatId` is specified, the PDF includes changes currently - * proposed in that chat. + * Lists the Gadget's supported file export formats. If `chatId` is specified, + * the formats are read from the code currently proposed in that chat. + */ + getExportFormats(chatId?: number): Promise; + + /** + * Exports the format with the given ID. If `chatId` is specified, the export + * uses changes currently proposed in that chat. */ - exportPdf(chatId?: number): Promise>; + export(id: string, chatId?: number): Promise>; // --- Binding management --- // @@ -3441,7 +3465,7 @@ export interface GatekeeperClient> extend * - "build": full access -- edit code, use and participate in chats, manage bindings, etc. (the * same access the owner has, modulo the owner-only exceptions documented in sharing.md). * - "use": may only render, interact with, and export the gadget's deployed UI (getUiBundle(), - * connectToGadget(), and exportPdf()), plus read basic metadata. + * connectToGadget(), getExportFormats(), and export()), plus read basic metadata. * * Roles are ordered build > use. A collaborator's effective role is the maximum role reachable * from the owner through their valid permission edges, where each edge grants diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0228129f2..794f196a3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -803,10 +803,16 @@ importers: yjs: specifier: ^13.6.31 version: 13.6.31 + zod: + specifier: ^4.4.3 + version: 4.4.3 devDependencies: '@cloudflare/vitest-pool-workers': specifier: 'catalog:' version: 0.20.3(@cloudflare/workers-types@5.20260808.1)(@vitest/runner@4.1.10)(@vitest/snapshot@4.1.10)(vitest@4.1.10) + dompurify: + specifier: ^3.4.13 + version: 3.4.13 esbuild: specifier: ^0.28.1 version: 0.28.1 @@ -3297,6 +3303,9 @@ packages: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} + dompurify@3.4.13: + resolution: {integrity: sha512-2vmYIoqjze2d+kakP8S/nS5shfsl587kzwEjcGlTdiksUVgFHnFCsLYDVj/JNqJVOQZGSYBTmuycv0PodwmnMQ==} + dompurify@3.4.8: resolution: {integrity: sha512-yb1cEmaOum7wFvOCSQxyfgVlv5D47Rc30iZWoMpbDIWTnJ6grDDQyu2KFJzB2k7u0pMuJcQ1zphH//fFnw2tjQ==} @@ -7111,6 +7120,10 @@ snapshots: dependencies: domelementtype: 2.3.0 + dompurify@3.4.13: + optionalDependencies: + '@types/trusted-types': 2.0.7 + dompurify@3.4.8: optionalDependencies: '@types/trusted-types': 2.0.7 From c3e975bf2b9ceb5d6f23409bf1aa0b80897fd079 Mon Sep 17 00:00:00 2001 From: Max Peterson Date: Thu, 13 Aug 2026 15:42:16 -0700 Subject: [PATCH 2/8] address local GPT review findings --- .../__tests__/browser-export.test.ts | 3 +- .../__tests__/gadget-export.test.ts | 32 ------------------- packages/workshop-backend/src/agent.ts | 2 +- .../workshop-backend/src/browser-export.ts | 2 +- .../workshop-backend/src/gadget-export.ts | 2 +- packages/workshop-backend/src/overseer.ts | 9 +++--- 6 files changed, 9 insertions(+), 41 deletions(-) diff --git a/packages/workshop-backend/__tests__/browser-export.test.ts b/packages/workshop-backend/__tests__/browser-export.test.ts index 371c9faae..bc3e712b1 100644 --- a/packages/workshop-backend/__tests__/browser-export.test.ts +++ b/packages/workshop-backend/__tests__/browser-export.test.ts @@ -290,8 +290,7 @@ describe("renderGadgetInBrowser", () => { expect(harness.exportDocument()).toContain( 'globalThis.gadgetExportFormatId%20%3D%20%22test-format%22', ); - expect(harness.exportDocumentCsp()).toContain("img-src data:"); - expect(harness.exportDocumentCsp()).not.toContain("blob:"); + expect(harness.exportDocumentCsp()).toContain("img-src data: blob:"); expect(harness.blobRequestAborted()).toBe(true); }); diff --git a/packages/workshop-backend/__tests__/gadget-export.test.ts b/packages/workshop-backend/__tests__/gadget-export.test.ts index 00d55da6a..44ab954ad 100644 --- a/packages/workshop-backend/__tests__/gadget-export.test.ts +++ b/packages/workshop-backend/__tests__/gadget-export.test.ts @@ -1,5 +1,4 @@ import { describe, expect, it, vi } from "vitest"; -import { RpcStub, RpcTarget } from "cloudflare:workers"; import { defaultExportFormats, exportServerFormat, @@ -16,24 +15,6 @@ function streamOf(chunks: string[]): ReadableStream { }); } -class TestGadgetTarget extends RpcTarget { - getLabel(): string { - return "Capability format"; - } -} - -class TestExportHandlerTarget extends RpcTarget { - async getExportFormats(gadget: RpcStub) { - return [{ - id: "capability", - label: await gadget.getLabel(), - mode: "server", - contentType: "text/plain", - fileExtension: ".txt", - }]; - } -} - describe("Gadget export formats", () => { it("provides fresh HTML and PDF defaults", () => { const first = defaultExportFormats(); @@ -117,19 +98,6 @@ describe("Gadget export formats", () => { await expect(readCustomExportFormats(broken, {})).rejects.toThrow("handler failed"); }); - it("passes a serializable Gadget capability to a native RPC handler", async () => { - using gadget = new RpcStub(new TestGadgetTarget()); - using handler = new RpcStub(new TestExportHandlerTarget()); - - await expect(readCustomExportFormats(handler, gadget)).resolves.toEqual([{ - id: "capability", - label: "Capability format", - mode: "server", - contentType: "text/plain", - fileExtension: ".txt", - }]); - }); - it("times out format discovery", async () => { vi.useFakeTimers(); try { diff --git a/packages/workshop-backend/src/agent.ts b/packages/workshop-backend/src/agent.ts index 03d272db1..eb3fb3a08 100644 --- a/packages/workshop-backend/src/agent.ts +++ b/packages/workshop-backend/src/agent.ts @@ -494,7 +494,7 @@ Every Gadget UI can be exported to HTML or PDF using platform-owned controls out During a browser-mode export, the client context is initialized with another special global variable named \`gadgetExportFormatId\`. This variable is only defined during export; during normal interactive rendering, referencing it directly throws a \`ReferenceError\`. Guard access with \`typeof gadgetExportFormatId !== "undefined"\` or read \`globalThis.gadgetExportFormatId\`. Use \`gadgetExportFormatId\` when the Gadget supports multiple HTML, PDF, PNG, or JPEG export variants. Do not declare or import \`gadgetExportFormatId\` in client.js. -To add, replace, or disable export formats, server.js may export a class named \`ExportHandler\`, which must extend \`WorkerEntrypoint\`. Its \`getExportFormats(gadget)\` method returns the complete list of formats, and its \`export(gadget, id)\` method returns a \`ReadableStream\` for formats whose mode is \`"server"\`. If \`getExportFormats(gadget)\` returns only browser-mode formats, do not implement \`export(gadget, id)\`. \`export\` is valid as a JavaScript class method name; write it directly as \`async export(gadget, id)\`, without quoting it or using a computed property. Browser mode supports \`text/html\`, \`application/pdf\`, \`image/png\`, and \`image/jpeg\`; server mode supports any media type. Each format must contain a unique non-empty \`id\`, a \`label\`, a \`mode\`, a \`contentType\`, and a \`fileExtension\` beginning with a dot. Returning an empty list disables export. The Workshop supplies default HTML and PDF formats only when server.js does not export \`ExportHandler\` at all. +To add, replace, or disable export formats, server.js may export a class named \`ExportHandler\`, which must extend \`WorkerEntrypoint\`. Its \`getExportFormats(gadget)\` method returns the complete list of formats, and its \`export(gadget, id)\` method returns a \`ReadableStream\` for formats whose mode is \`"server"\`. Read any needed Gadget state before \`export()\` returns; do not capture the borrowed \`gadget\` parameter in the returned stream. If \`getExportFormats(gadget)\` returns only browser-mode formats, do not implement \`export(gadget, id)\`. \`export\` is valid as a JavaScript class method name; write it directly as \`async export(gadget, id)\`, without quoting it or using a computed property. Browser mode supports \`text/html\`, \`application/pdf\`, \`image/png\`, and \`image/jpeg\`; server mode supports any media type. Each format must contain a unique non-empty \`id\`, a \`label\`, a \`mode\`, a \`contentType\`, and a \`fileExtension\` beginning with a dot. Returning an empty list disables export. The Workshop supplies default HTML and PDF formats only when server.js does not export \`ExportHandler\` at all. Both the client and server run inside a strictly isolated sandbox. They cannot make requests to the Internet, e.g. by calling \`fetch()\`. Instead, a Gadget communicates with the outside world strictly through its "bindings", that is, the Cloudflare Workers \`env\` API, which code in the Durable Object class can access as \`this.env\`. diff --git a/packages/workshop-backend/src/browser-export.ts b/packages/workshop-backend/src/browser-export.ts index f858a4581..43083dc59 100644 --- a/packages/workshop-backend/src/browser-export.ts +++ b/packages/workshop-backend/src/browser-export.ts @@ -35,7 +35,7 @@ const EXPORT_DOCUMENT_URL = "https://gadget-export.invalid/"; // running inside an iframe in the user's browser. We should close the gap in both places. For now, // extending the same gap to remotely-rendered gadgets is acceptable. const EXPORT_DOCUMENT_CSP = "default-src 'none'; frame-src 'none'; script-src data:; " + - "style-src data: 'unsafe-inline'; img-src data:; media-src data:; " + + "style-src data: 'unsafe-inline'; img-src data: blob:; media-src data:; " + "font-src data:; object-src 'none'; base-uri 'none'; form-action 'none'; " + "connect-src 'none'; sandbox allow-scripts;"; const STATIC_HTML_CSP = "default-src 'none'; frame-src 'none'; script-src 'none'; " + diff --git a/packages/workshop-backend/src/gadget-export.ts b/packages/workshop-backend/src/gadget-export.ts index d398d0d88..a327b5da6 100644 --- a/packages/workshop-backend/src/gadget-export.ts +++ b/packages/workshop-backend/src/gadget-export.ts @@ -15,7 +15,7 @@ export interface GadgetExportEntrypoint): Promise; - /** Produces the content for a server-mode export format. */ + /** Produces a server-mode export without retaining `gadget` after this call returns. */ export(gadget: GadgetExportCapability, id: string): Promise>; } diff --git a/packages/workshop-backend/src/overseer.ts b/packages/workshop-backend/src/overseer.ts index 3dd8b6453..420ada932 100644 --- a/packages/workshop-backend/src/overseer.ts +++ b/packages/workshop-backend/src/overseer.ts @@ -2566,9 +2566,9 @@ class OverseerImpl implements AgentHooks { if (format.mode === "server") { if (!handler) throw new Error("The Gadget export handler is unavailable."); using gadget = await this.getGadgetFacet(gadgetId, chatId); - // The facet is a native RpcStub at runtime, despite its Cap'n Web type for browser callers. + // Cap'n Web and native RPC stubs interoperate at runtime, but their types do not yet. return await exportServerFormat(() => - handler.export(gadget as NativeRpcStub, format.id)); + handler.export(gadget as unknown as NativeRpcStub, format.id)); } let browser = this.env.BROWSER; @@ -2594,8 +2594,9 @@ class OverseerImpl implements AgentHooks { let handler = this.loadGadgetWorker(gadgetId, chatId) .getEntrypoint(GADGET_EXPORT_ENTRYPOINT); using gadget = await this.getGadgetFacet(gadgetId, chatId); - // The facet is a native RpcStub at runtime, despite its Cap'n Web type for browser callers. - let formats = await readCustomExportFormats(handler, gadget as NativeRpcStub); + // Cap'n Web and native RPC stubs interoperate at runtime, but their types do not yet. + let formats = await readCustomExportFormats( + handler, gadget as unknown as NativeRpcStub); return formats === null ? {formats: defaultExportFormats(), handler: null} : {formats, handler}; From 275ea0fefaeaeaaaeb49b095a3a0c1abcf5336d6 Mon Sep 17 00:00:00 2001 From: Max Peterson Date: Thu, 13 Aug 2026 16:20:46 -0700 Subject: [PATCH 3/8] address more GPT findings - harden remote browser request handling - apply size limits to exported html and screenshots --- .../__tests__/browser-export.test.ts | 71 +++++++++++++++++-- .../browser/browser-export-page.ts | 16 ++++- .../workshop-backend/src/browser-export.ts | 43 +++++++---- 3 files changed, 109 insertions(+), 21 deletions(-) diff --git a/packages/workshop-backend/__tests__/browser-export.test.ts b/packages/workshop-backend/__tests__/browser-export.test.ts index bc3e712b1..0e84259b5 100644 --- a/packages/workshop-backend/__tests__/browser-export.test.ts +++ b/packages/workshop-backend/__tests__/browser-export.test.ts @@ -16,13 +16,15 @@ type Harness = { renderSettled: () => boolean; exportDocument: () => string; exportDocumentCsp: () => string | undefined; - blobRequestAborted: () => boolean; + blobRequestContinued: () => boolean; htmlSanitized: () => boolean; sanitizerInstalled: () => boolean; sanitizedInIsolatedRealm: () => boolean; mediaType: () => string | undefined; screenshotType: () => string | undefined; screenshotFullPage: () => boolean | undefined; + setDocumentPixelArea: (value: number) => void; + setSnapshot: (value: string) => void; }; function makeHarness(pdfChunks = ["%PDF-1.4"], closePdf = true) { @@ -34,13 +36,15 @@ function makeHarness(pdfChunks = ["%PDF-1.4"], closePdf = true) { let renderSettled = false; let exportDocument = ""; let exportDocumentCsp: string | undefined; - let blobRequestAborted = false; + let blobRequestContinued = false; let htmlSanitized = false; let sanitizerInstalled = false; let sanitizedInIsolatedRealm = false; let mediaType: string | undefined; let screenshotType: string | undefined; let screenshotFullPage: boolean | undefined; + let documentPixelArea = 1_000_000; + let snapshot = "\nSnapshot"; let navigated = false; let requestHandler: ((request: unknown) => void) | undefined; const evaluate = ( @@ -78,7 +82,14 @@ function makeHarness(pdfChunks = ["%PDF-1.4"], closePdf = true) { fn.toString().includes("ownerDocument") && !fn.toString().includes("DOMParser") && fn.toString().includes("charset"); - return Promise.resolve("\nSnapshot"); + if (new TextEncoder().encode(snapshot).byteLength > Number(args[1])) { + return Promise.reject(new Error(`Gadget exports may not exceed ${args[1]} bytes.`)); + } + return Promise.resolve(snapshot); + } + if (fn.toString().includes("scrollWidth")) { + if (!isolated) throw new Error("Document dimensions were measured in the main world."); + return Promise.resolve(documentPixelArea); } // The RPC transport polls this; the fake page never has a message to deliver. return new Promise(() => {}); @@ -110,7 +121,7 @@ function makeHarness(pdfChunks = ["%PDF-1.4"], closePdf = true) { url: () => "blob:https://gadget-export.invalid/test", isNavigationRequest: () => false, frame: () => mainFrame, - abort: async () => { blobRequestAborted = true; }, + continue: async () => { blobRequestContinued = true; }, }); }, mainFrame: () => mainFrame, @@ -160,13 +171,15 @@ function makeHarness(pdfChunks = ["%PDF-1.4"], closePdf = true) { renderSettled: () => renderSettled, exportDocument: () => exportDocument, exportDocumentCsp: () => exportDocumentCsp, - blobRequestAborted: () => blobRequestAborted, + blobRequestContinued: () => blobRequestContinued, htmlSanitized: () => htmlSanitized, sanitizerInstalled: () => sanitizerInstalled, sanitizedInIsolatedRealm: () => sanitizedInIsolatedRealm, mediaType: () => mediaType, screenshotType: () => screenshotType, screenshotFullPage: () => screenshotFullPage, + setDocumentPixelArea: value => { documentPixelArea = value; }, + setSnapshot: value => { snapshot = value; }, }; return { gadget, harness }; } @@ -291,7 +304,8 @@ describe("renderGadgetInBrowser", () => { 'globalThis.gadgetExportFormatId%20%3D%20%22test-format%22', ); expect(harness.exportDocumentCsp()).toContain("img-src data: blob:"); - expect(harness.blobRequestAborted()).toBe(true); + expect(harness.exportDocumentCsp()).toContain("media-src data: blob:"); + expect(harness.blobRequestContinued()).toBe(true); }); it("exports an inert snapshot with locally bundled DOMPurify", async () => { @@ -304,6 +318,28 @@ describe("renderGadgetInBrowser", () => { expect(harness.browserClosed()).toBe(true); }); + it("rejects oversized HTML before transferring it from the browser", async () => { + let { gadget, harness } = makeHarness(); + harness.setSnapshot("x".repeat(100 * 1024 * 1024 + 1)); + + let stream = renderGadgetInBrowser( + {} as BrowserRun, + "export default {}", + "Test Gadget", + gadget as never, + { + id: "html", + label: "HTML", + mode: "browser", + contentType: "text/html", + fileExtension: ".html", + }, + ); + + await expect(stream).rejects.toThrow("may not exceed 104857600 bytes"); + expect(harness.browserClosed()).toBe(true); + }); + it.each([ ["image/png", "png"], ["image/jpeg", "jpeg"], @@ -316,6 +352,29 @@ describe("renderGadgetInBrowser", () => { expect(harness.browserClosed()).toBe(true); }); + it("rejects oversized screenshots before capture", async () => { + let { gadget, harness } = makeHarness(); + harness.setDocumentPixelArea(25_000_001); + + let stream = renderGadgetInBrowser( + {} as BrowserRun, + "export default {}", + "Test Gadget", + gadget as never, + { + id: "png", + label: "PNG", + mode: "browser", + contentType: "image/png", + fileExtension: ".png", + }, + ); + + await expect(stream).rejects.toThrow("may not exceed 25000000 pixels"); + expect(harness.screenshotType()).toBeUndefined(); + expect(harness.browserClosed()).toBe(true); + }); + it("releases the browser when the consumer cancels the stream", async () => { let { stream, harness } = render(["first", "second"]); diff --git a/packages/workshop-backend/browser/browser-export-page.ts b/packages/workshop-backend/browser/browser-export-page.ts index 8ff2e8565..3698c0729 100644 --- a/packages/workshop-backend/browser/browser-export-page.ts +++ b/packages/workshop-backend/browser/browser-export-page.ts @@ -66,8 +66,8 @@ export function setDocumentTitle(title: string): void { document.title = title; } -/** Creates an inert, self-contained HTML snapshot of the rendered Gadget. */ -export function createStaticHtmlSnapshot(csp: string): string { +/** Creates an inert, self-contained HTML snapshot unless it exceeds the byte limit. */ +export function createStaticHtmlSnapshot(csp: string, maxBytes: number): string { const sanitized = globalThis.__workshopExportSanitizeHtml( `\n${document.documentElement.outerHTML}`, ); @@ -78,5 +78,15 @@ export function createStaticHtmlSnapshot(csp: string): string { const charset = ownerDocument.createElement("meta"); charset.setAttribute("charset", "utf-8"); ownerDocument.head!.prepend(charset, policy); - return `\n${sanitized.outerHTML}`; + const html = `\n${sanitized.outerHTML}`; + if (new TextEncoder().encode(html).byteLength > maxBytes) { + throw new Error(`Gadget exports may not exceed ${maxBytes} bytes.`); + } + return html; +} + +/** Returns the full document's rendered pixel area. */ +export function getDocumentPixelArea(): number { + const root = document.documentElement; + return root.scrollWidth * root.scrollHeight; } diff --git a/packages/workshop-backend/src/browser-export.ts b/packages/workshop-backend/src/browser-export.ts index 43083dc59..09d1c401b 100644 --- a/packages/workshop-backend/src/browser-export.ts +++ b/packages/workshop-backend/src/browser-export.ts @@ -6,13 +6,14 @@ import BROWSER_EXPORT_RUNTIME from "./generated/browser-export-runtime.txt"; import HTML_SANITIZER_RUNTIME from "./generated/html-sanitizer-runtime.txt"; import { createStaticHtmlSnapshot, + getDocumentPixelArea, receiveFromBrowser, sendToBrowser, setDocumentTitle, waitForClientModule, waitForDomSettled, } from "./generated/browser-export-page.js"; -import { createExportDeadline, limitExportStream } from "./export-limits"; +import { createExportDeadline, limitExportStream, MAX_EXPORT_BYTES } from "./export-limits"; type BrowserExportLogFields = { event?: string; @@ -29,13 +30,15 @@ const BROWSER_CLOSE_TIMEOUT_MS = 10_000; const MAX_PENDING_RPC_SENDS = 1024; /** Maximum total string length across all pending Worker-to-browser RPC messages. */ const MAX_PENDING_RPC_SEND_CHARS = 32 * 1024 * 1024; +/** Largest full-page screenshot capture, before image compression. */ +const MAX_SCREENSHOT_PIXELS = 25_000_000; /** CSP ignores `sandbox` in a meta tag, so serve the document through interception with a header. */ const EXPORT_DOCUMENT_URL = "https://gadget-export.invalid/"; // TODO: CSP and request interception do not cover WebRTC/STUN. The same gap exists for Gadgets // running inside an iframe in the user's browser. We should close the gap in both places. For now, // extending the same gap to remotely-rendered gadgets is acceptable. const EXPORT_DOCUMENT_CSP = "default-src 'none'; frame-src 'none'; script-src data:; " + - "style-src data: 'unsafe-inline'; img-src data: blob:; media-src data:; " + + "style-src data: 'unsafe-inline'; img-src data: blob:; media-src data: blob:; " + "font-src data:; object-src 'none'; base-uri 'none'; form-action 'none'; " + "connect-src 'none'; sandbox allow-scripts;"; const STATIC_HTML_CSP = "default-src 'none'; frame-src 'none'; script-src 'none'; " + @@ -206,15 +209,18 @@ export async function renderGadgetInBrowser( await page.setRequestInterception(true); page.on("request", (request) => { let url = request.url(); - if (url === EXPORT_DOCUMENT_URL && request.isNavigationRequest() && - request.frame() === page.mainFrame()) { - void request.respond({ - status: 200, - contentType: "text/html", - headers: {"Content-Security-Policy": EXPORT_DOCUMENT_CSP}, - body: makeExportHtml(clientCode, format.id), - }); - } else if (url === "about:blank" || url.startsWith("data:")) { + if (request.isNavigationRequest()) { + if (url === EXPORT_DOCUMENT_URL && request.frame() === page.mainFrame()) { + void request.respond({ + status: 200, + contentType: "text/html", + headers: {"Content-Security-Policy": EXPORT_DOCUMENT_CSP}, + body: makeExportHtml(clientCode, format.id), + }); + } else { + void request.abort(); + } + } else if (url.startsWith("data:") || url.startsWith("blob:")) { void request.continue(); } else { void request.abort(); @@ -239,12 +245,18 @@ export async function renderGadgetInBrowser( }); case "text/html": { await isolatedRealm.evaluate(HTML_SANITIZER_RUNTIME); - const html = await isolatedRealm.evaluate(createStaticHtmlSnapshot, STATIC_HTML_CSP); + const html = await isolatedRealm.evaluate( + createStaticHtmlSnapshot, + STATIC_HTML_CSP, + MAX_EXPORT_BYTES, + ); return streamBytes(new TextEncoder().encode(html)); } case "image/png": + await rejectOversizedScreenshot(isolatedRealm); return streamBytes(await page.screenshot({type: "png", fullPage: true})); case "image/jpeg": + await rejectOversizedScreenshot(isolatedRealm); return streamBytes(await page.screenshot({type: "jpeg", fullPage: true})); default: throw new Error(`Unsupported browser export content type: ${format.contentType}`); @@ -264,6 +276,13 @@ export async function renderGadgetInBrowser( } } +async function rejectOversizedScreenshot(isolatedRealm: Pick): Promise { + const pixelArea = await isolatedRealm.evaluate(getDocumentPixelArea); + if (!Number.isSafeInteger(pixelArea) || pixelArea > MAX_SCREENSHOT_PIXELS) { + throw new Error(`Gadget screenshots may not exceed ${MAX_SCREENSHOT_PIXELS} pixels.`); + } +} + function streamBytes(bytes: Uint8Array): ReadableStream { return new ReadableStream({ start(controller) { From 82f58b99639f666bc1ede651a7a725a87cd44b30 Mon Sep 17 00:00:00 2001 From: Max Peterson Date: Thu, 13 Aug 2026 16:38:33 -0700 Subject: [PATCH 4/8] fix screenshot toctou --- .../__tests__/browser-export.test.ts | 41 +++++++++++++------ .../browser/browser-export-page.ts | 12 ++++-- .../workshop-backend/src/browser-export.ts | 37 ++++++++++------- 3 files changed, 61 insertions(+), 29 deletions(-) diff --git a/packages/workshop-backend/__tests__/browser-export.test.ts b/packages/workshop-backend/__tests__/browser-export.test.ts index 0e84259b5..f9b75efad 100644 --- a/packages/workshop-backend/__tests__/browser-export.test.ts +++ b/packages/workshop-backend/__tests__/browser-export.test.ts @@ -22,8 +22,9 @@ type Harness = { sanitizedInIsolatedRealm: () => boolean; mediaType: () => string | undefined; screenshotType: () => string | undefined; - screenshotFullPage: () => boolean | undefined; - setDocumentPixelArea: (value: number) => void; + screenshotClip: () => {x: number; y: number; width: number; height: number} | undefined; + screenshotCaptureBeyondViewport: () => boolean | undefined; + setDocumentDimensions: (width: number, height: number) => void; setSnapshot: (value: string) => void; }; @@ -42,8 +43,9 @@ function makeHarness(pdfChunks = ["%PDF-1.4"], closePdf = true) { let sanitizedInIsolatedRealm = false; let mediaType: string | undefined; let screenshotType: string | undefined; - let screenshotFullPage: boolean | undefined; - let documentPixelArea = 1_000_000; + let screenshotClip: {x: number; y: number; width: number; height: number} | undefined; + let screenshotCaptureBeyondViewport: boolean | undefined; + let documentDimensions = {width: 1000, height: 1000}; let snapshot = "\nSnapshot"; let navigated = false; let requestHandler: ((request: unknown) => void) | undefined; @@ -89,7 +91,15 @@ function makeHarness(pdfChunks = ["%PDF-1.4"], closePdf = true) { } if (fn.toString().includes("scrollWidth")) { if (!isolated) throw new Error("Document dimensions were measured in the main world."); - return Promise.resolve(documentPixelArea); + const maxPixels = Number(args[0]); + const {width, height} = documentDimensions; + if (!Number.isSafeInteger(width) || !Number.isSafeInteger(height) || + width <= 0 || height <= 0 || width > Math.floor(maxPixels / height)) { + return Promise.reject(new Error( + `Gadget screenshots may not exceed ${maxPixels} pixels.`, + )); + } + return Promise.resolve({x: 0, y: 0, width, height}); } // The RPC transport polls this; the fake page never has a message to deliver. return new Promise(() => {}); @@ -143,9 +153,14 @@ function makeHarness(pdfChunks = ["%PDF-1.4"], closePdf = true) { }, }); }, - screenshot: async ({type, fullPage}: {type: string, fullPage?: boolean}) => { + screenshot: async ({type, clip, captureBeyondViewport}: { + type: string; + clip?: {x: number; y: number; width: number; height: number}; + captureBeyondViewport?: boolean; + }) => { screenshotType = type; - screenshotFullPage = fullPage; + screenshotClip = clip; + screenshotCaptureBeyondViewport = captureBeyondViewport; return new TextEncoder().encode(type); }, }; @@ -177,8 +192,9 @@ function makeHarness(pdfChunks = ["%PDF-1.4"], closePdf = true) { sanitizedInIsolatedRealm: () => sanitizedInIsolatedRealm, mediaType: () => mediaType, screenshotType: () => screenshotType, - screenshotFullPage: () => screenshotFullPage, - setDocumentPixelArea: value => { documentPixelArea = value; }, + screenshotClip: () => screenshotClip, + screenshotCaptureBeyondViewport: () => screenshotCaptureBeyondViewport, + setDocumentDimensions: (width, height) => { documentDimensions = {width, height}; }, setSnapshot: value => { snapshot = value; }, }; return { gadget, harness }; @@ -343,18 +359,19 @@ describe("renderGadgetInBrowser", () => { it.each([ ["image/png", "png"], ["image/jpeg", "jpeg"], - ])("captures full-page %s screenshots", async (contentType, screenshotType) => { + ])("captures bounded full-page %s screenshots", async (contentType, screenshotType) => { let { stream, harness } = render(undefined, true, contentType); expect(await collect(await stream)).toBe(screenshotType); expect(harness.screenshotType()).toBe(screenshotType); - expect(harness.screenshotFullPage()).toBe(true); + expect(harness.screenshotClip()).toEqual({x: 0, y: 0, width: 1000, height: 1000}); + expect(harness.screenshotCaptureBeyondViewport()).toBe(true); expect(harness.browserClosed()).toBe(true); }); it("rejects oversized screenshots before capture", async () => { let { gadget, harness } = makeHarness(); - harness.setDocumentPixelArea(25_000_001); + harness.setDocumentDimensions(5001, 5000); let stream = renderGadgetInBrowser( {} as BrowserRun, diff --git a/packages/workshop-backend/browser/browser-export-page.ts b/packages/workshop-backend/browser/browser-export-page.ts index 3698c0729..34194307c 100644 --- a/packages/workshop-backend/browser/browser-export-page.ts +++ b/packages/workshop-backend/browser/browser-export-page.ts @@ -85,8 +85,14 @@ export function createStaticHtmlSnapshot(csp: string, maxBytes: number): string return html; } -/** Returns the full document's rendered pixel area. */ -export function getDocumentPixelArea(): number { +/** Returns fixed full-document dimensions after validating their pixel area. */ +export function getValidatedScreenshotClip(maxPixels: number) { const root = document.documentElement; - return root.scrollWidth * root.scrollHeight; + const width = root.scrollWidth; + const height = root.scrollHeight; + if (!Number.isSafeInteger(width) || !Number.isSafeInteger(height) || + width <= 0 || height <= 0 || width > Math.floor(maxPixels / height)) { + throw new Error(`Gadget screenshots may not exceed ${maxPixels} pixels.`); + } + return {x: 0, y: 0, width, height}; } diff --git a/packages/workshop-backend/src/browser-export.ts b/packages/workshop-backend/src/browser-export.ts index 09d1c401b..5f94e4399 100644 --- a/packages/workshop-backend/src/browser-export.ts +++ b/packages/workshop-backend/src/browser-export.ts @@ -6,7 +6,7 @@ import BROWSER_EXPORT_RUNTIME from "./generated/browser-export-runtime.txt"; import HTML_SANITIZER_RUNTIME from "./generated/html-sanitizer-runtime.txt"; import { createStaticHtmlSnapshot, - getDocumentPixelArea, + getValidatedScreenshotClip, receiveFromBrowser, sendToBrowser, setDocumentTitle, @@ -252,12 +252,28 @@ export async function renderGadgetInBrowser( ); return streamBytes(new TextEncoder().encode(html)); } - case "image/png": - await rejectOversizedScreenshot(isolatedRealm); - return streamBytes(await page.screenshot({type: "png", fullPage: true})); - case "image/jpeg": - await rejectOversizedScreenshot(isolatedRealm); - return streamBytes(await page.screenshot({type: "jpeg", fullPage: true})); + case "image/png": { + const clip = await isolatedRealm.evaluate( + getValidatedScreenshotClip, + MAX_SCREENSHOT_PIXELS, + ); + return streamBytes(await page.screenshot({ + type: "png", + clip, + captureBeyondViewport: true, + })); + } + case "image/jpeg": { + const clip = await isolatedRealm.evaluate( + getValidatedScreenshotClip, + MAX_SCREENSHOT_PIXELS, + ); + return streamBytes(await page.screenshot({ + type: "jpeg", + clip, + captureBeyondViewport: true, + })); + } default: throw new Error(`Unsupported browser export content type: ${format.contentType}`); } @@ -276,13 +292,6 @@ export async function renderGadgetInBrowser( } } -async function rejectOversizedScreenshot(isolatedRealm: Pick): Promise { - const pixelArea = await isolatedRealm.evaluate(getDocumentPixelArea); - if (!Number.isSafeInteger(pixelArea) || pixelArea > MAX_SCREENSHOT_PIXELS) { - throw new Error(`Gadget screenshots may not exceed ${MAX_SCREENSHOT_PIXELS} pixels.`); - } -} - function streamBytes(bytes: Uint8Array): ReadableStream { return new ReadableStream({ start(controller) { From 2e61171a5d9e0f11bc40a698cf36ef9172fcf9ff Mon Sep 17 00:00:00 2001 From: Max Peterson Date: Thu, 13 Aug 2026 16:47:28 -0700 Subject: [PATCH 5/8] align export extension validation with file picker --- packages/workshop-backend/__tests__/gadget-export.test.ts | 8 ++++++++ packages/workshop-backend/src/gadget-export.ts | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/workshop-backend/__tests__/gadget-export.test.ts b/packages/workshop-backend/__tests__/gadget-export.test.ts index 44ab954ad..a6af832c4 100644 --- a/packages/workshop-backend/__tests__/gadget-export.test.ts +++ b/packages/workshop-backend/__tests__/gadget-export.test.ts @@ -76,6 +76,14 @@ describe("Gadget export formats", () => { ...format, fileExtension: "/report.csv", }])).toThrow("invalid file extension"); + expect(() => validateExportFormats([{ + ...format, + fileExtension: ".1234567890123456", + }])).toThrow("between 1 and 16 characters"); + expect(() => validateExportFormats([{ + ...format, + fileExtension: ".csv.", + }])).toThrow("invalid file extension"); expect(() => validateExportFormats([{ ...format, contentType: "not a media type", diff --git a/packages/workshop-backend/src/gadget-export.ts b/packages/workshop-backend/src/gadget-export.ts index a327b5da6..c2c4b75f9 100644 --- a/packages/workshop-backend/src/gadget-export.ts +++ b/packages/workshop-backend/src/gadget-export.ts @@ -23,7 +23,7 @@ const MAX_EXPORT_FORMATS = 32; const MAX_EXPORT_ID_LENGTH = 128; const MAX_EXPORT_LABEL_LENGTH = 128; const MAX_CONTENT_TYPE_LENGTH = 255; -const MAX_FILE_EXTENSION_LENGTH = 32; +const MAX_FILE_EXTENSION_LENGTH = 16; const BROWSER_CONTENT_TYPES = new Set([ "text/html", @@ -47,7 +47,7 @@ const EXPORT_FORMAT_SCHEMA: z.ZodType = z.object({ .regex(/^[-!#$%&'*+.^_`|~0-9A-Za-z]+\/[-!#$%&'*+.^_`|~0-9A-Za-z]+$/, "Gadget export format has an invalid content type."), fileExtension: boundedString("fileExtension", MAX_FILE_EXTENSION_LENGTH) - .regex(/^\.[A-Za-z0-9][A-Za-z0-9._-]*$/, + .regex(/^\.[A-Za-z0-9](?:[A-Za-z0-9._-]*[A-Za-z0-9])?$/, "Gadget export format has an invalid file extension."), }).superRefine((format, context) => { if (format.mode === "browser" && !BROWSER_CONTENT_TYPES.has(format.contentType)) { From 220d8da2f0ea6fb8c6aea80fe2f1e39f7ad9c596 Mon Sep 17 00:00:00 2001 From: Max Peterson Date: Thu, 13 Aug 2026 21:23:56 -0700 Subject: [PATCH 6/8] only emulate print media for PDF exports --- packages/workshop-backend/__tests__/browser-export.test.ts | 2 ++ packages/workshop-backend/src/agent.ts | 2 +- packages/workshop-backend/src/browser-export.ts | 4 +++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/workshop-backend/__tests__/browser-export.test.ts b/packages/workshop-backend/__tests__/browser-export.test.ts index f9b75efad..4e9f18862 100644 --- a/packages/workshop-backend/__tests__/browser-export.test.ts +++ b/packages/workshop-backend/__tests__/browser-export.test.ts @@ -331,6 +331,7 @@ describe("renderGadgetInBrowser", () => { expect(harness.htmlSanitized()).toBe(true); expect(harness.sanitizerInstalled()).toBe(true); expect(harness.sanitizedInIsolatedRealm()).toBe(true); + expect(harness.mediaType()).toBe("screen"); expect(harness.browserClosed()).toBe(true); }); @@ -366,6 +367,7 @@ describe("renderGadgetInBrowser", () => { expect(harness.screenshotType()).toBe(screenshotType); expect(harness.screenshotClip()).toEqual({x: 0, y: 0, width: 1000, height: 1000}); expect(harness.screenshotCaptureBeyondViewport()).toBe(true); + expect(harness.mediaType()).toBe("screen"); expect(harness.browserClosed()).toBe(true); }); diff --git a/packages/workshop-backend/src/agent.ts b/packages/workshop-backend/src/agent.ts index eb3fb3a08..0ee85ba72 100644 --- a/packages/workshop-backend/src/agent.ts +++ b/packages/workshop-backend/src/agent.ts @@ -490,7 +490,7 @@ Note that there is no index.html. Instead, client.js must build the entire UI us Make Gadget UIs responsive and usable on both desktop and phones by default. -Every Gadget UI can be exported to HTML or PDF using platform-owned controls outside the Gadget. Never add print or export UI to a Gadget and never call \`window.print()\`. Browser-mode exports render using print media. When asked to support or improve browser export, use standard print CSS such as \`@media print\`, \`@page\`, and CSS fragmentation properties so the output remains readable. +Every Gadget UI can be exported to HTML or PDF using platform-owned controls outside the Gadget. Never add print or export UI to a Gadget and never call \`window.print()\`. Browser-mode PDF exports render using print media; HTML, PNG, and JPEG exports render using screen media. When asked to support or improve PDF export, use standard print CSS such as \`@media print\`, \`@page\`, and CSS fragmentation properties so the output remains readable. During a browser-mode export, the client context is initialized with another special global variable named \`gadgetExportFormatId\`. This variable is only defined during export; during normal interactive rendering, referencing it directly throws a \`ReferenceError\`. Guard access with \`typeof gadgetExportFormatId !== "undefined"\` or read \`globalThis.gadgetExportFormatId\`. Use \`gadgetExportFormatId\` when the Gadget supports multiple HTML, PDF, PNG, or JPEG export variants. Do not declare or import \`gadgetExportFormatId\` in client.js. diff --git a/packages/workshop-backend/src/browser-export.ts b/packages/workshop-backend/src/browser-export.ts index 5f94e4399..49a8a596c 100644 --- a/packages/workshop-backend/src/browser-export.ts +++ b/packages/workshop-backend/src/browser-export.ts @@ -205,7 +205,9 @@ export async function renderGadgetInBrowser( try { let source = await deadline.race((async () => { let page = await browser.newPage(); - await page.emulateMediaType("print"); + await page.emulateMediaType( + format.contentType === "application/pdf" ? "print" : "screen", + ); await page.setRequestInterception(true); page.on("request", (request) => { let url = request.url(); From 839462d43033c55d038f8cecd7688935241755cf Mon Sep 17 00:00:00 2001 From: Max Peterson Date: Mon, 17 Aug 2026 11:55:16 -0700 Subject: [PATCH 7/8] address review comments - split out file export system prompt into its own section - use top-level await for signaling client export readiness - update built-in blueprints to use top-level awat - update overseer methods to create facet stub exactly once per method --- .../__tests__/browser-export.test.ts | 14 +--- .../browser/browser-export-page.ts | 22 ------- .../format-blueprints/workspace-docs.gadget | Bin 27375 -> 26970 bytes .../format-blueprints/workspace-docs.json | 2 +- .../format-blueprints/workspace-sheets.gadget | Bin 40309 -> 40319 bytes .../format-blueprints/workspace-sheets.json | 2 +- .../format-blueprints/workspace-slides.gadget | Bin 50769 -> 50664 bytes .../format-blueprints/workspace-slides.json | 2 +- packages/workshop-backend/src/agent.ts | 61 ++++++++++++++++-- .../workshop-backend/src/browser-export.ts | 4 -- packages/workshop-backend/src/overseer.ts | 54 +++++++++------- 11 files changed, 90 insertions(+), 71 deletions(-) diff --git a/packages/workshop-backend/__tests__/browser-export.test.ts b/packages/workshop-backend/__tests__/browser-export.test.ts index 4e9f18862..ea660b534 100644 --- a/packages/workshop-backend/__tests__/browser-export.test.ts +++ b/packages/workshop-backend/__tests__/browser-export.test.ts @@ -13,7 +13,6 @@ type Harness = { clientInitialized: () => boolean; gadgetDisposed: () => boolean; pdfRequested: () => boolean; - renderSettled: () => boolean; exportDocument: () => string; exportDocumentCsp: () => string | undefined; blobRequestContinued: () => boolean; @@ -34,7 +33,6 @@ function makeHarness(pdfChunks = ["%PDF-1.4"], closePdf = true) { let documentTitle: string | undefined; let gadgetDisposed = false; let pdfRequested = false; - let renderSettled = false; let exportDocument = ""; let exportDocumentCsp: string | undefined; let blobRequestContinued = false; @@ -64,14 +62,9 @@ function makeHarness(pdfChunks = ["%PDF-1.4"], closePdf = true) { clientInitialized = true; return Promise.resolve(); } - if (fn.toString().includes("MutationObserver")) { - if (!isolated) throw new Error("DOM settling ran in the main world."); - expect(clientInitialized).toBe(true); - renderSettled = true; - return Promise.resolve(); - } if (fn.toString().includes("document.title")) { if (!isolated) throw new Error("Document title was assigned in the main world."); + expect(clientInitialized).toBe(true); documentTitle = typeof args[0] === "string" ? args[0] : undefined; return Promise.resolve(); } @@ -143,7 +136,6 @@ function makeHarness(pdfChunks = ["%PDF-1.4"], closePdf = true) { evaluate(false, fn, ...args), createPDFStream: async () => { expect(clientInitialized).toBe(true); - expect(renderSettled).toBe(true); expect(documentTitle).toBe("Test Gadget"); pdfRequested = true; return new ReadableStream({ @@ -183,7 +175,6 @@ function makeHarness(pdfChunks = ["%PDF-1.4"], closePdf = true) { clientInitialized: () => clientInitialized, gadgetDisposed: () => gadgetDisposed, pdfRequested: () => pdfRequested, - renderSettled: () => renderSettled, exportDocument: () => exportDocument, exportDocumentCsp: () => exportDocumentCsp, blobRequestContinued: () => blobRequestContinued, @@ -307,12 +298,11 @@ describe("limitStream", () => { }); describe("renderGadgetInBrowser", () => { - it("settles the client render, streams a PDF, and releases the browser", async () => { + it("waits for the client module, streams a PDF, and releases the browser", async () => { let { stream, harness } = render(); expect(await collect(await stream)).toBe("%PDF-1.4"); expect(harness.clientInitialized()).toBe(true); - expect(harness.renderSettled()).toBe(true); expect(harness.pdfRequested()).toBe(true); expect(harness.mediaType()).toBe("print"); expect(harness.browserClosed()).toBe(true); diff --git a/packages/workshop-backend/browser/browser-export-page.ts b/packages/workshop-backend/browser/browser-export-page.ts index 34194307c..1b57d44c3 100644 --- a/packages/workshop-backend/browser/browser-export-page.ts +++ b/packages/workshop-backend/browser/browser-export-page.ts @@ -39,28 +39,6 @@ export async function waitForClientModule(): Promise { // Functions that run in the isolated realm: -/** Waits until the rendered DOM has remained unchanged for the requested interval. */ -export function waitForDomSettled(quietMs: number): Promise { - return new Promise(resolve => { - let timer: ReturnType; - const observer = new MutationObserver(() => { - clearTimeout(timer); - timer = setTimeout(finish, quietMs); - }); - function finish() { - observer.disconnect(); - resolve(); - } - observer.observe(document.documentElement, { - subtree: true, - childList: true, - attributes: true, - characterData: true, - }); - timer = setTimeout(finish, quietMs); - }); -} - /** Assigns the title used by PDF viewers and the static HTML snapshot. */ export function setDocumentTitle(title: string): void { document.title = title; diff --git a/packages/workshop-backend/format-blueprints/workspace-docs.gadget b/packages/workshop-backend/format-blueprints/workspace-docs.gadget index 8ff99f571c663bb2fe49e90f1b8947fdf3dbcad1..1e202760a1776c2c0142af9885bfcab893eb98ae 100644 GIT binary patch delta 26846 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 d!@|)&D?gsjZ+-pw*>#hT{^ZdzA9{hh7|K?x) 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%0DT8Jc6Jgk`k>6H_j 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 Tqo4iTk3RZ8WLspw7E%HLA+pZh diff --git a/packages/workshop-backend/format-blueprints/workspace-sheets.json b/packages/workshop-backend/format-blueprints/workspace-sheets.json index f70fe2560..c2a25129a 100644 --- a/packages/workshop-backend/format-blueprints/workspace-sheets.json +++ b/packages/workshop-backend/format-blueprints/workspace-sheets.json @@ -9,5 +9,5 @@ "icon": "table" }, "author": { "type": "user", "name": "Cloudflare", "id": "agent@cloudflare.com" }, - "revision": 6 + "revision": 8 } diff --git a/packages/workshop-backend/format-blueprints/workspace-slides.gadget b/packages/workshop-backend/format-blueprints/workspace-slides.gadget index f9ecd336a73790dbf68b6b0162873dc4d3981271..37083e2f385b943fecd20775c5a3abdfc2ad7766 100644 GIT binary patch delta 46177 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 V`0cNM^}qbHe-BkEnAyhh0suV@j8p&s delta 46294 zcmV(|K+(VGiv!V&1CSR1m9ZGH0e_4m*OnmmdN3Fd*xq~|Ys6Lv^l=Ni1a`7_ak_=Taf*ldeOsc8|&z?pv4BN1K251-<4-5m|7>2h7W-&0_ zv+&MqZ-v<#@YY@!=bU>ZZUo6pW~n5-2Xr-BFBzX3_jCT=U;XMo_`m+$|9|#>|3{U7 z{@?t6|LotRKmWmRfAydJyMOR+{?*_ApP&5qfA8P?KmX`o{low1pZ(ci{@K6&&;Q{c z{@%a+FF*R1|L;HgU;gsX{`G(H5C8rD>i_)n?8krj$*=zYuk`=_r@#8k!vFu<|Ko>0 z{~v$&^F+oMGPb`<{P`k^Q-62^$IDoZ1Nmb7opjSWd>zHFWqcB*@oEwIVG8eH5=V2e z+#p(dlR(7s;F6w6th<#;b8oK#dvHFJ@K|_LnL?6Au}nZf;)l~fg5^o~wFO?}F6S~# zVHtWdhIE$Qc`a856`)}N-ar!go=gtl+cW&*CA?Gj=qDV)8-CFD4u2p?V?UhM`NCMZ zucvXe47~$*18x*V@u%4%;D?D!KRtkP6a{tgqV#d>d!HUaxSWq=4Da+HLFB&1k3Yaa zUeZ-P0lIX}1k%+)<{#AmnoW@Q)CMc{(?D8vuv`&)_`f2Kqf3k5z0xzO!z%x?*@QG& zGy*wE!4JV{w^~>IL4S|82;3-&y@cPt{4{@SmjBH+7jd*m4&aS#+wTe!!x=Y{g>?Oi z??N?|S7{y6D3o=OscYBF)gJ``Br~y)%~;Y22GP`aA@DC`f|GLtUxumuU2>Psmf;M1 z1O#t6A7|%}V-bkJrJv3qmLf>~xrA{X3C|TtYQwW-DpEfR6MqmfE>pybJOB}{z@3S3 zDj}AQM25U}{Mh9z3M3#j)!}mHyEAw#3tt4m3MZPZLKj5n!CbtS34&vU z<5VZhbQ#MUNRh1U3hXs26*mf#6wc0HoE|+sdG-0pH*lzc_O813?C5u|zI=ZC0uG_q zx?8EpE5a%_5PwOc5kg+2IN2hiArt|P5ii{|imOQ~Qr!3OqDJ=slI21cuHU80>C8`T zx(bIt|7%`fjuSWb$1+af5JGtgXELp-H=9lPGW4QmEWHTdbYCZQez+@hIgjEML}9Rk zAO7$!a9dZO#1hh2gbD5nTc3>Alx`g5|9@%UVq_QLg}W`Q@ak;D3mY_qOk~I z=HrpCU=k7L>v8gPtJ&}(gyR8HefzfGa|L=AbldJCNZtoxy!*)$=D$ zW%gvYjI}45Lz`oy@?1C1&53ni&$R3VR@E|XrY0TA9I&+ zjKFdT;!^mj0o*p8znDsUD$}Zgg6eggn0mQZUVq_Ynar}A{P@<<7t6xvb(;A4OCM$A zscJl+7N5pTS=vOL%=#v-9l{Np7|N?uZ=$ihpKue6qxvzMh!ekd6O9KpZK8=?u@v6> zpw$NKI+pJ1>{J4of_M8pYc}CnPGp$)7xDmikhmSc0+%8IIbWnJcyS7|DDV;xAw+>E z<9|lt&g5Jee2@pL;`<0wezZ*BLdJ<7g%C|>Mg^J5gNZK#526bh$0#GQD5VDqmvb5W zE{anL#3G%MlqEtCFk+c%1R{>bs#b?fe<6tnCQ^EK1`EIT;O$%Z^$|X0`w9JT)wB8S z8s78lbSCHWD>cnuA0C2*(qOU>uCyJimVXf{+*&{MQ(pwU?RV9U-J!@+@4PeN#M=lY zED=SEuH%VK;hK}`l&CQc&zbVJgEXp24i2q4@2439(HSe^@%jQ%&(G{R`=l6csH~h(c+@LlFcBYJbbc zBJgF-ujv4xN`j~xOMz?}!H9tO@zL?)lXDpRq34Iw8bp&+h7iqt`gq-B`~v2Ff^t3h z9*kotXf{%@{7(`{WFTFX-C!PhG9XccWTt>^lgCL4t zgT+Hh&jOJ$l8LzllofOFL58$1D1T`X#>hGHef=f_c4Dh-JA`WX_uIGd?aP`y7mMl` z4)4PlPvBD+1L_X8ZIA0D->VaWcZIX{aVP~KaCitIN*Qn8g1&SQTISFDpixMX{hGpr zPs=ypK)=MF%Wfx&z;|WUuS2U2$p*@rhznWuiWC*0YK<+;qYKGkNJBsIZhr&XdOmQN zPi^7{DT=AMiv-6=6ZF_Qq?cE!IA3;|*i8vfu3x9IEN_YXBhvR@S$?p_!a|SE!dTnk z#xup(C$Qi8FKgL!7OM?3fiCCJZ2l|* zbagWr*R}u_+yRGx3&-3MzJJstOJ}hLV5m{jKK?T2VUG80^3ohJ$111r+3(;Go{4m3 z&&5@>RabxeVHt??m2KJ9?{>jgQ}kYVWgxD@LZt5O{TNVT?{3_-Unj*q!)x?$J2$N$ zugZU+F$BTPyjI5x<=0rr&{KN@rN>d}gLiPqYvo5-O}0gn_|veO)PG4c++in8seo|f z!$<{W{K*f6My_jW{qvsA8ig6tIT(meo63uSXN)i=VPm|3u;A?yL#t(slWFr4}XVOxu4&xok$9SD~F#K=Y>R%KQ@?Fl>P2=Q}1CFESX^u1AhEQaY%Vp&;U(o2J zej1p>x8IrKutuf)(SMt^VjTXsViCGC+nn3F zJzR67TNrjUu5B|9ZbHWL?E;L?Wh&S;NB@2zD>;xQrhlqv`*N(!bS6?5M;Wisow*#_ zINyily7H>*rNa5v?y8N$S)}d^s%U50ie<@ioW1dmw&q=>GFgUfZqX_peq8Hk@oJGq zb}T|Knt%D_ljCX)S&=J|ln-ln3-6ayZ*v@F#5TlBy0F3DdH~i(kNU&5^T<*j*8?_c zqh5I-<9`=1?!f`sddcN#dR*03lmuCJs#-xbjjTGlNjrUVk@os^xIBP%e^Af-oA30P z+eXnYSRAH9!#Mi`8mB)T=vQ-pDWF620IYA%pPWBEd1=*Q5{2oR|Ghkb-mngr(x1-K z0~oYg`O9Ez1^u(?XlhPne6|p-A5IUzYP9TDM}N-ojvva;)G&_in8VEc=`7$omIXJi zEm@Au<*8l5WnLaYuh+R|d1qff*swxpkgu?R;|dGw=;hNz7dj%332O!3N#NCN!h@wB zctm+7(K2qZ?Ua0hk_oyE57B7{0v*xOGIk|IB;6)Rodc1QDIDGHo}VU&*kP11eUmiq zIDc5mMT|DpWg8$92xWE@lyxnp1LGL|0Ar26Fflk+D>PhTCM zJp7!f6;0DLXqDgi{N$Tg=SQEP9DRNC&DpE7r%#SgYP-Gp_~iW6+4<4w`N^^Qo)#^n z`B8><)R(CRV+upuo;mK@6Vt;+EMI=^X69>@Z<1OMY!=*JIww=D)5mpYG zY!ZGd#xf{?XQ!v3stl88kX9=&U|)Zs-52HYRfohCfjoeg-EXgbL^y+XPj)B9VO>o58@-mIkV7UR-8#(Zf65=6i}>|&aR8%x z$;A||=0TVoTC+4=95kDkmzVZs$ByD@v)yX7nm9UK`10~WbaiO8pas1y^t#sldocz@ zTpe1D1uOdRrSGM)L#x-eU`D&ge}BhUhgREyi5~=q1gOJDZ3|H|dM)un=Xm(AXEpEN zn{w>JB#P&U7X67dqU!X(>DBZAVH8U9ZDwBTLPJd<8^3`^>59dnMJQ9a{9WXS`uhEQ z3z5#iJG7oTZD_Y<`#7QeTHo$L$L@)?jkobXxDyU^p!0M9&VJD7f&)&Y`+rnF`aKTN zoZi2OJ9vLohl!6T>_%ZK{Lrcw5P1VIdE?HYC!Mx|GV&@d9CUlw=7Vl+MVW_z@4ki; z&rb_j(%v0QCSvXfD+DtUCRQCp;7>yYZ8=HTP^GiJjF#K&IbwXxGCG~sZp$DYM24;( zfbT{jk^$j)%2&pe49=>JTAqOY!BkueRFWVB&Uq8^}n%+y6T{@?q#mfRa_u?mcz(VShhp^z0tOz*DCU zPCsZkb`LK-?ZJM~vwID7tNnd}_Ox5z^a6Vb9lQOs-6dkvvD^0WX}bmOPSCK2`1`5T z$6Fn{-QZhJuQ*N@oNizbpluV$8U&5D-LVHxyU=b04SRq;pE`J>ZFd@U!|DE5D%Kr{ zq1Q86VvhbA&UPSUM}G-pznIGK7o%kRT}KSY{p*&p11T#k1xXlt_cJPn6wRH97|EB4 z&;zkp#1V!L_+cvJPz2zKRMb)U9g`5gik2}%m!U!YI0S*>=~mz_lQf$9-%F3>)?b?D zb%kg-9d9F8Wa=VAh2yk`+xGIyM1u4wZicoUmO{nwuN>u z3jIC8u;TO-ZA*$e-oNL`Npk-lu13U;5 zc>et4;rYoiJpAnF^!#j{Z1)EfIdR?YkJQ&t(JhcH{C^cO#D#3dY+$h9N>RLxcv;ry z*6}iXX?Kn8MorEgdc#)lC)MQIIzneK%xNG}fo^C0n?I5aIPD=0Ye5_Z z^3d|kz%Mm!Tk?^_#YsalUOD* zj0#2X1@Y`;m85cxR_R!}QS9kyZ4qHxFzD4RrhmwA%Q_%rMl)PIo<--Eb0n>LyGY$IVtOM+Vw@$Nr;^3@3( zADti7;q>I__!~HX0biV+oSi&BU)yM&-QYcD*KXZJ_}8?pOugDN4T6dfKM$h#MNx=7 zBKEdSp5AyXgdqckuPJ>Rv6>D5re}4Ere0cryi+^Ph z)Hw%|t$&II6G-48WV`SBu^UKmaSj6uTqMxW(1Q5T%7<x%PP}7B}G*2_Z=b)I~gRf`l*$e}NQ?0@&Y@g~)3w@889iqw_+eQ)4y)>5wt7ucW@qunf# zER=J2leVo<<_l3Q`}bivqQDpu3eg3(i76-yQjRa!9#vo{lKp+x>lxnF-9ro3x8jRf zCJCG%vqbla4M&EL#fzf_<&GOp7B3c4d>SK9>j;b?Jc3-!r(G*7aeKtVZGYkvRHOoA zl+6U}{Z7y858F2b_HMSAYav=Vtxmf;k+-tRY}$FYCO!D_$r*FAzN1%dHVya6A81d*e#>#dt96%JCLo zvsz5sVY4ItoE^YsZm}*KZ1Of6-*&rguh*Vjw~OsA`+Pc`&G@P9%71dcK#e&m?&fe4 zo%tzub3E+yhdozZw<1N1JMC*%bVe04NYWsBUWX79ztMhJhx9T+6j{zga&A$u9sgD# z42iv+!S*(}@d{qPZB8w?(XY30Q+mCD=d~x^rcLR#d$+-s_AiVrW4GO!$e!4OEqXOS z4Z2LczSHVB8_^~E@_%ml@-P$Deqn?WqT`KQZs*!H?S?TZlydbWEY6f*e75HcrR;MG zJb1pC#$v9r1uzmd@W-);SASIaGH@ro;b7xA51sC9@TK!h<4eCQyRBh=3%=;p{51G7 zaNCn{r$4!FA9uu;W1r*<)PDSM`U~Ssr`7Kd2fd9rldWqvoPRmtXt)Iy)gqq^B1yUo zrCIO+wL3JA`60=NQT)e*EZw2g5&hmq=At-mw>8`aSGvD2uE=huJ8ln#*Gpnu4X_^+ zRr;Nl6uq%?-7fa~yI{&wl0PWIGLC{@n!QZKxFg)w@Vcm?R%;hbIgZ7YGH?CwWnJf* zGE>2_WLa4kGJkToej;JIq)dQ6B3$Y9CzF9Q+!$k}neC3q()**ma{QBTd!?Ll=+;B^kp6kWS&u+ zWaS%4w^3CHDPfeYNnZ5Fgfjg>t2JrMjUk?z*Y1ci{eNE=WhUe9z-h_J4YJrzgEHg& zR>y4(u9d}hM42zxh>WqDmopj5Ul?JAlc8|--D_92Bf>n6xY%Xl#!`lL_-;90WFf0r zG;ruaC@%adh6s;WSSoHDiP-xiz#7x~t~^xDCY(xiKw^wj6qA=gr2g0s{B*@6fGX>O z8+j6oUVqFIPRhW_pP5SmJUNf-Jo(U*6R`};Qht1pE)TsOT}C;lwe>q&9erdR zSj7I^M|0bn2)6;nFxcO8MC32;xPYR2POYJkPR@PJ&&aU5ON@maQ%BLf*n7(R8a?VJJ*UZM^ayKV zqc1A*kS(8(HHP!){RAjsQ9$4)DMnJMI)6R4UTCMSNbzkKidpzKEVF&nGS4wY#mkp? zj$p>X$s&M?C1m)`?6rxcC8t=@<~^3&Z@uS|7t44N+_dP#e;nuo*pT=Nvg&>NQAy=lqcM9VnI*NmKrDl{PLF?f`iY7>f<>wh6) zvm=Kj+?pkI4z#r&s^jQNCU6I+TSHR2mNorpv7}?=(D>6}NDt^7NWQ0&s6!aRBY!#< z5X-+<`mtP7W3qn+*J>4oEgtK~aj0E|Ma(axIwa9mz7E6qm%PRx0+czqaki7YaAEMuSSF9dKSARV7{XR1(E$6n|DpJJRx&lV(P%hJ0Ae3ngJ)=<4 zZTqh9_G>~(UzOO{b+@zWcK2KL_nNL|HEOPpMJll`2wE+6n(q&P_-_+%XVQI*Rj6+_ z>EW>Zev{4x0X6MonWT8oWZ&Cup92wkyKXagp)mr8w$1O#Ie-qDo>utBet)kHS8aVb zZN9R3cG`ZRj)OA64!}aJl}Y+jOmpD0O4H=y*lC*C0qBY9F!x>c$taXx_(724+NzMk zz4_P;)Kc>7@6Jz7pC3Jaudiy9x$(0aMU*c1;^~uz-@MlsHN4;W#T>r*n@^r^TxXd_ z8+D{~TON#WJbQKWyDwgxo`1i3^y2i{(fJt`rK@E2wOKk3jD!5_{Ml2hPL=6#=}2G6 zf~iV+oaZLErh0SY2l52l_o!fKo38Vm)HfF1#Q4M)$B%CQf>?05az6^2{QBB=@G^ep zWx1!&3H|s?gkB)ythLZu)2=sW+Y5f@Q54Tbnv@&MY~03D={=r7^?w!HW3Z;U9weP1 z55q!&CvhCbRqM+Tn-4@WEEbZ*u%uEs zV#@<*G{2!rh2+wYX(EFOYC9@j@?TWcT(F@OHNi+o6Id;< z5Eye{Y*j!m?3q;l27e4IC7F`Sj(J{PiJtXJ!G}j>Vbu5qX`8E5`pHrRNRp>ZY!Omr z^`l-fZ7S(%5lv&Un5}Bmz+gjvC7Pv8#diq4u!tG9Z<@~1dPPwWz{W^p5hto%rIr;q zFgKQS;fGw^QO#-+xy!_^R6hC$9{B<8cmqaRi?|W(iE3M=N`DD+^NHwEjYHd=wRR)r zSyyRHDxjvG)tJQk6eay6;axJ@g-vBhjZCQN$zAZVRf;a)`8td);c}+RFBnGNNG3K; zK5Ij!CNHt@u~PZ!tP^A}#d7K=X}nTRK7bpWQQNdEdLfmuaJd;-)hqaMRn!9|?;r@& z>KXVbh{SA(nSTrd;F7|mbJz1w2&`yLfy;I6^2W62x;CWIDcAULSS?`;N-C8c&=dL= zb%zt+22zA|*xSRhogQ}LisA*j2Cq5RAX3lb~aSy*<>t=-NV@8Y~uL3aY4+kR~K9`GBNB&UrLVpCJtgVp(pE}IN6*3Sh$uX4hOwN>& zwRtkmz?e+mm<+G2(=jL0>)}uO%4MX!0mlRhsvsocI077K-40O-6BV#~OywLa03%Hb zl8C7ew>DITZ$3$M`C$SYjr~l^K1nL0Qc=|r3Paw~l?wRUHarlC?`rX&0DKSm+V$Xv zb$=^8w0Sb>X5$dmL7y2D;4lgs41T^R1;OVRSoo6PGMh1k5gQ~RS;iCLO1hHFgoj4b zFoH4hJwB-uw&WmWj!YxOs75Dux*V@yr2NyPIxH6p8M^`#V$S5;e-H&8o*o{QKEF{lxufX zhkx20u0xZW4@N7%z`&LLVYduSb-=RJ*er>t8HfZ+#`#gm6M4#LtGX#FY|c=Y`hJZN zwMPa^@R6b@c*zwOiehma@o+n#Yw_faMXPdRnsAb~Na>7FQ$U97rDLQX~j>A_ZsP z*!nIj4Y;WdPQd`j?(?UF=QXs+gX6*&9Z@I4tMW>?X=57uxXQh~whCsa)5nQ7`>p*^ z9Y&X!sWxJ^wzt>K9;*O9*ll*&!+&PK-EQtXeSV?cZ;fhnH~}6)UjJ2*ss~Y;Msszr zV-c(ELq9y1d;_PwxMD>3;jjK0&hf-z6dLf?GZ9Xs3cyrn##BcSUYwu5c=qbS(dnzR zuO5$>aIY|>XM~p2rAw@jZAkQK=}k2;d5DF-G9EQ!_V#ML_e{G*D3O>%_~1;SSce!eUZyEZMY!UefAH=qsLFs}q`I6UeteF_ zuKjR|18E*ke3`{F)y$AtDJZv25a4%5S$noJd#;V3S-M>$pfv^XU&JVA&*vibUFry1 z&HA8?xDnbY>x72;gAWzHTz_l~$3k&!q&P5)ioI==YVmHQN)=;C;d9M-ny4D95OX5$ z#YNGI$_p70&EpoTt_Y(LS7C@&s=+Fq5Q#skA}YS;B@l&JYKo4=u2dcnAk%9~ zVn%{PO?sCJCDxT`dJfSe70xrNR|v520wrLL>g$AezC;CJ8VekZqkl?9b!PRXQ7)(0 z($22Xk{grEm!pVeP6()YGj0xXj9>);`p!AckjnQf>9(SIb5^pT+iEp?tyZ(&YBdL~ zmZC%nw$O{c#0>Zc_5di7S4kt71R~YKGP6liE$|3cwagL3%K)#={m@5Q){Wv&#(=2q zt2msf!hAKc;jz+q$bSSyvk#T6n~IeBL13&N7meI7n&6>h@r6oJtrAMaN6)gk7`^XRl(;D$b;r%{e=aJ$y|UNDRv$Diz@>X zyeLiT6{37zlr~aKH(IPl5GcR?-#`4}zhf<+PTkS38VeDpm5CHogkvvjqrS$}j{D1Cw47erWDukE;2G=svUjG7^;k}V~MQF+g)OdF~gb|q8vbp8T( zl+F;)@rmTMW=NdUP9R4N69u;4$ z-JqT+s*=3_J=+&>A)~y2`-s~-GXu&d!;|#qXq6ZTnSU%((Z%G8-{cnLIE+Vvs3av( zwR`n51%NaLwtuWD<`n8#ar&F<(w70bsOaNLuybH$ZaJt_Mx)VpN#)HAWf{h<=d?RF zX0K0r6Ni#HcZoaOn!j$__QrJb>-~LYU)g6e2%=)VNhwT{I34gm)twzK9Z^yB8!%wXKkq1BzCTvUg75 zpW?zPLJdjb*u2+A$t+kw8dWBKs_b&|5|w2Jg@cZ`HvYW@j8Q-Wc7NM{Z!2%tT;i~PX~%yw+$a=tIV#NV z*iX>z3wQ^6sIkfFPHszsnG~LkYxer=Mhd~XxmRrjZ!xTN8HaT6n~z(UyT$T8ROZjq zc4C{yq#aB~#uT4qQ&Ekct0RPE)FjAmjjR%XgvXQWHC-`LxJU?-Rh;*^4 z2%>PxTxy|Uyop+4O)Zt|ok%IaZhkhRrG7n=s=Kt*g3XK^5~?1$>QLN)ejsFjDdRbOkjK{Dby?WEWr&>A z)hDqwfuI2+$$GF9ENT#i!3vjcME>H;$V{RH+Oo+c1A~%vw33@zc*E!r>zVChl)0Nm zwRHn((Maw^sGeu_Ie4hrU9A0vPk-SWvah9RDd&}H4++g2O)7p6RCvC5sFKiaN+*mq z$c9i)ks@a0ZKY!NVu>CQE%u9qWluQO9fqvD}z zC6=d1U}DhDQPw$4lRq0Ure!n6SPEsV+9>N^PQDUq@|JMl`ea58zsC{?ZGTh@axP;k z98qTVHm`v6Tihg^{uf72PtMOzUcERyJ~YB_=9WN$rr_~QA`eGL{&QIMYJF&pd z?0!n97)B5g@us8+v~*MK5d*RkjWbS$rtf7MHHb7})A$OhO8WRY_O8hev1Z=-9Xm9U zlLKGQEG;b3oUj^Esc_smS(~7W*&U^(95sT5qIJr2f5!4ciU8#qvVXN^mMUd*63R6S zCD*8i@x49OVM>bFo#7nFEG2O-5mdQ7H(ZEdN#q=_5t@CHu#`|ECC-g0{|;eyww#Yc z;Ro#IqhS!+umffadwW?}JsOo*qvh>Jrz{BF84FD@i53>gwqJqV%*rF&1y&?tiH+~V zCDVjtL$Qx`R_cQ>w|`qI^#RpHN}b=K+<6v=add&~pTx&Fx+Fg)Vibj(;l4F=z zXKUBGWE65U3yzBbPsaX*u2h^M^e4F2tUs~q1;HTm!!(In)UfLp0Y*eAO?mo(a>1kd z*7J#9k{2XE=OcE6MFUq>R4s4z8GpC*KDL}4SH$p+c~ zIoLMSVc-tWO!a8JK#v#EcOBs@pxa>Q0DlyjQZ>W7I*f_1P9k!{*CCPQJaJ#sPacAC zQw3CraDR*DLekPK3cRGKxTtB+t1GoSNX2xD%6dtGvQe2K?;^QYF!o06Baf0Q4{$6O zfp8f-5x#txg7sXzrC+gNMphhhW236C_Ffjv4g5HvaFywkCz2Uji(O6X_z~_5Nc4_e zKHjR3ccq*_jhIM|(!hw+;V#%fc;kl&`KI%bmVczIt=y%ElSCnP#)`$IpzmRCUEC%= zkZL+;AU3tMB$}YGhP4b5_SPa+5%4sDXV(N*^YSV2SOTTxLJQt3lV}D@57A5{yZ=V7KU8-=ji98uDW zHUW{pornfU@*w4_A*P=s?%p1534cmn`KgNGI#s=-wS_Bh?u$@|=6rUp!08tcHA5?f zcd=sK$fCF^WG<%EVp7l&-NG3i%5)rAr+-@Vl_4f8GqCyv7=cA5ZZrdrw)Das0c%4e z-N{$?@U80>y=az+SFJeor(YiXIBAAhuCdm0#MID-55F=v$bALI< zxuVWXbRvi_Co8NRzo6hH5mP;?1#(4n1nch3Bhub{iO}!_Mf<(IX%LM?u(wBUiCBI@ z*5Zl^Bh-7MIS%hS9yH-SLNU!8`CdY#nBBBEn^=awd%%J-L+zDVuc5$2t#Fg z(5NxW`%I5W_#_Dhr-K1rqMb!wMieOv@#iXop8_|3_^bb#cIJn_`hRQs-!n39 z;9p;esr+)0{dpW+h8!Q6RRduE0gm!nH0PI2LXRI}*{%tJ(6LVV+zH=gIV9K7@YbWk zEi;}G?{Wkded2*|l?eu_*$5o1bfqqB-{c3#}@;x@e zUE%^zXe$n>*ugJug7Vf`6-N*!e(s*o|=--Y`}> zAB*BBl-;caB?fTVl?s|_bR)ntjs5X5CBa&#*L25dVj`^X>wV*>%SkMyT{*gld=Ex6 zD?X1c5C4a&eaEf9h!xHLKk^=abVJri(x~c0cWu{9MZxgQTW0VG&-vtJm zq)If&ol&?QS%1I`LzrRTLt8-tRgSgL7M%=WqqBjU|hWys5nEhi7M; zq#}!MgEdI7NhfR2*GGALq(~$LQS=(BXaqvR8_nq`7%R8SLXf=2F{r32Dp8*l$|&S) zhMEmWm|w#|K%;x~73?)Sy2lH5h^AEqPI zM1UK1HWmV{9A0*uNMdONNw`&sj+k-42Hw-?lFb2GenK59tSCd)yV?k?hzYP!hYfvq zGE73Xp?{Ls8fFv5c%{8B#7W5ktH#qA(CjS8Lntd*uvaxd03_dd&KTrOzR!t3ct*To zU(X}Fif%84Y4sCi>e@95l_9-e^HB}7WcQ?i4J=nL0+N8q=u^?P>zTQ6WF2ptFx@T6 z6T4a{JbWIdoK$n31puS_ioUE|T;vW@k!%6sjDJWFHk9j!vMT(L`*LXKR}%^jvVtj1 zB~_4njWi3x$AQ1DZZ z%pOK;r{Z7)U!Fce0p-gDPJ=C*82!xg*O+5L7&TWDMk-O@OKvp^iqYB7N`4 zv!ll+ua2KQ8$s3Sx6sSkIf|G2J)yWC&=vb10i>F)H z#Dr8I6;;GwFvcaK&mQR$<|Wc1DnJN}NTBqj3mK0^>d%$rOcX{3Ef{#fu&X?ZjE4oc z7O8{s67Il~wya5-U&f#B(3ui>Q+Bnl9+zPy7MH4<0kIo~6TUFAGrvD(Ux+v%ru!jbMJ&}#k0Y$(|J zjWtqo*Jwk(gb|@-$wM-l_{zjyfK(S0`QB2ke66EP^ zwQGxV2(*rX#)B%wKp(KqiQ&&2KYv5o%@YqfL9zb?$I;Y*%>Qd$CM@bQVcYh7+qSur z0>y6CMu5C>X%Q~;6yycM*a4;#$&q%6D@u6blXVQK ztNR*ee%esnTFFU@iRs69vwyhLAObn90f`hg>rmbol(vZQ@`j?nhK@e7;%cLF!B9)w zR7W@~DO9AXaA&m2Cq`E1Nae<`mu@D5g^ZH}48xi)mZ>}o#o`>va+-{wIu*!t61Zxv zl#Tk1vOaTF_$=d<&DofCWfb`+?7On|n8xgEF!H3J=ohT;`y;d*dVg{uDI_~Hv`h5P ziYq@O2e@s>5mK5jQ8*^PXU~tmcy<2S>B-q=FPNeiDnhecq4F0i0Hir$sw@UN(fZG5xX)OIVq*p(te=o%Nf!H9HWcupl!G*9wP4XFrQjeP z!i~`*DgnN*#ebYCfkGRl93}Z@nciKB;B|uhIUr*Pz4IjWd{-tYWT2Bsx?}>RXs$@v znQXu^;Fu1fA{VGUK_0mvIg*nc@~E4zQ6uqjOPDunx~Z*++6*uk3vdn`vQVfvNEI~B zv%&*8{eNVa(i*`X+zGr)UWrkY{zizQ zKcfZ4ryk|DHq8A{s-@w8<5kc%^b*+6CfpQ@5l~expH?L)5O3}$nTQfAK5r2BTfdEN}gZD(aayCMlz2)j12KHW|{@POre-aQnK$-NE6Dxlu}Ir z`pC7%nSaujjm}eGvN0pyS(XhjBDdRIrnAUnpFBEm!iYurSO;@y^H?uhGvAC88h-O&`FqT1ddADf$;180{HRxcm-5>Fc*;n7?3h# zVGBm)3VcBHgS}>@(%jpIXT|z1yI>;@$n~Qhs(!Z^Y;~abJI{hbw#~_%2l~!rvX3S3 z^E+qJBt76eU99s@8O@l#l#SLNx5n7;0)-h&dOgVQ495L-ud7BIQ>iy~M-2B{Lw~M; z%BJq@juc+s?HYHUs${5-CT-dA_&bs6pqtIQH)%`b&asGJAK)E#*d3^zrkH|e%(^A^ zdlOzM*DlRQ+aGr(6J9A*_{`VS?h9;Zjdxa@h|=y|>h%~uh&=KRI;6RI#~RBN+Ro%o7B;^lZ{y}YZQ$NY;&CJC0Z73lUe@zgipFIoUZm zIy=#rb_mw>UR>+0eze&vyK;^3UOjpK>cyAm8^#+9>R2zaWjljjVZhRO>;bM+0-3T5 zV*JBktSr6sB^Kesr&PQH6+_^sT6{yRrupmC2AOXv(G5>y{ifz?Y=5Nj;1I%P5U6_? zC3lAErhd`k8#@R}RAxeYC+D9bpnp&-hll159#naxm6;;ZsgEi)2FH7<0@`#^4jOI5SbJ2o5-zEP zP^t^q>HZ@unWH|A>MRatQCyBreab3y6X=mr&v7=XvNCaes0BW`CffrI-thViN8bEG6}#5f&2xpq_04??U{IUzJhF&nq8PL?D78#0DN zW*PP9ySvxRWiOs-W9n`?5)#O)M~e)qDVEw}{RF>;F$jL(#WFdNAX!d z3}uX(`Sxe2g%CcAf9U#7Tc1WnbHn8Ea)PBk*QalDWq&Bl=crmyXw~4iza_OVn&2+t zp!y)Kno7r)w(z_YbRD2|4P$z6oWOTwwOzB*=xKB*<%bdHWWDM4vED+tnwD_gtDL;lZYZRf}=;`J&m(!uN_dIJUrC;{t8;4{;LJ z5=3Gw{(tkxlhrdCt?Jfl#Z{W`y4eaM{zV)Tc4P_lWr#-mM%_Z(a325_Yyme{dv{=W@@Xv z3Y+3(X;y`4%;eQkb%v#*ggJ#79O5lod1|ZHM}MeE@JIOx6!6JK{Ul7QGle&;I<#wb zaQeoB(@hVy>(DJfINtPNw+{XMLA9z;JROVb$8X|y^^f07@jqkyk9b!b6&5Ec+v~G* z9_S6$^@a7WXA5k8``df>txsMyrwF!icps_^O4e_!1F(K8=8LVtG zyK=*+3JIvGkhnn=AQ_-liCtYoK|8Ot4S!w-{AFo=S&9!1mPDWfD0H^Ak`l8SkSU3L zKuuk|uK-*?qrcVqjSgB?pVbCGOco!JWnBAO*6TY`r7H?*~)wKSt#d~GFwR8}jRmZRfq+EEA%CwZ5Oj$KI z3pIZnD8h-Uc-TQfrDg`)zk_a>S@#D}tr<818ykF-%jY~l`5Mkn9-cpW@!ZlyaNel| zJ>HqTau01m-g;11GC${^=9Uy{v1^a1Sx_UZJJf9IBAo|Xw@`6kY=hcT4fIa$HyG(j zQ2@GEW-BCc9T*p2y-RM)t=DmQ};)+W1&@S zzeMJ$_>60iVLKbU)su5o*#12Cky_bO3$K%zi83^>`hSFIV%*P)8ojI4wMch2FKP6y zj>XwA@~#9;PpL`EPC%r4829rYE_u08i?ZjfI;fJNPFAl!tD0fVHY|=9Fh|_1x4nc$q39fXjj0vhntH-EAte_@}t*|>i}126WD>S zh-yAi6*s1)Y(9BG-e3jPY@m?Zl81kDDs7c=V~xH_hM`PFz)pf_8T-i$oqaPE??^>_ z;<2BS`vimZHU2BrlPo_D8Yl|;En9=S5(r%Mf?@q-VExXl5GX6fKI@@E^PXxDrdekI~~Tx z9R(J-4xrj!2a1_m?1p=VA=rP5bSgZ5iICT8{l=;n$^#bs1;%a%^6CIaEoi~VZ?bQ^ zTU?Eb&l#aY95#gd)Hl_S-!vTKrCQ-Fqn@9!qwk910PfowKQv=t8LN%0 z&bGCe-HpxROC~qrpSv(B`b-@xBDFcEx|R_r%{dAuIl1(|m&%qw17&~T`V^ORG3CV) zg~1-!lLY&uWjhXVpdah)tH;`X_1HdI2h9)vNb*=9gd7cNsc+(v?5S9+0rD<1u4n=n zW$#j0vI^V&_zis`xtPAoqqhqe(Z~HDx;nHF@P~aE_AR)Y2Vrt}ogwAEvEX})C|FIS zkVATtL#x|?J`4uX?%{ub`wnzFFl@m-{<#nBo>jyr~;OrrKc)P=vqc1eF zAoT1ClE3dFKRmPutF2}}BM!wL)!v6Y==RLlQ+|`WYj56W3Qrq7Np2$Uy)tp%K*4*x z5(&=~0jJyQ?#dlDQTFTTkLuV~pgiYX0d+Ttyu%#@_XkuXwLgCxY}4<)J%4ik^yFos zKx%K8H)bD{yKohCA@(G1+__F^79IVhQ9Vo=how6JYj z*KmW@)!z2un=Kc)(R@c1W=N>aZS@7zPrB`!WL3qH_*K;oVt*YX>rO4+SpZ3D^VXSw9l+qdwLB>%0_@gjegjhj`FvN5Ng!Amv0N{KG! zTZ~Rj^nc-zHojx{Ca5AjeX&;3bjW0n5QH(0r*e97wWyi~Xe@DSO)X$qdo4 zq@?AA2pNCw4w>K_eEjC2&1STB*8Pv)7@Klgdv~viFWes)qvwL0VqS%>G=CqGdHdct zZr;x)^{&kEDN#Vsj-&@_cM%QSea-@8~rcz<(ifJH(1n+*4V zN4bA~lo-2%5q4K%wFA}ZmZ;8V+LYVoT24?$Y%d%r-6BErV=H5 zKsQK5yqy%)Zgq(g4tr~quxz|}L`B`QUOgCLn0&DARHX{`msD><> zRoR4_z56LR13)HLd3MFZ z8=J|{CN(l!G-`bX z&h@5nyv9wrv^m_u4r?V--PV&T_*8PuFpe(QY`v&H-opE2^$QLs^^^TWWG3&g&2lc{ zsUMz4WYgDRY7G`wAScykH`3-cuOAT;Nj%&7O&g)s>R8n6?`yR!t4o8{QO(i?y4GOfWZ*SX`iT|x>`*e2}Ev&9#O&#v({EKXnI zYS>xvwvv69C42J1&Cu_(LBfwHu_;fQZ(Wn*r4CK9PQE#LaQfnFe2Fa? zG)XY+7X?7{5I-MaA#Uzz7)gv{i>1Bh3|!-F`IXOh;&xGJ3i0PrxWQ?db0vRHO4u=;)dTe!)_OAq+xR?fbwD2)4=vt0av z+(83Pk)yaOsV+;f`xgItNzE4mbsh8i`0|hOf9e=a3Vdj8Kk9Z$ z5fr7^mYwB@ZJaNwU4p(BtX^`xpq@u(DB!*}B4dZh!!4X)E&6b$n8P9i_;EpoW#^{d z-cJ4NIj*mVUA)h(TXY@NLC{A5c)WVzySD zyJL8Yng4O}S)QUX&M{q3)Nv<1`*+;(mWt?y;)YK5!*j#Y$8UJ=7%)g?$9~uhCSbBl z>z!tpqxa&8#yi+1(4T*-RL-9fKy@86{0WF&|Hn}F?ZkVHnRRxi>^a9rg!zfsy`k4y z>sqh5K?HH@gn#Y%A`>VtzuUW(nU_faE&-IfVQASgg9HGp>%EU(rcCe6dKt43aV$urkl)pdNzhn67>lvwlU z=Pd~Izw9ImW@vwP6+ZnGoZ2-Q>0BSsYzEz6v*vQd4PLvYgsy$&Z4GQ2eCMxyvaZHV zQ76P0jF=jZF2+k66n?e;_=GZvI(3NEdfPuGx^>$GGL_=`ktaxhPb z3FfYK{&@pV@Gh7c0Q$l&f=uO!(ebR!juB<&4`ps^=VpIrIYU8#woniG?D|fhB*4Al zn|~a1gY+Ph1@a~)8`!gY9}lbK=u@$ z1$|t*_iI0j+})s%T}Se$r$CA1QPYSWNnT%(JSKR3MezEA-WtJ6VwX)06Q9&4v@2RU z*=nIvj$(h{KNQWvtW7RaW^_!T(y+zqY}`$t7YjT(bUa?`)OcxNu$9=jVlg}un~t{CMdCM5)x`xmg6&> z=kb3WG9)cLo&(0ZDhs;X#fj=PvFwVZcJx11y5kz&503Up-E!;VX52%)1L;{U4+OfGnmYOVTkDgT7+6Nl1DrPgY}%1To=mEl7oO@B zmTz(V*tKszI6Ce+R)Ll06I|ovgh+oT0vsAZM)BezZcI^t!di3tEl*DCpr#0|-{9Xg zC+P7H`Z^WXs##@RyV%~3S_n=y6 zL^+JAuEqNHu5Nc#pEA#GQ@^i|PrAX4c%9aym$0eB#?BE~JB5E?LzDYO&>n!0!knFX7>+V zvw)rQvhr3cYH;q@V?<_d?4+XlsH_zkefMoSmytob6a$xBOiwUQ4$FG0X1a!OqI{?9 zrqwkIaGgpWQdxgCqzv^3rVmz0BvuwxX}D4#2|LZ0sLTW(BcKqilpP zu}f;%SE~1*4&Typuv<7T25=3}TJ;t@ZPokmbidw#?=#mq!@;}S%WP|KqY7+}znR@9 z&?uIbmy@Klv(&;%?W@Xz%y$)8h;C)fe1w0k9A+l!UYj|Jy4N;=h<*HSv1p@Z)*7?Q zDZbioX$F4`We!8DWe-g-Rj|;Ip=TYyXc-69k3N3G7wu_5?D0LT_RcI8Xc-00T(PjI zo+jDK)}S=Eyfde$(Y}@BDm5HFAyD9@L~!U^*Bl6rvf(2{z}B+@=U2Iz=*odR+5Xp{ z3GH${oB1k#dX+!D;-{ej!}1%c1_b3}GR5+%1DJnbk)$zSseq=22;Er}ZqR_$K6qAfxzHHoSkB`E7upP4%m zzm|UstkiB622XU)Qt7GIo7giH2g$nED!Fs@35l6m8Qow-J$6*PP&Dzya+z>*KWt4& zoxk@~qd%kb)E7rjPtMOzUcERyJ~_oc5f#Y8&aEUX+mm@Htvo@Uo-m4-(`i{QW%Qvf zm93=8#amZR;qi*6L*c+mI7|sFq2%$Gyzzfe)!tI8M6@vc7Cgy%EOog>e|TQUor*s+ zR6EeTU_P!`9g+=4W?#y@rhbfe(pV-?6*V%OQa{SVu~5zX>bQnBlOUoqD{NbxI!_2R zF32f%<3TfL9jac98ZBkB#$l*AddS6$jkbgOTdy7-ou52@ar%UN%2CUEqY?^n#)I+Mc7Dl6yZtLT|C?tDvq;-UrD zEGRT{L~&Zm2AT(zL%&qQ0VtA5^)`PTmr6JkI{;)=|Fi7MEM+$P+BucXc6HJ$rRRXL zB$bH3j}-1`c3Lrss*{cuGc0aYhR#G`)%J-=R= zDBsCC$8l&hoin$b0H^!6e}mN?Rl7RUKO4;FJw=08WV?aoLUoEwu(4MOV_!Xa_~Q9S z;2N1FWSwqaITrse6pVHH;PkDHHC)Zvtrc>$2Zc(mu2|?ouJ`Yu->|4$Isv5Vb_uMVw_1@7w5>f*`7hn79mpV~CInm}{Y2*V%wzT@0- z3fbQGp=EnE-*k-GI2OcLINGqVLL^`Pnd6kOslfAo)+J^-;GxyV;!qpb z*x9nieZ9moNh|QxpJg@qq#ZTso;m4G{?#5&x?P@hk=y?alkV@r?2rJrOSoT{1y0s``H0! zx1AP4K!+Z1T5BNi&QQj_Iyrsy;`HeG zDryFN@6Z}saMeDv91B+TKlkq?DHXVh77a38QGUYF3|r7{4WYl^1!sTgwtM}?5W4LF?6;uTLJZiy z=(L947v?N#g%9+LAnNSz!~W21wD+MsY&Y7S0d)7fjh=rqgkEphaQ55K?KZkj2RegB zf6xPGe>0YSG?|QLyH!T8w%s;Azi*)X-A%BM=@W-AqFf51kNE7Jt9fwOonb^!dbms{ zjbZ)cH!^f1Pkwp&Br`%*%UDFgS*RC3;OIcMJdQzdkq%5ld*_5B8Kv*t>bP9 zGn6y#CInJZeD8%oxHPGZpg>jvA?h~hCQE?0Y_HPhbI0W@Twb_5fj-7MyT2h%3nrgKMK%j=NaqyEF zSwZj&RWd}N#YWjAc&sh|?r;V-%yJtO+0<1_JF^q|C&{%VMGHy6YqV0^T!3;d=q2C+ zg!=4*qq8Ruvo@!^Ns}lDqDvf#0)ejiBq1m^bI)vo)Rgr=x6D(fzxwrq1VY)f5M1lr zr>=jr9o$Q^LFj+|Xab^8Hn?&K71-faFeBzTqbj;zE0UWT`7joN@Ix5AF~W=M%E

    un;U5TnCBP3R_`9!D3m(Jn$~OCsachLP|*J`fH5wGntyE*N^< zAPQwdQ|C7lTo;9AL3$a%B#N*n31`41;0k{Zj!dKtC-}j1rd%Y-`ltHYQlw-U#d8tl zT@-0@FWfvLV791Yna4R1}lQ44}$balCy@zYp7+kEM}*k8EyZ@C^e>o5^!hI zEZT=M1SsC(%-)P)r!_5AvcO@67lO9SNjd6W2C0`q3?o-mia~ zQK@rLz1Z0ZHZ8|+wp`n-;x_#%%C9K;9E;f?uf2@WD;}rVJ09Ini&=t!xJm9hlV~l%is0}$ zhLMl6QmL5d5iO^)UN0RaA>1#N2=EEhmS) z9Q4VlQc2gH-EA8=Y$6I2rj>PrX>ZtGo$^+cxOMuQ4!K=Vf7^iam^Y3^ z*nJFjYfMxrcO|E!@sd1#-1j|^$hkPh2*aIZjOWu}X$}XP%4jap5uQXKmgy{t6QD?K z4*RF)>C77LPN`?HiHL2(m)i2k}FbG1uc?=pHw z0*Xn(RHPh9V22y%90qi-Xr}~{!@^Hp+Ix(Vw_}^K?6DoIQPsx?F2BNseTx{=Z|%R- zK|F==u#&hds|}}~hwZLmT>;~+nGBr1c>z+6`;P;xW?cdB{^8&fIf#B=1p}!!1tt}b{UL|ThXhx4ZZRTweN>sy&S#hziSBA+yiWt zOUq)sb;N@sdC0T!^IVJ%zBdfBVXhT>9nx$ zpV>U&nlcI;`B>9izC|Bp15}_6QNf@Ds0Zn5u1`)0( z6EmE`g$R}?MUk;-{QtN2Zar=!*}B-w?17ElKCu5nh}|ub63HT2#kzL2j&42Do|e>* z)YIJ-gsvnRBy*I^ zt++=d$ttO*XAaym(^Jfhh>Yusb^X>#sxn|}D+ffP^aYP{2sQ+Vq80iu&LH{_l@u%L zIYb(z;;W6O^bZ`Y*cmo~a#Ou=28?pC$j8Khb2iH`nVzg%L2{tXgFo% zbTJ#GQJjBZehcfoVDpG$h<};a)EwgR!1?fa$ZeXwwA#^b@-j zVRuGD?=e2g4YfE2N8Y#Z-bXF8OiEONzlS^`) zMW=-_xDxoIfr3YzF1Q_*0M6QVu{rLW`FI>e1YG-uT)@)EOIqB+#H6g|to6kF&H~lZv~sPB!b3C{rM~%#Y0|LtmU61 z$M_m)j_8NG(?zWFpBe#@i@A^LKT1w9Hm_o%7>Z!EU!Jl~!yYKzD|9({n|_=}vk-qm?l6f8jK+ZqEi5IjwCXEfC)QYl4x&I# zFy_fhXmrpI-o3|aKWTJ?+qaqfjH1691RFY!CMp|^m+4AJj_VA|>Y}Fg-137;)vFFU zOw@)LcMor2TP`WU2VoRX?XyeQ8hTYTqjx-3N5Z%T85|GnWi3pU3Tjp74$p%(fj@u! zN%6#du2`aO_O|+foN>Wvo`4#m_|fZFw&YnAxu;Tp@x!;K+o{`iN0eVB{5m024MXn zo*>FOhIyd7Ifi^gi=fYXZlFqtwnu*>oL+DS2F+%@CMJE9Eg>iZkSPqz1#GBYMmd0X z01reo@TZ>);Yt-~BO!#AVHNzRZ2>t|)CH*=Oj^^ptTimC1{wxU7I588%#;kn+S$QS zCps3AH;us77Zt{?JV6B~i%WPsjY}pvWh@dlfwRrT_!NZ0+s-?^M7mtVsAGQ&FB*;9 zkvaD(wjR210(--_ct(88PK|h=x1^#3M(3TnRY!a*r?C=5c1uctp}4G0U%9A2QiMQV zS!PvHMkB!QgCN+kGYpK!V=rgkz*37lv}aENl~~XvHi3{{`e*l#*=Lt}rX-<}nlv@L z!}3A}Sd(FumRv!tAG10rj>&&u^n1P%qB6wXz+sV>aGZ{wnJF5ehPk4_`a*jy7)b4y zAo#&LI%zh>?Br5$H5ohU7#k z1@sYcX$p~~SI^!&d-UMzV-K`~47`PasVL*z^xQ!7t~UG504|v=ijsf5c=-l3lnM(a zE(@NF<>k;C0tEy`Jp@O?!CnGZ3Xe+N4i+icj7MpS6kE(D4U>-;kMbnuxeVEP{PMZ* z0V$fg6=ZlAFNcjbdq&2ECgBjto|zhxGLxUh2)ofpHw58!sYEYZ0>z%jB?)+7NJ7UT zY*Us&BUU^t4B#zbl?t(4uG9x^KbHO9!)S7u5LuOn$(xJLp<^U zY*6A-CyRt*3W4*Zi%}eRHsWCeC$3|}t@v;qAzq2@=f;ZHx`)B{ zl|kGFIR*dMBFm4(!noiC)Y6Gj(+nk^#^uIKS*~Wonl{`LCa-@mjr{;)K$b~YYG0yX@)HMmZ&=OBKWOwwg z{7#dub<3o%Q3~CJjeBM8ckHE|+lV%RQO4LMQ`jP6P8xyAQy-TM3pq@q$rg$4DK21V zhrQyH1sM5^s}vaTIfiSl$0yxJi!a_eY}NhyKFee?RiS?p?RHzdU$R>SamVhnOSww& z6;)za4E&)Qe&wlES+1yj7p}b)sMJsjAWjze7Z|mwI)2dNG3lzIt?hP1h%?fRI?2Yedi&B81ob@bWn7mRo%B5fD zCHf6R*MWcE4V3#c8Y-Ybzh>UiG_4Yu7^c&D^0Wbr$}9NEiNtIexPw+r>){d4S+*#+ z#K)~W+=n%Hw*qr#Ql8-Kh44ZptYN3!HvvQ4gmU4oqNC4Ex*G1F&5vCj2H6cKM~_ooj^DF zxn@meCuB_gC`<3aAjlOcLI8Pk7anKBMS&jGg}^4xxtg;28}J${ml;V9Y#xE5T&nD0 zU&ViuS+w(ezDl!_+&-f74BUZp-cqJUG_Fj!b`+Y$qZWR)-T1_^oZL(lGz5Nu-0YFU z##>SE9o!AInkJ=j@mkEZL1{y@>BOOwpsLZ8CFO!Hx1B{o1`6D*5u_(ela<)ySh$$; zBtbYkCRCKhOB*dmA*WKsHOI#&pvgC~g~osTEmc|pv8S=N6-#oH76`UptkU5&9Sq5c=g7_Q8KK(3PBlzKi%#c3$F_9Qz9Ca6;yM#4lP}H9dde;h zUc=nLO{TW+F+0~1Wweaqk`Yi*dodqHB{y_p?O1yC<6oEB-^6asN}7k5|wNTLONk`wX|Z8E^5TV&*#u} z0;4(S*axM;ffXW$BR%+NLG-n zh$lg%1J3tjsEyEDpw|G^1)@ZwQy4N_MH+##%>--{GPwY$HH143dbErtBD{x;eg&(~ zlLavww7Uneg#{XI_T7}HI5{!yKxf-zV-^Xu3L>iOc_4LVnW2B(0=N-I(DJxe z6vQ@JV00Xi_qc!wTBdFG6b{ORq}+Llcwf-MC?*g#7$f)qwQW}Ax&jcArV3_yjU|bQ zrO5sTtaQh|KBQ$!v9vDlf!rgQyhs-yJ)eaC6*10j<5R-S6Bm!{hV0J<$-AK?#}o2B z+>`BL0={$KH|g0A#sa=Hvrp9;-OH|?d-7S&Q$5K5gMyN{dKzmr*3R|r(pDg)P_@7svwNA ztx0^&0oV!x0~hFJPY2+(+Ww%Wfn5b$^wcz{4VG%COBgC{7y5q)LY12HHJGZhQ>QF> zXsT(#D@7lGbcpOVNT6n%BD^wMSu^yp@$(wn}nvn4x>%k z2n6-ge6hJ-(&s=xK}~;daUR0*cR{b@_G2xvCjo2|Ehw+y>U2`t0T~DG$?=Sql*UnlI;TPrk}0wS)*YL3qtoot+^~Bre=T<5tJ^F%Q_vHdu(*k zu!^nxVn0B!l{}%O+csz&pFucC9>aY>M6aOzDL^gpN&!JON|w>8VCiBsF^o@WZt+CI>dmo3PgM;vT}+@k_oj>6sd%QvINNm&r%HH&vNO9 zgBd7`x_N(CuPmCJev8u`5SEs4I?9$J-$VF1Lv3MG98|4O+FTJccfq$cG%`568?$W5 z66(z8-EtkF$WWVILJXLgO?26pb7|_~agQ3*tg+tohezbum_-Rj=qqB^gs5uGho+oE zbUBb+lZOu)$KC_lx&2X=AOnk(U>K#Nc!UZ)3~uunP#JG1ZY9ZfqEHj!JRuh= z(A@%&J~0~d9HLA?OahLvVD$^(M-Gs)C`*{(`&48li-3`y74PG@!EX;ZCS*1Fawq{U zjVph=7>b4vy-0~S1qmQRBYm7s#*2hT0nK946O&7=zM)5gw}0sR%$#%SMc$;bDGCj| zggI-PrN@1{C^&Qmt(^FjU=`wYQpj}>dCxv!^c8ac?ldWU2+U--+W1xVjuH+6+6>W6 z*AF=4L`IIyg1xXt3Y*w*aTaa)zCzkhNSuFqECVjYj(VjwZm3cF9nT7!{f$E;(0 z1DQ!;Bm;Gbp)@L?;~o1Fgb_(Fj0M#UiTM!VKPq1U0=l8^r!P$HFBscmr5Z9HvU`7Q zTKU5Hf}zj3q~6HgekDl_ByEt zi0z0jL>zXUI&!V1K2SdzL54&?{1x{Bw4?-QEyWgyVs5I58l>$IJ_!R(LM})zq>70D z%%w^mIUA%>&_&(9I301Y7Si?M@_~O6U^jB;pH>V=K`Y4$OjMY2hS@k75weFk%h?Y)DfqZrL)UX7~jJ;uJ!tgJjtRG5`=m$dBQC z#wh>@EBbix2=!#A0yE(f*5{Z(kM%$FIRj@wm16fm%G+VRrY_Z@C*iV9yG4H}i{;*F z6UHjsqt#YDg2OSGdOezkdPHTt9!*t`J|RYbzzY=qWg0m*)fY`+AZDdR8I%^gji=I$ zH5y6j21Kfowb-yd&kCC#WM7=R8Y7U-Zc(?umdn1NKDI}emyGQ9B^x0e0OnY4ODP|Z z96Y>oxFA7JS`s0;B_(1^R*E8mZhw&v1mu4dT4aUdMRBFX z+Ea^hVfxk>erMVrlswDppb3|)pjCi)j|LhCXk?n46*Acwjc);IacpAj$hG*9Cc7w_ zY$f(DvPAgYR97HOzHq3bX|uVWJH++Cebd5n@9yXTCww6HWxy>Ox%u{l7^>92`#5oTTW*32Pvv?f}`n3)yQ(4T*1U@B-*R-S8qwO3y^ zFg0&*W`CBMF@qsI1&JZh$#b+u6j^sD#hIkJmU%~&2M*%Q5m3i7`qhAL9WlN zmM#m>&R{MkS;HVSzL%hw*lU@QD$Vhm>`NbF&iQV8YX%g5x|KoWuS)xGy9xUG>U1fY zwpnyh-|IA8&HR6Nq`-G`Zj-*3GOwLNE4IRyscD6mA>V4(ThZ&-)a+Pq&+FJzG8u$B zMkfS5KCS2(c6;jf>~CHTEnpTP6ZNSPj1k%jSgLIp^ePKKm4yw9-i^F_u$3x5p1-83 zHsEkfL`&TpPaI!Gy7oAP@$rQ2~Ds4ERM>>(vw>n4xRazE^K+ z7d3*d9ZughN#ka|UFo;3Hti#EBJ~T_Vh0VIQ>(A6hdyhv=UilamCVOAuQKm4>vujk zFEhYgS;J3@T%789JFMcOr`L_Q-RN&teZ|4oTvtgL2gqoS=ihbiK}Ee_PhB)w2D@kF zysNs#6rF!|jlRIMZ@$>P5EsuXyt3MkVQ04kbA`ARiI?s6w|-gE2*g8xA3@0Q>% z3v_?uOTntkM%j!MS0YTJ*A})&0h5GdlE8Teszt%e5-pI@+erYFSl1?w+wnuU`|m4lh8S zj!AdOX4xVwUjuACChc0%yS#^Yp3qM@1X^&8IW9B*2TeYb{2 z;4<~O)!=d78HfLS9Otwx5!inW@OItPL@otHz7ReX2ud9zCnz&KR=-mSCk%p{M08Vq zp-{z-M1|NS0^5THBCFQ!NGzQ*R}ZCveB*}qXbE-RI`75#}gj8;SpgMSSC>GT!oNa z)L9~$#YDiPOTS9qq#7cH_o+O-H4EJ_aN-_leRDqnTE2S_$3||su+mr~vcI(?bN70BF z&X?mit2vjAz3sdU4Q~swgqy5!B5?u1QA214(c>CrS%J`e0{(v-Wj2{4Tv}y!Y?LDM z`JlE)R0St9Opsy)85a6dfbe&LD_tjzGzKOz2s2EmC6dTg#t!PS_CX`>5~4HIbxmj} zHGB=nC5~4OGR?FQ6S*c|i4MsUX#YiTIMbPe9*fm!;aAPqS&9LJ$Bv4wdNpwzfvrx@ zanO3}Y&_5Fm&X0rortXKAsOp8DM@kF2`Kx#HB3VL~0R8cqc3?saAbBrdAAT0AO13u5S6 z0&gX%zxT@LA8>bB!nw^WIBCbXFi8GPcfNTkON9_1b-7yc^$vUcwO;86x#c1(~ zbZuHZ^f1qo1T~VNY_iy7e6W#8o<$cjRYk3L*a@)yKPZcoM-V`==`igiV(e4+x&moR zG;xB-=;D7A%(M9dvK*R}3u=W2FWv-EnxcGU!g(v~8xLRHym}pUaqHA?i!c7ogRh^w zdGqAQm#-c_c?AgKLtZy~V!s#Y;H9yp!iuKSGLxo+3J%ur`|XtAaS4pw?VWD07(xwb z^2f(dUO#$UzFSjCbQYSn(9IFfsTjJ?O1lm7^@)EDLQ->Ixy(2RxJ`UFzioM^0M~R% zrc2@ahPb(FJ>Nt|nHQP-+!_x_Ez=*8nVDad4@B-4531W!D_QbD*K&2Uoz|G4jJ=Z3 zV?o{-KwXnaoORTb6OoYk6#yq%2&a9}ai@g{HFbTe#n>DEjEV2U)m$$Fs!P*%JHocq zPX2%K(StWne)sa#vnQ`zH*FB~Fg7|WQKMQ|r$a8O+FE79k~FA>z2I&_hAoy}E;r$Hp`#rsczCp?A?lR{Eh0UfHtT(IffNjFc}5>nyjDfxM*3puqd4{Ri0hRI~@U1kX*H|hgcb~-_v zLV!8ZIif0AU!PrZ@lH2z!M<;;wQVp(${K)iWkeAQp_0$Sa$1GNCB(Ngki9><1V4W< zIKR>Xr$XQgP|<1`%#o&XMC-(=YbhJMoseH`2b_dF9_zqUL2lAoDYC#1NBhHGl{QP3 zu9DRJTpi|hN2$(yS%}rvi#in&Qb5q5oiWVP@3ullmDAXB+>^y`q5MNJ$ehieRUWNM zq7sx&3?05&!NK7XKRozZ=UL9M#f5(%=lJZ=%NKM~iFw4*B>E;m#D)w=DT@d^|B!W~a~ zV~|e5S$VKyFZFYtB=Nk63!h7Dt{s`d_UpylYM3JaqQWBj%Z&4#X*s~aULt=5(g2G^ zr{yd;{!3^=_P5Z4bbG9S-ralNXWibkyQj4v!HdJwovkNKu6D~fGo`^W;@`lLd|z+% z%v6gO38~aO8MvVzMqFHi01Ifm*^H4t z&1@NJI4jF4OoHVnV7tTJz-1=vClK&c@*M>%mkqj|ESH-awo>!SyS_KCdm-+T%YnQM z1-Zdcl6vi%Xu|11t?6a8x-Vu|=Wvsb#;y;xmm^ESv%1gKy<*_92EBiVjr@25kJV(J zE{$d^$RW>LS|Q7)i`jt7QOjJr!7+=3Tmo0`g9j{{`|u%~4XqzE)SZESrURy$i(}RW z=X(xW7uub^F)0Y9Eav2yndT}uF;0HCk1#hPviL)1MmMw7W_U+TMbmcCQC?2uq7&36 zYqz@!AJ`8gARBxJH&K5R9Fdgp05Gp2Z6*B;ItVxH- z8XHD)Ni%g25xM++Tvr@RIwotQcDUIK85@+WcnvXe-w_k{Jue?6#)b1x9|t&yeSNyL zPYB-QKaad=O0_{VOgzjg1Uti<6=}SD(JrRZ9JQ#lxURIDe7&1Wm%Ho_F|m2 zis&(IC)I^?wEN&wTItgB3y5{M>6kBXQ zt2eAX0+g9Z<^3@>UBEj_q;JO8zOu5K5*kE&GYc<)Q?wOl3|1VYXQ71ip&TD$aA?B} zALao}G_%W0iN|(-gyC=iZKTBHVc;}Q7PtU9JPOusvh-Zro78*+0vm|$95>l{lMM%^ zl_@|abW06o5*5_qk%(n-!-)jR@R~Bxp*|2$y;ePV zea~t*_3Yxbc2r|4{C7q7@(XC*@U;f*V*lx0)MGscUGBDet==Du->lc_O^?jqtasjZ zm65f_3&41Pj}QhX6i6&Hsm(!U^AE3Iz5v+fg4glS0$tYQ@v5#)kJth{;U&jvA|o5M zHD4hBb6xx;6VUbctRgE_WECueUNL-$A*PnZD2;Z8xCqUtZduV`7-WmGDU@k4kglm! zEl2txtyn_)UJ4;I6xYg_y)nnj(cjRw2o_=Y zK#S68vO!h2d(J5^q%z(e+gPWc@b=5#Z+5?c^&_xf;6E*Yzr5z@2>I2YeZM#k^&e$t zv_8Ur&S+h8XN)kc_it`z?6Uo7_t3h;x<_pPyldTJtoQW5xz+ZqI)`lEyXW?td#>l- zb9f_FY%gmvf#1 zqi_BWEl-7uP|(rmdip?Oi}!=EiidWP?$%yHj@>!zC1k|>ZX5LIsZou1k##;tKYP4) zRS=$K8W$$+{Vn~JhEsmNrDMX8rpiYj%PryX=45$x#P;Dot$j0KV}p-d$R)vWKd=se z%za3051<+Kqt1v=Cofp85p{3O4n)I2K^|tX* z5M^Df^zd-7do-+V(VT6-uV_x3)UYa*>S&dfMWq_H20-(e8NxYU*Lt&s#>$~jL^%$9 zv0e7oR-V|JHP9Ta#ftM(4i(CV?l=d3HG`vClZtA(RxuT$IkA@U`1_i?szvTK(UWsq zLFQa!l=rz0=)GWtDVA#E&L7d7p{y}n~VsE)0!)3Mctjva>k zwKDo8kQ(nhnZTVS@-pxC`cZtRMzOR;v2h$rYaD7M-Axm`Tsx4bdLYy54dkhR8p!l| z1DS3ZNX3Fojd8%Cwt5C#)tb|fuO#=i(jivvBdDc6R4MJvOtmulDi~@84Xh6}^Kg4U z$Z+2SrmhF^CcB1bf`KtB2p?PzNSmG47NLehf>JxhG_#3i=x%e$OtA07mN~DKU$|5I z24?wP2P}NIQ*D+%xQ=)AUckG5+VO7vn5KDgsf7Ge_YA3g?-y4*@1o*)S1FzkbngyG z?Tk8OSsZ$No$}N?)Vfytn=5EGwE{|4x+-`t+?}Wb0105Ou&wRdV|@#EaJ{tz=O_7` zYxM*()ncM!KRX*H?Ilr@#btq{67mG`qFoE}>{iU-TIX)ZwY!gw0T(+ZzJ=_f3S*y{msyh|9Gw{Yht2Xs+>%8;t zDN8)s!>_L0aWm(<)spf?)58H*v~RIJ!~5)FXSD+fdY98U;VPS(!X=C_Z=R9j&f!+#-u$l3220!qB7SucM-yxhdAh$LpXZx;+aIHP(v-dsW$zPP{E}{~S5jLsFeirAloq|AHa3djgZnOgcn+B>Tv=9W= z1ox8ws3r{8$JE4(Zb4X0+mRAy?Nzp{<7BAOdzg5zq6jvJ!`8y4kChjKb3@Dn+o!rZ zvY2|JO$dHi@dk~5*M8rQiBiP-C_3yN>?-FirUZxDG@zCBpvVg9fU2v*FPusEw1fZna}m#?33r;oXIsu?aXyi?^+cRcwycd%e1vc$Gy$qD z-5eC!(B74Qxv_M4SsLzCy}hml6DTTEpW)sCJtaasi%P<%15j@o(oR6TS+H_o*%O@K zaNxYuR-KQ6k0*fSf;e<0@+{4-d$UPsHe*Vi6Si(%%ScQr%wLrANX=_t`smv&UG!(4 z&A==givCFPUkcT*Vv@>;Zg9Ng4GXC;X(mZ=XUt%K8=5RC%iLrkw%nkCjHy;B4oC1F zd=5vXOVfZ#K728YQ=#gkpOHudS(6-U?U=gL78*b^zIWaJA5Otm>}^`%PQ^~y3+%18 zQpOIxMMc_i@gjOrPaA-^ojMDhZbFk>yT03Rc$1a~*A8j9v04RsO`z$Au7=IKUKR|` zpueksZ!}~>R?0w1vbwHPeaz)Xqu0ot3gpwQDOi(C88MK>MN%UcCYzUSso7wsco?W; z;oy#E^U`JN+{Gx+?r$uGaUrgwJHr7cd8s@t>aGp#Wqi5KN?<`gGA01H524X$ut=i3l`dvQ zO^^F;kqh<|=X%N;Cjn20i*>BTlEO%Tu2eklGmxc(TJA=808(@JXi=2eOsMu$CY>{s z)y{M@*qwr%75VT?gh9Oq2DQ+sh~C1!m@a06G>Q`dSOx+dIXvE&Z z--KAKUM=#3vQrQ(YX|>%Cq7K=fOaoVgeETM(TGI_TAJCnuf8sTcr{@W%PC)f-GLHO zQ9|}@7-2#Az4M8P17l~;AAJAgv*!3O7J zqVKX%mfpeqE)fCCVMrVV9k5Y0T+A@4?)4vjXLNTCD#sBkr+K!ROj%U4VoJR8cN0X0QU?DfD~5lWa-Bhf9v&kN9QCR2rvI;#p^4g};h_6aJuh9F@_x zufDFsbXu81$cT~hCHp4NW^uvm^_&+?mh(TF*tnD%hT*74Nsl1NJJ3dGzI;^ zvtKXr;f==}&n9Bj)Rts_z-N=-kmK3JD&ddU803f#vk`ZP2^EVR0A7oHXbf-XE_;-v zpu}epE&*iQ#jE7X1Dy+n%>UZTUsMOm-)Mxx8* zMSGM-OIqr9Ho5Y zli#tZWS#b5Uvv3!@l84*q+|am%teY-+@q$gN_48sVy@fcrn{4&hz`rKJ39HTRn+y3H+;8_a2%;6v{Ee8H z67Gf@GP=rpkeb?BVIYLc2dI_^sUH#T&D9H>tq)N+Y@GQG zmA%3G5>8bR*g`d)v;CrzV0@jptx#d`gJ&zlATDE$Wq@Sv*tLI3kcvxeLB z7yEu-wxuak;s*tae52J19iWW!?U{8;IMt198t=6xN+3D|8=2C2nzA>mIN}i16NJ2MptT@$E%_ z_q5jS)!3?wZon5k@e}^P??#%b)AmYa6d>vaXHICiOmarjvN~sNjMo$?a)ln>UID>_ z6`;;Ss2E`KPC!QoDYylX7^fiHLNaXvN211JLp=x^uV4eDd`u{&6u)|>U}=;C1`VzU z@QSn_0{KnEi@!t`$ba{C46Sou3ccumOS%l*y=Ckwm(=PUy)s%Yl(c0X5O~$y2zfm$ z$7#B!tp3xGs@|&Y9%gpzEE5g^0+vQ3v=iq@oFSshwOS(>OwL#+;aJT|AF*K%ySun& z?Bd?X3V*HK$J^#7Yc#5cT999{!re3X^|%z z8JEi3tXU2!_)?H=?9~oxACJF%^{i%)d3hpl-=;sn4>vChz=Nx!m&5Y85 zEDq@0v)+m9UMA0TZd$$QOi1bdFK+MB>N>&9tkVr#551p=lkH==N5GrvNv9T+sn)KR zk&f!Ye4b|)Xp>+=@b?xVb$owRkIkbM5V$6oLJEl?YUseKmBvv(g5I;01ObiDEh2=Y?NgnxcHxTqi(lz zxQ;AXEn@7ZN0#W|7~4580{b}5hkRTWine+pE8K#2otugd7ln!gkh z9ADihXx7;SP=yl+J%CH4uQ!3%$a^lo?Cdt$X>dB6(a4LKb=#Qe4FBD+_5m>uq?sf9 zKWj>N?y{%Api-6@0Rd9XF%q&+9(JH^e9zJ>E>_?wJBsr6?AvGU5byAo(jADbHSaVx zoh?e9x1i}3e@Q&e?dxK9%(`0kt2)8%+4b)&=WFbewPx9$t(M>-z#1mU^)(Ve@Fs*v zyJ?=yprj0*C%;bkDXzsL(_W5{;GvMG?N5uCgZ+9@<{*GC@^LieDwG6Nvr`_OLjqS2 z5Wrn>5Q%(+Q2kTbTi-+}gjRowL>Yf_m!COvjf`nuUi9J6$Ks+siqD%2(0-Z(3D!7Hv$9U+>()32@VC2-z{f*X4WdIs?jQ7b z_qaFTe_ls$gWGc$cqI88zc&tdvSGQypSKv%Kws?lUKf-`qk^A}4x`?YH5Gn81fj9o zbqL6HXV#a~w? zJqxgxyQj6s7+nY%!INR77=JD8r|~Qj62oZpoTrOtDeLxw@|MBJw+KNWj1iEjnM85( zd;ju1Um=T8812fBB9y|Vksj>Clo0SwaEkt+-k)DIgu1bPq?OqW{JxF)-KzQ>S-Y$1 zitfz;)bEl>om{&gr|h8J+3oiFacZ*cvcimy;)u=jIMrlpihw|1+kZ0fex*vF*Xd~a zi7BB9f=&Y4G$7%dDB)6l6{@(!8I;rZDOsyD*bfLO0kX%~r#MpdA2*6)xPdOz#zM5M zwx5ChgTDD#50Wg5#=vqOy>Fq+d(2?L+~JttKTe{eYz+Y}4hWoC6{ftR(_b=+9lmtc zB%Q$Iz`xHd>n1q2IDdF`D@@6vY>hbYKJa0T@JLzar9(5a+>HSs&Q5XXqRj(r=Bg10nup+TS%~9(f8IV%~9!i3utxd16-+u^TWKo7dNzN(~SkP{< zm*zE(^5ImVMWR*%LAZ-)H0RcYwrE0=c#uc=iWOLo+CVTeFx!peizXWro;N||(#6!E zp#Cw0)Rs{?B80zks*)l>D}a|cr+i+JuPg`fopi`e{Q=qvW9rm$nk5`pl9syt3DfIp z13)g~gkn@^uzycQ?ko!oRJuS{?Fdz1O`czOE1e3UxTtqDu zZ5{bL&*K>^xoCjA5@-={HDRd$nwwI4Qk;Wz)Tm3FvwxWc)0ckY&K(%6oP+ZQ)Q85g z5v;fmWG1r95CahCkOW|~nUgRP2q*p|wWjDK%N1fG{v_t)nAQ5>6doea=Y|9{=J@rr zRAqKWx0dmEY~~ZKnkf&bPWAiZwGaVn9oB{2ySo<>D-DwNXN*ulB3ZQ#!z3&C1GN|e z0!=QD7k`o~!eY$;#%MHpNixJKlVFM?UPf^ObO`LeD=(#7CMyIG4=WK2nFc&`@QK3+ z#n#y1w+fRJ-KsYf6MN-?T&tG1PfcW@B0{Ma;s_fQ$N^o{8|O&SB0u4*W_;{jK}4%M z8*NoOU?#kA9zbWsEi16PC4eZHoSXK%K#phe#D7E!7dYWEX?6&)xfg%}?{`cHXOb>! z?226}TTkF4a!WZVmsy$Q9e83+({*Hvjm)I$ zHY}})kI;+z9Kd&wpv?3vt#4!$RBSRT3r%!#R1;QRzaYzNL;l`wll2ap ztk*&RI$zPFSO6ka)pM)V$S;L{TM!23(+2@H2lD|CNT}SxUnlyZ$c3u*g@3B?T_D57 zgopR6s$lQgSBBcHu97e)h0#56mE6-{qKS3`<9qhE$cwxu6fFYGk)(<=17#a#*|2`eb;c>YDaWrEjru zl0_204W$Bz)YzW54x*4s3#UW6nO}o0iFYPN((0m~sq!%_OEqO$`o7-kcRmj-{aUue zPP56jQz*%O%DTNKI|K@M&~vwHc$+fVrwleK!?2SovUqfK)kzb_}`(k(!=XlbjUi0RJ;33>fb}Ho$ zKSNb4vMZjl`X&DGlYN{6(@yz2C({hH)0CF`ljQk(=7FM%{;J8C53!;WJ#j^_GQi+!p^-)F_2_X9XV6^Y4 z&|F!>-SOKd15wHBNF4I>bI9kgL?-RD(0+g?PA&?GY=irV}i128-E}+T7QD6;t zW^+WvGqgn8WeJ+a>34#UIykghaUtIuCj+^^Yf11T*w?$Z)}GIRqG)%0LT`BS2ikQn z7Bim5L+Da80DoABR=SuKD24>{nJS&u_8P2@OEk?mJuB6a8%OA7+;a3oVGBu_O(qG4 z{UL267Vn9BYb)|3?l-EiZRVWAMs1r9SyX1@hs>>Jo)iK2t884A`6iY0Y43O9|CC2g zt;6=MyRwQ$v!hFTjaq=o5GcEqGz8vj+JT_s^?&{^{(qbQ*drSRI&Bdr0mEC_HoVtu zze3=bfBw(^=Zfa>z1chj53FmR;HmTnoTQC7LhRHBRVH7ELce-mQOC z(Y`F8eJ?=Vm0LsLua|igCm@rcK?N{q1Xw#EPtT(`2M35@G)Du8Ko>v}cNnGMv4k16 zqa;fw*nflxNWGl$ltG4~I5ps9ef>!>WIIglDMv}~Rj_W@5Noc8v$ZL&t$#o3?%VziCOwiwY&Upouh&g{wCsLL zjnW4Tm~rjfjQKig)z1I6UR2$dasNxovdSGboJEk;ByhP8b+8szARyKDeC?6g@RnpE zxKe=vXO`MZ43ULh*!5bs*4UykTVkketW#Ta@I@_k_>sLuFRHqT69hwXLmm4+3ihT- zQ-37i-@wJl(GeXS-dsmy9l@}ro5G*#`%ScW>qba}wD0iamT7yfl5VI#mgr&3BKddsYCfoXLl{CFU)!$YLE&GbU zthb~Z9z^z2g9V_!thWZGkbl~>6|*b;vffHw760FQqxpOBmpyNaLl=K}bu~w5{DM+} zR4JBHM7rx+l#i&MdI@d^LKy%)@aTCioo$PnJP@)wW}E8o6A#wQVi2>eY^*P$T7NRT zKaNZ7k!UDTm!|csO-YAPOL1Zpng$9{#_JPpL0)2xv8f5sPHzM|7pD__qOi5s5IJH( zK?9a#7t>ly*$#v;D1QqqFOHu^*g0iq>N3E)pvmw?5HTsAUFy$VHO@k9nFLqkzxkyE zIdqS_nY*iMQ1vBivAx5F8e1J9t$%x+#xFERw9#%H<`yx9my%pN9-oAZ1X=$CA0`);m`Ztm=`?{Lo-EdoGoFI6&ZU}=E=QBY==FXjeqVvVkxBBVsJo; zWt1e@5?WeeE46WLr^ait5t6dKMU@G+V3syaq=|F@dmJxRe`3wGeNVGIG-g@k^>Q;> zUIu44knvZCtJ(WO$G#aKzPRy+y@bZs`tG^+T{lZ___M)Ozt{Tm=%ypC%9^_A>-rqx zUZ7rJqFyxi)QI${H-Fzm6aE;8z4M&a8lu^7_d-S>*)^3n#q9yuxe&HqrW*b!E;JJsn!pHH5V}8`fFP~#RwePr?Ov2?qliT+U z!V!lM`Y|5M#D7$XG?YehA}(IY%~(JqG(be_C)~nu{i)1KCrB{rVl0Xdi?6XT(h`3@q?6XUsAHPBZW~bzK{e+BjJtKX&r$axHSuml1sVG9l z#eaIP>ym{EsNi$a7T%s%(A-jldy3hu;VOqriJcP`vo8X9`c7DU?_R@FE(>h)Q>b`q zCz>?1T-8pz7_9snleyMo6xNh2*bdCR1aT;CoU9*fbzu5dCVt;Ow;{^hAXj24Y}d>U z;SP$BsmkjdaxIU&!%oME;oh|d;`!UH3x9Fn!sSnut#YvgcdY`_jpzyTe14@rbM z#qh~9?;RMV9VY>@rNk+mDJ^cXQ+7-LlBCIa59(9F&^LS;!X?Y#k7Su2y)GI}2Y+K~ zt>&bcgH7XYkBO?LO~%E_Wp8~!nX`T3y++*i4Z>bwOSO8-lyC3LnBwD5i$;{u2R5mR zv~8W0b1-PATid)ltXZ@jWti=AD33UDs^0tue8|3PU=K|XMY)}KcGwd*p-@@6uA!bh zo&mESmzd}-I_HHpkD!4g=i{6gQ-7T~53~0PRv*#fVwCsG43+soW3g=myWg%GDUn5* zS?4&B)(z*+I1{(z-*Sr01vA&nI)CaURmL(VLyN^)1|FAAfC^<=EP7 z$Q_xfw4I#Sf`t>CAVqeqW94eMvp3i4G5egQ4R#Oy^*Kw|?>jHy@`sH^)>Z8MEh9?U z?6vVYz}Ie45r^~6n{C>zyRJej*z0ekcShY-!)Z?t-#tWiM!R;HOS4gtCv=M2sq@w@ zBwoQb+uT~SXkHf+Vg@#eUh7Esf_jNgH4?VWK$5H}Mv-By z&2vv>gCx;q*Cx zpw?;JwMNJt4sG)2<8Y2?)y0(JEdfuc9l)aW_S?xP=%2PG)45Jyc7Iy{BCgMSj)~4e zO9s$+RGv}-QsUb99FrWN&RYW;iYWEA(7qQS%Yp7472ud_9Wy(!GM@1hR<7o#cu&g= z0s+WmQfLrGfuRUEfYFdc8=!yB79}IqddW$1k9g9csfQxa-}AUwL` z1a=o;BJ+mM=Sz{X0>mG(#hK8PEQ#U~mZVQ<6>0xxx z-QW8N`GN%^%JAY8+<)0{MgO0l)(*_{ud`kUGXb~zt-bax{7=K_SkR?}Tu;k^e{22r zY7V*#Pz#C4HS$Fqvzowu72cLq;yg+g{FoWj9n@`WOox!JITSqY23V?0W40QoDn2ue z%@vA)wDjtJY^58kNPqD8E|!%se)P8yo@h8b`l@spG4X=fH{&!v0)nJWs`AUi0q;6E zTAM7(Ldw=(Heb1;(pj3A>1~H&^j=pEcJqLl@A_$d5H+k;3jx+vau-nmA9 zn_$@(CG$mTg-qkkv>u!diiD%R@Rhj6={j8>P+c?fpiuc1b|7fUs;}AqdMn_F0$YTh zxDN})tiC(OXs0xS z>o9jpLh0{nRez~A*C)nfDtOF&6#x=~)wKjl`%3N_S914bVc6|e-ONUY^?kOVbbGAZ zd%n-QhwxtmvrhN?8n!{IP?=cVEwWXd`iV1<*Dwr*yCZh{rtY|EsxXbi`b6V|pkgV` zvkTMQNF_oxN1qrNtnbjwivFhs&xLzxme=pRtsruk=mF`oD7|0-1IQYTlZ(D!0zaRV z?Y>8U^K*Ll8b*OiJTu8TpJ`RlXP4Wwzt>sQ{*^%)Btvbl0qj~_gFu3S0FUZ;Ed*HA zwb_|NE)@93&JH6*o8X^iuHQ`SV4LKU*iw#)D;6OSfMpq|>R}I_LHBS( z2GD)pKiE6Cp{q>*W$VyD*;4b;a7i7k_EyVD>myKFodiJMQv1-GVZ@Fq%#O-U?umxB z4Ct)C0H|8b$%Dvowv~Pe^Hr189xMM{nJi)p#g!4^1eG4Ho{j2-4zF;!!IL%JDD$X) zm^Ni>%(Xf}tZcXk;PbSQDFwxP+wep$!Ct@aTz_V(9qGxf^-Wy4EG<`w-7tvHUks%b}kqkwLN1el- zNm^`Heb;z(eGavXF?9|wvl8HF+9en66<%0$dl{D&vX|m%9k9SCb6Zh>Q+^&z8g0E= z*MSC==OTd3a}q4#3e-d}O+~kIGK9`-t1sE@y9lCdh7!gQtsF{c+o4$TSz8T%C5$@y ziL9@=rv{74G8#^i06fm4$x{(GUI)`Ap64cuWnE98&9i00cd_28Nt~aZ9rl9qyn(ph zCpjldN2o|Z*+NJ>aXM+U@3QdL+e9GyvjtT%(du5GCd)31qdCEw0yFo@HMD570D;I08_DNLA%QPT0*+dp5*FRqU!Wudoq+pWs3`DN z81oT8AR~)XlEJkz!7^JU08PLmmS(MNu5knEqCNyeq*Y?HQ&q?4oq=%yz*;`L^n}~}hL&I* zb{Ty>aq=2cby@Jde29RJVjc05`RH5!}GTsC*l zTh&PtnpB{@r`8VGYFEQJsV<#f*hb>_DO?}^#`%k!MbMv@8NhLWQT_WYX2-Ohoqm78 z$_&DwS?kn$2V;P@<{*?v@g~DUfQ_lv<7%Db*ef0-;I6gaTg>wuLpMM6dNC-5c?^0A zeo^vtRIpd`;Tr<%fdvM|-6QmS1I*PWII}ewK;lRppMah%cn)0PJSqxau(Qiylzxj~ zzsPNjva2&l01WAWQifSNVo^Rhk#66z8I3Lrex4kqMc%Y3}6d*K%sENEQn+p-b{Lo2z%Ko{i6i~w!LHGnO&N^~6p1r6nz z{@fv#@T>KIMCKuaDPHFvBr^4=SfxXQi_{FS*s=9!8O5bU(U@@IE{kFGm%{3F%-+5u zm@~=2!VPpOn{bNZoDklD)pj9C9ndj@@PSRzZWu$eU~*oA>5=BgpE78H|7iibUIQ&ux0gYqiu;N}S+t3sYsyqX zmkep(ssWD#StxM#6i+VZSq?Yq+Zv<_1aQUqXk2^Oj?-bX81bS$NwPtdyqU&Dn|e%D zzRL1hR3foJGGVpX(583!$CHHPZ@iGcM!sY;stef07RPEe;X7TCMu|O`&&8dwWmY@b zotpO_BSG<)EplKxqcS?i2jIGK?_!pmEXwg=^Yh(D;Ae7^?V%ih;fivn+qolMQSfi+ zigHJ}qTC@@lsh2e-;u5;cRug!9z}<}gWWr}AIhCxd;gB>hjIr8aL4ly70*B4ee(J4 zqj{FBkg-PPLUDQr@+yL_N*~-*j_&MGG3fp0yH9G36WBKYat8kJkWQZSRHwx(XGz;y zn`Yn{17OSmI}U1p8Fnk4K^c`dhEaZwmMjEGrS%)F-NHbyga_-JeEg^5{c~D5{|mF{hWNs z=xvLjZZ4%UFBdXgC$K{F@9>hqqEa~>Nm${F7$SC;#`SCkgD~bG6)Ojs6CF(XERD-J zN-!F-Wpc*tU;X_*{+qx1)!+XQ|MZ(*{r$iF?0@`!|Hc3M;J^P*fBUch?tl5a|L(W{ z)xY?s-~0zlzy8&)ekK0*n}@&t_y5(e|LM22fBf}t{=;AW_E*3DZ~x8z^}qc`zx}WO i@87)qKmYfC@4x)b|HE$mAOFd3?*D%g4>)e*@d5y=>-=>9 diff --git a/packages/workshop-backend/format-blueprints/workspace-slides.json b/packages/workshop-backend/format-blueprints/workspace-slides.json index 967c00833..55c4f5dc0 100644 --- a/packages/workshop-backend/format-blueprints/workspace-slides.json +++ b/packages/workshop-backend/format-blueprints/workspace-slides.json @@ -9,5 +9,5 @@ "icon": "presentation" }, "author": { "type": "user", "name": "Cloudflare", "id": "agent@cloudflare.com" }, - "revision": 5 + "revision": 7 } diff --git a/packages/workshop-backend/src/agent.ts b/packages/workshop-backend/src/agent.ts index 0ee85ba72..5a102438e 100644 --- a/packages/workshop-backend/src/agent.ts +++ b/packages/workshop-backend/src/agent.ts @@ -490,12 +490,6 @@ Note that there is no index.html. Instead, client.js must build the entire UI us Make Gadget UIs responsive and usable on both desktop and phones by default. -Every Gadget UI can be exported to HTML or PDF using platform-owned controls outside the Gadget. Never add print or export UI to a Gadget and never call \`window.print()\`. Browser-mode PDF exports render using print media; HTML, PNG, and JPEG exports render using screen media. When asked to support or improve PDF export, use standard print CSS such as \`@media print\`, \`@page\`, and CSS fragmentation properties so the output remains readable. - -During a browser-mode export, the client context is initialized with another special global variable named \`gadgetExportFormatId\`. This variable is only defined during export; during normal interactive rendering, referencing it directly throws a \`ReferenceError\`. Guard access with \`typeof gadgetExportFormatId !== "undefined"\` or read \`globalThis.gadgetExportFormatId\`. Use \`gadgetExportFormatId\` when the Gadget supports multiple HTML, PDF, PNG, or JPEG export variants. Do not declare or import \`gadgetExportFormatId\` in client.js. - -To add, replace, or disable export formats, server.js may export a class named \`ExportHandler\`, which must extend \`WorkerEntrypoint\`. Its \`getExportFormats(gadget)\` method returns the complete list of formats, and its \`export(gadget, id)\` method returns a \`ReadableStream\` for formats whose mode is \`"server"\`. Read any needed Gadget state before \`export()\` returns; do not capture the borrowed \`gadget\` parameter in the returned stream. If \`getExportFormats(gadget)\` returns only browser-mode formats, do not implement \`export(gadget, id)\`. \`export\` is valid as a JavaScript class method name; write it directly as \`async export(gadget, id)\`, without quoting it or using a computed property. Browser mode supports \`text/html\`, \`application/pdf\`, \`image/png\`, and \`image/jpeg\`; server mode supports any media type. Each format must contain a unique non-empty \`id\`, a \`label\`, a \`mode\`, a \`contentType\`, and a \`fileExtension\` beginning with a dot. Returning an empty list disables export. The Workshop supplies default HTML and PDF formats only when server.js does not export \`ExportHandler\` at all. - Both the client and server run inside a strictly isolated sandbox. They cannot make requests to the Internet, e.g. by calling \`fetch()\`. Instead, a Gadget communicates with the outside world strictly through its "bindings", that is, the Cloudflare Workers \`env\` API, which code in the Durable Object class can access as \`this.env\`. Note that the iframe sandbox on the client side prohibits modal popup boxes like alert() and confirm(), so do not use those. @@ -548,6 +542,61 @@ If you need \`RpcTarget\` in server.js, you can import it from "cloudflare:worke * Clients may frequently reload, and there is no client-side storage, so there is no way to track long-lived "sessions". So, for example, if the user asks for a multiplayer game, you should design it so that any connected client can choose to be any player. If it's turn-based, you can just let any client make any move. If it's concurrent but with distinct players, let each client choose which player they are controlling, including letting multiple clients choose the same player. * If a Gadget contains a README.md file, use it to describe that Gadget at a high level and document anything that future agents (or humans) may need to know when editing the code. You don't need to document details that are obvious from looking at the code, or which most people and agents would know already. +## Exporting files from Gadgets + +Every Gadget UI can be exported to HTML or PDF using platform-owned controls outside the Gadget. Never add print or export UI to a Gadget and never call \`window.print()\`. Browser-mode PDF exports render using print media; HTML, PNG, and JPEG exports render using screen media. When asked to support or improve PDF export, use standard print CSS such as \`@media print\`, \`@page\`, and CSS fragmentation properties so the output remains readable. + +During a browser-mode export, client.js is initialized with another special global variable named \`gadgetExportFormatId\`. This variable is only defined during export; during normal interactive rendering, referencing it directly throws a \`ReferenceError\`. Guard access with \`typeof gadgetExportFormatId !== "undefined"\` or read \`globalThis.gadgetExportFormatId\`. Use \`gadgetExportFormatId\` when the Gadget supports multiple HTML, PDF, PNG, or JPEG export variants. Do not declare or import \`gadgetExportFormatId\` in client.js. + +The Workshop waits for client.js, including any top-level \`await\`, to finish before capturing a browser-mode export. Use top-level \`await\` when the initial UI must load data or otherwise complete asynchronous rendering before capture. For example: + +\`\`\` +let report = await gadget.getReport(); +let exportFormat = globalThis.gadgetExportFormatId; +document.body.className = exportFormat === "compact-pdf" ? "compact" : "interactive"; +document.body.append(renderReport(report)); +\`\`\` + +To add, replace, or disable export formats, server.js may export a class named \`ExportHandler\`, which must extend \`WorkerEntrypoint\`. Its \`getExportFormats(gadget)\` method returns the complete list of formats, and its \`export(gadget, id)\` method returns a \`ReadableStream\` for formats whose mode is \`"server"\`. Read any needed Gadget state before \`export()\` returns; do not capture the borrowed \`gadget\` parameter in the returned stream. If \`getExportFormats(gadget)\` returns only browser-mode formats, do not implement \`export(gadget, id)\`. \`export\` is valid as a JavaScript class method name; write it directly as \`async export(gadget, id)\`, without quoting it or using a computed property. Browser mode supports \`text/html\`, \`application/pdf\`, \`image/png\`, and \`image/jpeg\`; server mode supports any media type. Each format must contain a unique non-empty \`id\`, a \`label\`, a \`mode\`, a \`contentType\`, and a \`fileExtension\` beginning with a dot. Returning an empty list disables export. The Workshop supplies default HTML and PDF formats only when server.js does not export \`ExportHandler\` at all. + +For example, this replaces the defaults with one browser-mode PDF variant and one server-generated CSV format: + +\`\`\` +import { WorkerEntrypoint } from "cloudflare:workers"; + +export class ExportHandler extends WorkerEntrypoint { + async getExportFormats(gadget) { + return [ + { + id: "pdf", + label: "PDF", + mode: "browser", + contentType: "application/pdf", + fileExtension: ".pdf", + }, + { + id: "csv", + label: "CSV", + mode: "server", + contentType: "text/csv", + fileExtension: ".csv", + }, + ]; + } + + async export(gadget, id) { + if (id !== "csv") throw new Error(\`Unknown export format: \${id}\`); + let csv = await gadget.getCsv(); + return new ReadableStream({ + start(controller) { + controller.enqueue(new TextEncoder().encode(csv)); + controller.close(); + }, + }); + } +} +\`\`\` + # Persistent Stubs and \`ctx.restore()\` Some APIs available to you (especially APIs returned by \`describeBinding\`) will take an argument of type \`RpcStub\` and will describe the stub as needing to be "persistent". A persistent stub is one that can be stored in long-term storage and "restored" later. Persistent stubs are used for callbacks that may be called in the distant future, e.g. to implement "hooks" that start the Gadget when certain events occur. diff --git a/packages/workshop-backend/src/browser-export.ts b/packages/workshop-backend/src/browser-export.ts index 49a8a596c..4297d5ae8 100644 --- a/packages/workshop-backend/src/browser-export.ts +++ b/packages/workshop-backend/src/browser-export.ts @@ -11,7 +11,6 @@ import { sendToBrowser, setDocumentTitle, waitForClientModule, - waitForDomSettled, } from "./generated/browser-export-page.js"; import { createExportDeadline, limitExportStream, MAX_EXPORT_BYTES } from "./export-limits"; @@ -22,8 +21,6 @@ type BrowserExportLogFields = { const logger = createLogger({ component: "workshop.browser-export" }); -/** Quiet period indicating that the client has finished its initial DOM updates. */ -const DOM_SETTLE_MS = 250; /** Budget for releasing the browser session once an export has settled. */ const BROWSER_CLOSE_TIMEOUT_MS = 10_000; /** Maximum number of pending Worker-to-browser RPC messages. */ @@ -236,7 +233,6 @@ export async function renderGadgetInBrowser( await page.evaluate(waitForClientModule); const frame = page.mainFrame() as FrameWithIsolatedRealm; const isolatedRealm = frame.isolatedRealm(); - await isolatedRealm.evaluate(waitForDomSettled, DOM_SETTLE_MS); await isolatedRealm.evaluate(setDocumentTitle, documentTitle); switch (format.contentType) { case "application/pdf": diff --git a/packages/workshop-backend/src/overseer.ts b/packages/workshop-backend/src/overseer.ts index 420ada932..98c5f34bc 100644 --- a/packages/workshop-backend/src/overseer.ts +++ b/packages/workshop-backend/src/overseer.ts @@ -2537,7 +2537,7 @@ class OverseerImpl implements AgentHooks { } getGadgetUiBundle(gadgetId: WorkpieceId, chatId?: number): UiBundle | null { - this.prepareGadgetChat(chatId); + this.checkChatExistsAndMaterializeDrafts(chatId); let {ydoc} = this.buildYDoc("current"); if (chatId !== undefined) { @@ -2552,35 +2552,35 @@ class OverseerImpl implements AgentHooks { async getGadgetExportFormats(gadgetId: WorkpieceId, chatId?: number) : Promise { - this.prepareGadgetChat(chatId); - return (await this.#resolveGadgetExportFormats(gadgetId, chatId)).formats; + this.checkChatExistsAndMaterializeDrafts(chatId); + let resolved = await this.#resolveGadgetExportFormats(gadgetId, chatId); + resolved.gadget[Symbol.dispose](); + return resolved.formats; } async exportGadget(gadgetId: WorkpieceId, formatId: string, chatId?: number) : Promise> { - this.prepareGadgetChat(chatId); - let {formats, handler} = await this.#resolveGadgetExportFormats(gadgetId, chatId); + this.checkChatExistsAndMaterializeDrafts(chatId); + let {formats, handler, gadget} = await this.#resolveGadgetExportFormats(gadgetId, chatId); + using exportGadget = gadget; let format = formats.find(candidate => candidate.id === formatId); if (!format) throw new Error(`This Gadget does not support export format: ${formatId}`); if (format.mode === "server") { if (!handler) throw new Error("The Gadget export handler is unavailable."); - using gadget = await this.getGadgetFacet(gadgetId, chatId); - // Cap'n Web and native RPC stubs interoperate at runtime, but their types do not yet. return await exportServerFormat(() => - handler.export(gadget as unknown as NativeRpcStub, format.id)); + handler.export(exportGadget, format.id)); + } else { + let browser = this.env.BROWSER; + if (!browser) throw new Error("Gadget export is not configured for this deployment."); + let bundle = this.getGadgetUiBundle(gadgetId, chatId); + if (!bundle) throw new Error("This Gadget does not have a UI to export."); + let title = this.getGadgetRecord(gadgetId).title; + return renderGadgetInBrowser(browser, bundle.jsCode, title, exportGadget.move(), format); } - - let browser = this.env.BROWSER; - if (!browser) throw new Error("Gadget export is not configured for this deployment."); - let bundle = this.getGadgetUiBundle(gadgetId, chatId); - if (!bundle) throw new Error("This Gadget does not have a UI to export."); - let browserGadget = await this.getGadgetFacet(gadgetId, chatId); - let title = this.getGadgetRecord(gadgetId).title; - return renderGadgetInBrowser(browser, bundle.jsCode, title, browserGadget, format); } - prepareGadgetChat(chatId?: number): void { + checkChatExistsAndMaterializeDrafts(chatId?: number): void { if (chatId !== undefined) { let meta = this.getChatMetaOrThrow(chatId); if (!meta.activeAgent) this.materializeChatDraft(chatId, meta); @@ -2590,16 +2590,22 @@ class OverseerImpl implements AgentHooks { async #resolveGadgetExportFormats(gadgetId: WorkpieceId, chatId?: number): Promise<{ formats: GadgetExportFormat[]; handler: Fetcher | null; + gadget: NativeRpcStub; }> { let handler = this.loadGadgetWorker(gadgetId, chatId) .getEntrypoint(GADGET_EXPORT_ENTRYPOINT); - using gadget = await this.getGadgetFacet(gadgetId, chatId); - // Cap'n Web and native RPC stubs interoperate at runtime, but their types do not yet. - let formats = await readCustomExportFormats( - handler, gadget as unknown as NativeRpcStub); - return formats === null - ? {formats: defaultExportFormats(), handler: null} - : {formats, handler}; + // getGadgetFacet() wraps this native stub for Cap'n Web's type system, but this path invokes + // native Worker RPC and needs its actual runtime type. + let gadget = await this.getGadgetFacet(gadgetId, chatId) as unknown as NativeRpcStub; + try { + let formats = await readCustomExportFormats(handler, gadget); + return formats === null + ? {formats: defaultExportFormats(), handler: null, gadget} + : {formats, handler, gadget}; + } catch (error) { + gadget[Symbol.dispose](); + throw error; + } } // Load a WorkerEntrypoint exported by the gadget, used to implement a hook. From 6569646fe19ea85c35914092477625e8c2f9fdaf Mon Sep 17 00:00:00 2001 From: Max Peterson Date: Mon, 17 Aug 2026 12:03:35 -0700 Subject: [PATCH 8/8] adapt backend build to Vite+ task --- packages/workshop-backend/package.json | 1 - packages/workshop-backend/vite.config.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/workshop-backend/package.json b/packages/workshop-backend/package.json index 9e295e951..9954b6f20 100644 --- a/packages/workshop-backend/package.json +++ b/packages/workshop-backend/package.json @@ -7,7 +7,6 @@ "dev": "echo \"run 'pnpm dev-server' in the root directory instead\" >&2 && exit 1", "deploy": "wrangler deploy", "build:worker": "node build-browser-runtime.mjs && pnpm exec capnweb-validate build --out .wrangler/validate", - "build": "node build-browser-runtime.mjs && node scripts/build-format-blueprints.mjs && tsc --project tsconfig.browser.json && tsc", "clean": "rm -rf dist", "test:integration": "node build-browser-runtime.mjs && node scripts/build-format-blueprints.mjs && vitest run --config vitest.integration.config.ts", "test:run": "node build-browser-runtime.mjs && node scripts/build-format-blueprints.mjs && vitest run && vitest run --config vitest.integration.config.ts", diff --git a/packages/workshop-backend/vite.config.ts b/packages/workshop-backend/vite.config.ts index 0c6d5451f..5f4d4a328 100644 --- a/packages/workshop-backend/vite.config.ts +++ b/packages/workshop-backend/vite.config.ts @@ -28,7 +28,7 @@ export default { * writes into the same package tracking hashes as its input, which vp declines to cache. */ build: { - command: ['node build-browser-runtime.mjs', 'tsc'], + command: ['node build-browser-runtime.mjs', 'tsc --project tsconfig.browser.json', 'tsc'], dependsOn: ['build:format-blueprints'], cache: false, },