summaryrefslogtreecommitdiff
path: root/packages/integrations/cloudflare/src/entrypoints/server.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/cloudflare/src/entrypoints/server.ts')
-rw-r--r--packages/integrations/cloudflare/src/entrypoints/server.ts17
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$/, ''));