diff options
author | 2025-03-31 10:05:44 +0100 | |
---|---|---|
committer | 2025-03-31 10:05:44 +0100 | |
commit | a9aafec47a4d8a92c826663dca2f9850643651ec (patch) | |
tree | d77835a9b422ab431fc8fee2ec6f80efae639472 /packages/integrations/cloudflare/src/entrypoints/server.ts | |
parent | 19bd710ad5dd993628626ebd37f75d4d339b08a9 (diff) | |
download | astro-a9aafec47a4d8a92c826663dca2f9850643651ec.tar.gz astro-a9aafec47a4d8a92c826663dca2f9850643651ec.tar.zst astro-a9aafec47a4d8a92c826663dca2f9850643651ec.zip |
feat(cloudflare): add KV session storage support (#13514)
* feat(cloudflare): add KV session storage support
* Change code block language to JSONC
* Comments
* Use user-defined binding name
* Use createCodegenDir
* Remove unused import
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$/, '')); |