diff --git a/packages/remix-node/cookieSigning.ts b/packages/remix-node/cookieSigning.ts deleted file mode 100644 index 10c56a71aad..00000000000 --- a/packages/remix-node/cookieSigning.ts +++ /dev/null @@ -1,16 +0,0 @@ -import cookieSignature from "cookie-signature"; -import type { - InternalSignFunctionDoNotUseMe, - InternalUnsignFunctionDoNotUseMe, -} from "@remix-run/server-runtime/cookieSigning"; - -export const sign: InternalSignFunctionDoNotUseMe = async (value, secret) => { - return cookieSignature.sign(value, secret); -}; - -export const unsign: InternalUnsignFunctionDoNotUseMe = async ( - signed: string, - secret: string -) => { - return cookieSignature.unsign(signed, secret); -}; diff --git a/packages/remix-node/crypto.ts b/packages/remix-node/crypto.ts new file mode 100644 index 00000000000..557b370b849 --- /dev/null +++ b/packages/remix-node/crypto.ts @@ -0,0 +1,16 @@ +import cookieSignature from "cookie-signature"; +import type { + SignFunction, + UnsignFunction, +} from "@remix-run/server-runtime"; + +export const sign: SignFunction = async (value, secret) => { + return cookieSignature.sign(value, secret); +}; + +export const unsign: UnsignFunction = async ( + signed: string, + secret: string +) => { + return cookieSignature.unsign(signed, secret); +}; \ No newline at end of file diff --git a/packages/remix-node/globals.ts b/packages/remix-node/globals.ts index 4a3a94090a1..dbb00e88be1 100644 --- a/packages/remix-node/globals.ts +++ b/packages/remix-node/globals.ts @@ -1,11 +1,6 @@ -import type { - InternalSignFunctionDoNotUseMe, - InternalUnsignFunctionDoNotUseMe, -} from "@remix-run/server-runtime/cookieSigning"; import { Blob as NodeBlob, File as NodeFile } from "@web-std/file"; import { atob, btoa } from "./base64"; -import { sign as remixSign, unsign as remixUnsign } from "./cookieSigning"; import { Headers as NodeHeaders, Request as NodeRequest, @@ -32,11 +27,6 @@ declare global { Response: typeof Response; fetch: typeof fetch; FormData: typeof FormData; - - // TODO: Once node v16 is available on AWS we should remove these globals - // and provide the webcrypto API instead. - sign: InternalSignFunctionDoNotUseMe; - unsign: InternalUnsignFunctionDoNotUseMe; } } } @@ -53,7 +43,4 @@ export function installGlobals() { global.Response = NodeResponse as unknown as typeof Response; global.fetch = nodeFetch as unknown as typeof fetch; global.FormData = NodeFormData as unknown as typeof FormData; - - global.sign = remixSign; - global.unsign = remixUnsign; } diff --git a/packages/remix-node/implementations.ts b/packages/remix-node/implementations.ts new file mode 100644 index 00000000000..a5b951f83ad --- /dev/null +++ b/packages/remix-node/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-node/index.ts b/packages/remix-node/index.ts index dcc86ffed7a..96a1428a39b 100644 --- a/packages/remix-node/index.ts +++ b/packages/remix-node/index.ts @@ -31,9 +31,12 @@ export { createCookie, createCookieSessionStorage, createMemorySessionStorage, + createSessionStorage, +} from './implementations'; + +export { createRequestHandler, createSession, - createSessionStorage, isCookie, isSession, json, diff --git a/packages/remix-node/sessions/fileStorage.ts b/packages/remix-node/sessions/fileStorage.ts index ca0f94a3694..da85cbd3745 100644 --- a/packages/remix-node/sessions/fileStorage.ts +++ b/packages/remix-node/sessions/fileStorage.ts @@ -5,7 +5,8 @@ import type { SessionStorage, SessionIdStorageStrategy, } from "@remix-run/server-runtime"; -import { createSessionStorage } from "@remix-run/server-runtime"; + +import { createSessionStorage } from "../implementations"; interface FileSessionStorageOptions { /**