diff --git a/packages/remix-cloudflare/cookieSigning.ts b/packages/remix-cloudflare/crypto.ts similarity index 84% rename from packages/remix-cloudflare/cookieSigning.ts rename to packages/remix-cloudflare/crypto.ts index fed5cef6aed..85448bbb28a 100644 --- a/packages/remix-cloudflare/cookieSigning.ts +++ b/packages/remix-cloudflare/crypto.ts @@ -1,6 +1,8 @@ +import type { SignFunction, UnsignFunction } from "@remix-run/server-runtime"; + const encoder = new TextEncoder(); -export async function sign(value: string, secret: string): Promise { +export const sign: SignFunction = async (value, secret) => { let key = await crypto.subtle.importKey( "raw", encoder.encode(secret), @@ -19,10 +21,7 @@ export async function sign(value: string, secret: string): Promise { return value + "." + hash; } -export async function unsign( - cookie: string, - secret: string -): Promise { +export const unsign: UnsignFunction = async (cookie, secret) => { let key = await crypto.subtle.importKey( "raw", encoder.encode(secret), @@ -49,4 +48,4 @@ function byteStringToUint8Array(byteString: string): Uint8Array { } return array; -} +} \ No newline at end of file diff --git a/packages/remix-cloudflare/globals.d.ts b/packages/remix-cloudflare/globals.d.ts new file mode 100644 index 00000000000..fd0ca2e7f37 --- /dev/null +++ b/packages/remix-cloudflare/globals.d.ts @@ -0,0 +1,9 @@ +declare global { + interface ProcessEnv { + NODE_ENV: "development" | "production" | "test"; + } + + interface WorkerGlobalScope { + process: { env: ProcessEnv }; + } +} \ No newline at end of file diff --git a/packages/remix-cloudflare/globals.ts b/packages/remix-cloudflare/globals.ts deleted file mode 100644 index d10d4f42ff3..00000000000 --- a/packages/remix-cloudflare/globals.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { sign, unsign } from "./cookieSigning"; - -declare global { - interface ProcessEnv { - NODE_ENV: "development" | "production" | "test"; - } - - interface WorkerGlobalScope { - sign: typeof sign; - unsign: typeof unsign; - process: { env: ProcessEnv }; - } -} - -export function installGlobals() { - self.sign = sign; - self.unsign = unsign; -} - -installGlobals(); \ No newline at end of file diff --git a/packages/remix-cloudflare/implementations.ts b/packages/remix-cloudflare/implementations.ts new file mode 100644 index 00000000000..a5b951f83ad --- /dev/null +++ b/packages/remix-cloudflare/implementations.ts @@ -0,0 +1,13 @@ +import { + createCookieFactory, + createCookieSessionStorageFactory, + createMemorySessionStorageFactory, + createSessionStorageFactory, +} from "@remix-run/server-runtime"; + +import { sign, unsign } from "./crypto"; + +export const createCookie = createCookieFactory({ sign, unsign }); +export const createCookieSessionStorage = createCookieSessionStorageFactory(createCookie); +export const createSessionStorage = createSessionStorageFactory(createCookie); +export const createMemorySessionStorage = createMemorySessionStorageFactory(createSessionStorage); diff --git a/packages/remix-cloudflare/index.ts b/packages/remix-cloudflare/index.ts index d558a16d03f..975927cc8e3 100644 --- a/packages/remix-cloudflare/index.ts +++ b/packages/remix-cloudflare/index.ts @@ -6,9 +6,12 @@ export { createCookie, createCookieSessionStorage, createMemorySessionStorage, + createSessionStorage, +} from './implementations'; + +export { createRequestHandler, createSession, - createSessionStorage, isCookie, isSession, json, diff --git a/packages/remix-cloudflare/sessions/KVSessionStorage.ts b/packages/remix-cloudflare/sessions/KVSessionStorage.ts index 6c4221eea74..37aace231f7 100644 --- a/packages/remix-cloudflare/sessions/KVSessionStorage.ts +++ b/packages/remix-cloudflare/sessions/KVSessionStorage.ts @@ -2,7 +2,8 @@ import type { SessionStorage, SessionIdStorageStrategy, } from "@remix-run/server-runtime"; -import { createSessionStorage } from "@remix-run/server-runtime"; + +import { createSessionStorage } from "../implementations"; interface KVSessionStorageOptions { /**