From b4a1065ef35aedf69263fc159b4ec40676cf2d23 Mon Sep 17 00:00:00 2001 From: eti Date: Wed, 5 Aug 2026 01:20:34 +0200 Subject: [PATCH] web: declare the bobbin service binding on App.Platform Signed-off-by: eti --- web/src/app.d.ts | 7 +++++++ web/src/hooks.server.ts | 6 +----- 2 files changed, 8 insertions(+), 5 deletions(-) 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"; -- 2.51.2