summaryrefslogtreecommitdiff
path: root/packages/integrations/cloudflare/src/entrypoints/server.ts
diff options
context:
space:
mode:
authorGravatar Matt Kane <m@mk.gg> 2025-03-31 10:05:44 +0100
committerGravatar GitHub <noreply@github.com> 2025-03-31 10:05:44 +0100
commita9aafec47a4d8a92c826663dca2f9850643651ec (patch)
treed77835a9b422ab431fc8fee2ec6f80efae639472 /packages/integrations/cloudflare/src/entrypoints/server.ts
parent19bd710ad5dd993628626ebd37f75d4d339b08a9 (diff)
downloadastro-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.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$/, ''));