From eb1acd3e1fa9fb7b48278c700ea8dc5b58815bb5 Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Sat, 4 Apr 2026 22:11:10 -0400 Subject: [PATCH 1/3] fix(corp): add corp header --- astro.config.mjs | 5 +++-- public/_headers | 3 ++- router/src/index.ts | 3 ++- src/components/WebContainer/WebContainer.astro | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/astro.config.mjs b/astro.config.mjs index 49c2672..a4d9502 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -14,8 +14,9 @@ export default defineConfig({ outDir: "./dist/docs/", server: { headers: { - 'Cross-Origin-Embedder-Policy': 'credentialless', - 'Cross-Origin-Opener-Policy': 'same-origin' + 'Cross-Origin-Embedder-Policy': 'require-corp', + 'Cross-Origin-Opener-Policy': 'same-origin', + 'Cross-Origin-Resource-Policy': 'cross-origin' } }, integrations: [ diff --git a/public/_headers b/public/_headers index 2a351fb..458cae3 100644 --- a/public/_headers +++ b/public/_headers @@ -1,3 +1,4 @@ /* - Cross-Origin-Embedder-Policy: credentialless + Cross-Origin-Embedder-Policy: require-corp Cross-Origin-Opener-Policy: same-origin + Cross-Origin-Resource-Policy: cross-origin diff --git a/router/src/index.ts b/router/src/index.ts index 74e783d..3a47d6d 100644 --- a/router/src/index.ts +++ b/router/src/index.ts @@ -7,8 +7,9 @@ export default { if (url.pathname.startsWith("/docs")) { const response = await fetch(new URL(url.pathname, "https://docs.bomb.sh/")); const headers = new Headers(response.headers); - headers.set("Cross-Origin-Embedder-Policy", "credentialless"); + headers.set("Cross-Origin-Embedder-Policy", "require-corp"); headers.set("Cross-Origin-Opener-Policy", "same-origin"); + headers.set("Cross-Origin-Resource-Policy", "cross-origin"); return new Response(response.body, { status: response.status, statusText: response.statusText, diff --git a/src/components/WebContainer/WebContainer.astro b/src/components/WebContainer/WebContainer.astro index a775af1..dca9ff8 100644 --- a/src/components/WebContainer/WebContainer.astro +++ b/src/components/WebContainer/WebContainer.astro @@ -20,7 +20,7 @@ const { name } = Astro.props; let bootError: string | null = null; try { - host = await WebContainer.boot({ coep: 'credentialless', workdirName: 'demo' }); + host = await WebContainer.boot({ coep: 'require-corp', workdirName: 'demo' }); const base = (import.meta.env.BASE_URL || '/').replace(/\/?$/, ''); const snapshotUrl = `${base}/snapshot`; const snapshotResponse = await fetch(snapshotUrl); From d6057bf3a58fd329c10cdbdd536790221c6e781f Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Sat, 4 Apr 2026 22:13:06 -0400 Subject: [PATCH 2/3] fix(preview): add wrangler to package --- package.json | 3 ++- pnpm-lock.yaml | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index d0e1506..be80e0a 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,8 @@ "starlight-sidebar-topics": "^0.6.2" }, "devDependencies": { - "tinyexec": "^1.0.2" + "tinyexec": "^1.0.2", + "wrangler": "^4.14.4" }, "pnpm": { "onlyBuiltDependencies": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 147fce5..ce5be6c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -54,6 +54,9 @@ importers: tinyexec: specifier: ^1.0.2 version: 1.0.2 + wrangler: + specifier: ^4.14.4 + version: 4.80.0(@cloudflare/workers-types@4.20260405.1) router: devDependencies: From 5724155e422581f6ee40873889290216165c2b78 Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Sat, 4 Apr 2026 22:22:05 -0400 Subject: [PATCH 3/3] ref(router): redirect to subdomain --- router/src/index.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/router/src/index.ts b/router/src/index.ts index 3a47d6d..1c12431 100644 --- a/router/src/index.ts +++ b/router/src/index.ts @@ -1,5 +1,11 @@ export interface Env {} +const HEADERS = { + "Cross-Origin-Embedder-Policy": "require-corp", + "Cross-Origin-Opener-Policy": "same-origin", + "Cross-Origin-Resource-Policy": "cross-origin" +} + export default { async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise { const url = new URL(request.url); @@ -7,9 +13,9 @@ export default { if (url.pathname.startsWith("/docs")) { const response = await fetch(new URL(url.pathname, "https://docs.bomb.sh/")); const headers = new Headers(response.headers); - headers.set("Cross-Origin-Embedder-Policy", "require-corp"); - headers.set("Cross-Origin-Opener-Policy", "same-origin"); - headers.set("Cross-Origin-Resource-Policy", "cross-origin"); + for (const [name, value] of Object.entries(HEADERS)) { + headers.set(name, value); + } return new Response(response.body, { status: response.status, statusText: response.statusText, @@ -17,6 +23,6 @@ export default { }); } - return fetch(url); + return Response.redirect(`https://bomb.sh/docs${url.pathname}`, 301); }, -} satisfies ExportedHandler; \ No newline at end of file +} satisfies ExportedHandler;