diff options
Diffstat (limited to 'packages/integrations/cloudflare/src/entrypoints/server.ts')
-rw-r--r-- | packages/integrations/cloudflare/src/entrypoints/server.ts | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/packages/integrations/cloudflare/src/entrypoints/server.ts b/packages/integrations/cloudflare/src/entrypoints/server.ts index 231dd87fa..b3cc6daf5 100644 --- a/packages/integrations/cloudflare/src/entrypoints/server.ts +++ b/packages/integrations/cloudflare/src/entrypoints/server.ts @@ -26,6 +26,16 @@ export interface Runtime<T extends object = object> { }; } +declare global { + // This is not a real global, but is injected using Vite define to allow us to specify the session binding name in the config. + // eslint-disable-next-line no-var + var __ASTRO_SESSION_BINDING_NAME: string; + + // Just used to pass the KV binding to unstorage. + // eslint-disable-next-line no-var + var __env__: Partial<Env>; +} + export function createExports(manifest: SSRManifest) { const app = new App(manifest); @@ -35,7 +45,12 @@ export function createExports(manifest: SSRManifest) { context: ExecutionContext, ) => { const { pathname } = new URL(request.url); - + const bindingName = globalThis.__ASTRO_SESSION_BINDING_NAME; + // Assigning the KV binding to globalThis allows unstorage to access it for session storage. + // unstorage checks in globalThis and globalThis.__env__ for the binding. + globalThis.__env__ ??= {}; + globalThis.__env__[bindingName] = env[bindingName]; + // static assets fallback, in case default _routes.json is not used if (manifest.assets.has(pathname)) { return env.ASSETS.fetch(request.url.replace(/\.html$/, '')); |