diff --git a/web/src/app.d.ts b/web/src/app.d.ts index 7ca210845..86364211e 100644 --- a/web/src/app.d.ts +++ b/web/src/app.d.ts @@ -9,6 +9,13 @@ declare global { camoEnabled: boolean; }; } + + interface Platform { + // worker service bindings, only present when running on Cloudflare + env?: { + BOBBIN?: { fetch(request: Request): Promise }; + }; + } } } diff --git a/web/src/hooks.server.ts b/web/src/hooks.server.ts index cf28e96d4..3e430aab0 100644 --- a/web/src/hooks.server.ts +++ b/web/src/hooks.server.ts @@ -1,14 +1,10 @@ import type { Handle } from "@sveltejs/kit"; -type BobbinService = { - fetch(request: Request): Promise; -}; - export const handle: Handle = async ({ event, resolve }) => { // Keep bobbin off the public network. In Cloudflare this is a Worker // service binding; the browser only ever sees the web origin. if (event.url.pathname === "/xrpc" || event.url.pathname.startsWith("/xrpc/")) { - const bobbin = (event.platform?.env as { BOBBIN?: BobbinService } | undefined)?.BOBBIN; + const bobbin = event.platform?.env?.BOBBIN; if (bobbin) { const upstream = new URL(event.request.url); upstream.hostname = "bobbin.internal";