@shopify/remix-oxygen 1.0.0-alpha.2 → 1.0.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -52,22 +52,10 @@ var createMemorySessionStorage = serverRuntime.createMemorySessionStorageFactory
52
52
  function createRequestHandler({
53
53
  build,
54
54
  mode,
55
- getLoadContext,
56
- shouldProxyAsset
55
+ getLoadContext
57
56
  }) {
58
57
  const handleRequest = serverRuntime.createRequestHandler(build, mode);
59
58
  return async (request) => {
60
- const url = new URL(request.url);
61
- if (mode === "production" && build.publicPath !== void 0 && shouldProxyAsset?.(request.url)) {
62
- const newOriginAndPathPrefix = (build.publicPath || "").replace(
63
- /\/build\/$/,
64
- ""
65
- );
66
- return fetch(
67
- request.url.replace(url.origin, newOriginAndPathPrefix),
68
- request
69
- );
70
- }
71
59
  return handleRequest(
72
60
  request,
73
61
  await getLoadContext?.(request)
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/implementations.ts","../../src/crypto.ts","../../src/server.ts","../../src/index.ts"],"names":[],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACHP,IAAM,UAAU,IAAI,YAAY;AAEzB,IAAM,OAAqB,OAAO,OAAO,WAAW;AACzD,QAAM,MAAM,MAAM,UAAU,QAAQ,CAAC,MAAM,CAAC;AAC5C,QAAM,OAAO,QAAQ,OAAO,KAAK;AACjC,QAAM,YAAY,MAAM,OAAO,OAAO,KAAK,QAAQ,KAAK,IAAI;AAC5D,QAAM,OAAO,KAAK,OAAO,aAAa,GAAG,IAAI,WAAW,SAAS,CAAC,CAAC,EAAE;AAAA,IACnE;AAAA,IACA;AAAA,EACF;AAEA,SAAO,QAAQ,MAAM;AACvB;AAEO,IAAM,SAAyB,OAAO,QAAQ,WAAW;AAC9D,QAAM,QAAQ,OAAO,YAAY,GAAG;AACpC,QAAM,QAAQ,OAAO,MAAM,GAAG,KAAK;AACnC,QAAM,OAAO,OAAO,MAAM,QAAQ,CAAC;AAEnC,QAAM,MAAM,MAAM,UAAU,QAAQ,CAAC,QAAQ,CAAC;AAC9C,QAAM,OAAO,QAAQ,OAAO,KAAK;AACjC,QAAM,YAAY,uBAAuB,KAAK,IAAI,CAAC;AACnD,QAAM,QAAQ,MAAM,OAAO,OAAO,OAAO,QAAQ,KAAK,WAAW,IAAI;AAErE,SAAO,QAAQ,QAAQ;AACzB;AAEA,eAAe,UACb,QACA,QACoB;AACpB,QAAM,MAAM,MAAM,OAAO,OAAO;AAAA,IAC9B;AAAA,IACA,QAAQ,OAAO,MAAM;AAAA,IACrB,EAAC,MAAM,QAAQ,MAAM,UAAS;AAAA,IAC9B;AAAA,IACA;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,uBAAuB,YAAgC;AAC9D,QAAM,QAAQ,IAAI,WAAW,WAAW,MAAM;AAE9C,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,UAAM,KAAK,WAAW,WAAW,CAAC;AAAA,EACpC;AAEA,SAAO;AACT;;;AD3CO,IAAM,eAAe,oBAAoB,EAAC,MAAM,OAAM,CAAC;AACvD,IAAM,6BACX,kCAAkC,YAAY;AACzC,IAAM,uBAAuB,4BAA4B,YAAY;AACrE,IAAM,6BACX,kCAAkC,oBAAoB;;;AEdxD;AAAA,EACE,wBAAwB;AAAA,OAGnB;AAEA,SAAS,qBAAwC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAkBG;AACD,QAAM,gBAAgB,0BAA0B,OAAO,IAAI;AAE3D,SAAO,OAAO,YAAqB;AACjC,UAAM,MAAM,IAAI,IAAI,QAAQ,GAAG;AAE/B,QACE,SAAS,gBACT,MAAM,eAAe,UACrB,mBAAmB,QAAQ,GAAG,GAC9B;AAOA,YAAM,0BAA0B,MAAM,cAAc,IAAI;AAAA,QACtD;AAAA,QACA;AAAA,MACF;AAEA,aAAO;AAAA,QACL,QAAQ,IAAI,QAAQ,IAAI,QAAQ,sBAAsB;AAAA,QACtD;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACC,MAAM,iBAAiB,OAAO;AAAA,IACjC;AAAA,EACF;AACF;AAEO,SAAS,WAAW,SAAkB;AAC3C,SAAO,QAAQ,QAAQ,IAAI,iBAAiB,KAAK;AACnD;;;ACzDA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK","sourcesContent":["import {\n createCookieFactory,\n createCookieSessionStorageFactory,\n createMemorySessionStorageFactory,\n createSessionStorageFactory,\n} from '@remix-run/server-runtime';\n\nimport {sign, unsign} from './crypto';\n\nexport const createCookie = createCookieFactory({sign, unsign});\nexport const createCookieSessionStorage =\n createCookieSessionStorageFactory(createCookie);\nexport const createSessionStorage = createSessionStorageFactory(createCookie);\nexport const createMemorySessionStorage =\n createMemorySessionStorageFactory(createSessionStorage);\n","import type {SignFunction, UnsignFunction} from '@remix-run/server-runtime';\n\nconst encoder = new TextEncoder();\n\nexport const sign: SignFunction = async (value, secret) => {\n const key = await createKey(secret, ['sign']);\n const data = encoder.encode(value);\n const signature = await crypto.subtle.sign('HMAC', key, data);\n const hash = btoa(String.fromCharCode(...new Uint8Array(signature))).replace(\n /=+$/,\n '',\n );\n\n return value + '.' + hash;\n};\n\nexport const unsign: UnsignFunction = async (signed, secret) => {\n const index = signed.lastIndexOf('.');\n const value = signed.slice(0, index);\n const hash = signed.slice(index + 1);\n\n const key = await createKey(secret, ['verify']);\n const data = encoder.encode(value);\n const signature = byteStringToUint8Array(atob(hash));\n const valid = await crypto.subtle.verify('HMAC', key, signature, data);\n\n return valid ? value : false;\n};\n\nasync function createKey(\n secret: string,\n usages: CryptoKey['usages'],\n): Promise<CryptoKey> {\n const key = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(secret),\n {name: 'HMAC', hash: 'SHA-256'},\n false,\n usages,\n );\n\n return key;\n}\n\nfunction byteStringToUint8Array(byteString: string): Uint8Array {\n const array = new Uint8Array(byteString.length);\n\n for (let i = 0; i < byteString.length; i++) {\n array[i] = byteString.charCodeAt(i);\n }\n\n return array;\n}\n","import {\n createRequestHandler as createRemixRequestHandler,\n type AppLoadContext,\n type ServerBuild,\n} from '@remix-run/server-runtime';\n\nexport function createRequestHandler<Context = unknown>({\n build,\n mode,\n getLoadContext,\n shouldProxyAsset,\n}: {\n build: ServerBuild;\n mode?: string;\n getLoadContext?: (request: Request) => Promise<Context> | Context;\n /**\n * By default, Hydrogen will prefix all static assets with a CDN url.\n * If you need to serve static assets from the same domain or from the root,\n * then update the `shouldProxyAsset: (url: string) => boolean` function below\n * to return `true` when the url (pathname) matches your asset.\n *\n * @example\n * ```ts\n * shouldProxyAsset(url) {\n * return new URL(url).pathname === '/robots.txt';\n * }\n * ```\n */\n shouldProxyAsset?: (url: string) => boolean;\n}) {\n const handleRequest = createRemixRequestHandler(build, mode);\n\n return async (request: Request) => {\n const url = new URL(request.url);\n\n if (\n mode === 'production' &&\n build.publicPath !== undefined &&\n shouldProxyAsset?.(request.url)\n ) {\n /**\n * Use the assetPrefix (publicPath) as the origin. Note that Remix expects client assets to be\n * prefixed with `/build/*`, and as such, `/build/` is included in the Oxygen-created `assetPrefix`.\n * However, we need strip out the leading `/build/` for this use case, as developers may wish to\n * serve a static asset from the root `/public` folder (one level up from `/build`).\n */\n const newOriginAndPathPrefix = (build.publicPath || '').replace(\n /\\/build\\/$/,\n '',\n );\n\n return fetch(\n request.url.replace(url.origin, newOriginAndPathPrefix),\n request,\n );\n }\n\n return handleRequest(\n request,\n (await getLoadContext?.(request)) as AppLoadContext,\n );\n };\n}\n\nexport function getBuyerIp(request: Request) {\n return request.headers.get('oxygen-buyer-ip') ?? undefined;\n}\n","export {\n createCookie,\n createCookieSessionStorage,\n createMemorySessionStorage,\n createSessionStorage,\n} from './implementations';\n\nexport {createRequestHandler, getBuyerIp} from './server';\n\nexport {\n createSession,\n isCookie,\n isSession,\n json,\n MaxPartSizeExceededError,\n redirect,\n defer,\n unstable_composeUploadHandlers,\n unstable_createMemoryUploadHandler,\n unstable_parseMultipartFormData,\n} from '@remix-run/server-runtime';\n\nexport type {\n ActionArgs,\n ActionFunction,\n AppData,\n AppLoadContext,\n Cookie,\n CookieOptions,\n CookieParseOptions,\n CookieSerializeOptions,\n CookieSignatureOptions,\n DataFunctionArgs,\n EntryContext,\n ErrorBoundaryComponent,\n HandleDataRequestFunction,\n HandleDocumentRequestFunction,\n HeadersFunction,\n HtmlLinkDescriptor,\n HtmlMetaDescriptor,\n LinkDescriptor,\n LinksFunction,\n LoaderFunction,\n LoaderArgs,\n MemoryUploadHandlerFilterArgs,\n MemoryUploadHandlerOptions,\n MetaDescriptor,\n MetaFunction,\n PageLinkDescriptor,\n RequestHandler,\n RouteComponent,\n RouteHandle,\n SerializeFrom,\n ServerBuild,\n ServerEntryModule,\n Session,\n SessionData,\n SessionIdStorageStrategy,\n SessionStorage,\n SignFunction,\n TypedResponse,\n UnsignFunction,\n UploadHandlerPart,\n UploadHandler,\n} from '@remix-run/server-runtime';\n"]}
1
+ {"version":3,"sources":["../../src/implementations.ts","../../src/crypto.ts","../../src/server.ts","../../src/index.ts"],"names":[],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACHP,IAAM,UAAU,IAAI,YAAY;AAEzB,IAAM,OAAqB,OAAO,OAAO,WAAW;AACzD,QAAM,MAAM,MAAM,UAAU,QAAQ,CAAC,MAAM,CAAC;AAC5C,QAAM,OAAO,QAAQ,OAAO,KAAK;AACjC,QAAM,YAAY,MAAM,OAAO,OAAO,KAAK,QAAQ,KAAK,IAAI;AAC5D,QAAM,OAAO,KAAK,OAAO,aAAa,GAAG,IAAI,WAAW,SAAS,CAAC,CAAC,EAAE;AAAA,IACnE;AAAA,IACA;AAAA,EACF;AAEA,SAAO,QAAQ,MAAM;AACvB;AAEO,IAAM,SAAyB,OAAO,QAAQ,WAAW;AAC9D,QAAM,QAAQ,OAAO,YAAY,GAAG;AACpC,QAAM,QAAQ,OAAO,MAAM,GAAG,KAAK;AACnC,QAAM,OAAO,OAAO,MAAM,QAAQ,CAAC;AAEnC,QAAM,MAAM,MAAM,UAAU,QAAQ,CAAC,QAAQ,CAAC;AAC9C,QAAM,OAAO,QAAQ,OAAO,KAAK;AACjC,QAAM,YAAY,uBAAuB,KAAK,IAAI,CAAC;AACnD,QAAM,QAAQ,MAAM,OAAO,OAAO,OAAO,QAAQ,KAAK,WAAW,IAAI;AAErE,SAAO,QAAQ,QAAQ;AACzB;AAEA,eAAe,UACb,QACA,QACoB;AACpB,QAAM,MAAM,MAAM,OAAO,OAAO;AAAA,IAC9B;AAAA,IACA,QAAQ,OAAO,MAAM;AAAA,IACrB,EAAC,MAAM,QAAQ,MAAM,UAAS;AAAA,IAC9B;AAAA,IACA;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,uBAAuB,YAAgC;AAC9D,QAAM,QAAQ,IAAI,WAAW,WAAW,MAAM;AAE9C,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,UAAM,KAAK,WAAW,WAAW,CAAC;AAAA,EACpC;AAEA,SAAO;AACT;;;AD3CO,IAAM,eAAe,oBAAoB,EAAC,MAAM,OAAM,CAAC;AACvD,IAAM,6BACX,kCAAkC,YAAY;AACzC,IAAM,uBAAuB,4BAA4B,YAAY;AACrE,IAAM,6BACX,kCAAkC,oBAAoB;;;AEdxD;AAAA,EACE,wBAAwB;AAAA,OAGnB;AAEA,SAAS,qBAAwC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,gBAAgB,0BAA0B,OAAO,IAAI;AAE3D,SAAO,OAAO,YAAqB;AACjC,WAAO;AAAA,MACL;AAAA,MACC,MAAM,iBAAiB,OAAO;AAAA,IACjC;AAAA,EACF;AACF;AAEO,SAAS,WAAW,SAAkB;AAC3C,SAAO,QAAQ,QAAQ,IAAI,iBAAiB,KAAK;AACnD;;;AClBA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK","sourcesContent":["import {\n createCookieFactory,\n createCookieSessionStorageFactory,\n createMemorySessionStorageFactory,\n createSessionStorageFactory,\n} from '@remix-run/server-runtime';\n\nimport {sign, unsign} from './crypto';\n\nexport const createCookie = createCookieFactory({sign, unsign});\nexport const createCookieSessionStorage =\n createCookieSessionStorageFactory(createCookie);\nexport const createSessionStorage = createSessionStorageFactory(createCookie);\nexport const createMemorySessionStorage =\n createMemorySessionStorageFactory(createSessionStorage);\n","import type {SignFunction, UnsignFunction} from '@remix-run/server-runtime';\n\nconst encoder = new TextEncoder();\n\nexport const sign: SignFunction = async (value, secret) => {\n const key = await createKey(secret, ['sign']);\n const data = encoder.encode(value);\n const signature = await crypto.subtle.sign('HMAC', key, data);\n const hash = btoa(String.fromCharCode(...new Uint8Array(signature))).replace(\n /=+$/,\n '',\n );\n\n return value + '.' + hash;\n};\n\nexport const unsign: UnsignFunction = async (signed, secret) => {\n const index = signed.lastIndexOf('.');\n const value = signed.slice(0, index);\n const hash = signed.slice(index + 1);\n\n const key = await createKey(secret, ['verify']);\n const data = encoder.encode(value);\n const signature = byteStringToUint8Array(atob(hash));\n const valid = await crypto.subtle.verify('HMAC', key, signature, data);\n\n return valid ? value : false;\n};\n\nasync function createKey(\n secret: string,\n usages: CryptoKey['usages'],\n): Promise<CryptoKey> {\n const key = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(secret),\n {name: 'HMAC', hash: 'SHA-256'},\n false,\n usages,\n );\n\n return key;\n}\n\nfunction byteStringToUint8Array(byteString: string): Uint8Array {\n const array = new Uint8Array(byteString.length);\n\n for (let i = 0; i < byteString.length; i++) {\n array[i] = byteString.charCodeAt(i);\n }\n\n return array;\n}\n","import {\n createRequestHandler as createRemixRequestHandler,\n type AppLoadContext,\n type ServerBuild,\n} from '@remix-run/server-runtime';\n\nexport function createRequestHandler<Context = unknown>({\n build,\n mode,\n getLoadContext,\n}: {\n build: ServerBuild;\n mode?: string;\n getLoadContext?: (request: Request) => Promise<Context> | Context;\n}) {\n const handleRequest = createRemixRequestHandler(build, mode);\n\n return async (request: Request) => {\n return handleRequest(\n request,\n (await getLoadContext?.(request)) as AppLoadContext,\n );\n };\n}\n\nexport function getBuyerIp(request: Request) {\n return request.headers.get('oxygen-buyer-ip') ?? undefined;\n}\n","export {\n createCookie,\n createCookieSessionStorage,\n createMemorySessionStorage,\n createSessionStorage,\n} from './implementations';\n\nexport {createRequestHandler, getBuyerIp} from './server';\n\nexport {\n createSession,\n isCookie,\n isSession,\n json,\n MaxPartSizeExceededError,\n redirect,\n defer,\n unstable_composeUploadHandlers,\n unstable_createMemoryUploadHandler,\n unstable_parseMultipartFormData,\n} from '@remix-run/server-runtime';\n\nexport type {\n ActionArgs,\n ActionFunction,\n AppData,\n AppLoadContext,\n Cookie,\n CookieOptions,\n CookieParseOptions,\n CookieSerializeOptions,\n CookieSignatureOptions,\n DataFunctionArgs,\n EntryContext,\n ErrorBoundaryComponent,\n HandleDataRequestFunction,\n HandleDocumentRequestFunction,\n HeadersFunction,\n HtmlLinkDescriptor,\n HtmlMetaDescriptor,\n LinkDescriptor,\n LinksFunction,\n LoaderFunction,\n LoaderArgs,\n MemoryUploadHandlerFilterArgs,\n MemoryUploadHandlerOptions,\n MetaDescriptor,\n MetaFunction,\n PageLinkDescriptor,\n RequestHandler,\n RouteComponent,\n RouteHandle,\n SerializeFrom,\n ServerBuild,\n ServerEntryModule,\n Session,\n SessionData,\n SessionIdStorageStrategy,\n SessionStorage,\n SignFunction,\n TypedResponse,\n UnsignFunction,\n UploadHandlerPart,\n UploadHandler,\n} from '@remix-run/server-runtime';\n"]}
@@ -51,22 +51,10 @@ var createMemorySessionStorage = createMemorySessionStorageFactory(createSession
51
51
  function createRequestHandler({
52
52
  build,
53
53
  mode,
54
- getLoadContext,
55
- shouldProxyAsset
54
+ getLoadContext
56
55
  }) {
57
56
  const handleRequest = createRequestHandler$1(build, mode);
58
57
  return async (request) => {
59
- const url = new URL(request.url);
60
- if (mode === "production" && build.publicPath !== void 0 && shouldProxyAsset?.(request.url)) {
61
- const newOriginAndPathPrefix = (build.publicPath || "").replace(
62
- /\/build\/$/,
63
- ""
64
- );
65
- return fetch(
66
- request.url.replace(url.origin, newOriginAndPathPrefix),
67
- request
68
- );
69
- }
70
58
  return handleRequest(
71
59
  request,
72
60
  await getLoadContext?.(request)
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/implementations.ts","../../src/crypto.ts","../../src/server.ts","../../src/index.ts"],"names":[],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACHP,IAAM,UAAU,IAAI,YAAY;AAEzB,IAAM,OAAqB,OAAO,OAAO,WAAW;AACzD,QAAM,MAAM,MAAM,UAAU,QAAQ,CAAC,MAAM,CAAC;AAC5C,QAAM,OAAO,QAAQ,OAAO,KAAK;AACjC,QAAM,YAAY,MAAM,OAAO,OAAO,KAAK,QAAQ,KAAK,IAAI;AAC5D,QAAM,OAAO,KAAK,OAAO,aAAa,GAAG,IAAI,WAAW,SAAS,CAAC,CAAC,EAAE;AAAA,IACnE;AAAA,IACA;AAAA,EACF;AAEA,SAAO,QAAQ,MAAM;AACvB;AAEO,IAAM,SAAyB,OAAO,QAAQ,WAAW;AAC9D,QAAM,QAAQ,OAAO,YAAY,GAAG;AACpC,QAAM,QAAQ,OAAO,MAAM,GAAG,KAAK;AACnC,QAAM,OAAO,OAAO,MAAM,QAAQ,CAAC;AAEnC,QAAM,MAAM,MAAM,UAAU,QAAQ,CAAC,QAAQ,CAAC;AAC9C,QAAM,OAAO,QAAQ,OAAO,KAAK;AACjC,QAAM,YAAY,uBAAuB,KAAK,IAAI,CAAC;AACnD,QAAM,QAAQ,MAAM,OAAO,OAAO,OAAO,QAAQ,KAAK,WAAW,IAAI;AAErE,SAAO,QAAQ,QAAQ;AACzB;AAEA,eAAe,UACb,QACA,QACoB;AACpB,QAAM,MAAM,MAAM,OAAO,OAAO;AAAA,IAC9B;AAAA,IACA,QAAQ,OAAO,MAAM;AAAA,IACrB,EAAC,MAAM,QAAQ,MAAM,UAAS;AAAA,IAC9B;AAAA,IACA;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,uBAAuB,YAAgC;AAC9D,QAAM,QAAQ,IAAI,WAAW,WAAW,MAAM;AAE9C,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,UAAM,KAAK,WAAW,WAAW,CAAC;AAAA,EACpC;AAEA,SAAO;AACT;;;AD3CO,IAAM,eAAe,oBAAoB,EAAC,MAAM,OAAM,CAAC;AACvD,IAAM,6BACX,kCAAkC,YAAY;AACzC,IAAM,uBAAuB,4BAA4B,YAAY;AACrE,IAAM,6BACX,kCAAkC,oBAAoB;;;AEdxD;AAAA,EACE,wBAAwB;AAAA,OAGnB;AAEA,SAAS,qBAAwC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAkBG;AACD,QAAM,gBAAgB,0BAA0B,OAAO,IAAI;AAE3D,SAAO,OAAO,YAAqB;AACjC,UAAM,MAAM,IAAI,IAAI,QAAQ,GAAG;AAE/B,QACE,SAAS,gBACT,MAAM,eAAe,UACrB,mBAAmB,QAAQ,GAAG,GAC9B;AAOA,YAAM,0BAA0B,MAAM,cAAc,IAAI;AAAA,QACtD;AAAA,QACA;AAAA,MACF;AAEA,aAAO;AAAA,QACL,QAAQ,IAAI,QAAQ,IAAI,QAAQ,sBAAsB;AAAA,QACtD;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACC,MAAM,iBAAiB,OAAO;AAAA,IACjC;AAAA,EACF;AACF;AAEO,SAAS,WAAW,SAAkB;AAC3C,SAAO,QAAQ,QAAQ,IAAI,iBAAiB,KAAK;AACnD;;;ACzDA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK","sourcesContent":["import {\n createCookieFactory,\n createCookieSessionStorageFactory,\n createMemorySessionStorageFactory,\n createSessionStorageFactory,\n} from '@remix-run/server-runtime';\n\nimport {sign, unsign} from './crypto';\n\nexport const createCookie = createCookieFactory({sign, unsign});\nexport const createCookieSessionStorage =\n createCookieSessionStorageFactory(createCookie);\nexport const createSessionStorage = createSessionStorageFactory(createCookie);\nexport const createMemorySessionStorage =\n createMemorySessionStorageFactory(createSessionStorage);\n","import type {SignFunction, UnsignFunction} from '@remix-run/server-runtime';\n\nconst encoder = new TextEncoder();\n\nexport const sign: SignFunction = async (value, secret) => {\n const key = await createKey(secret, ['sign']);\n const data = encoder.encode(value);\n const signature = await crypto.subtle.sign('HMAC', key, data);\n const hash = btoa(String.fromCharCode(...new Uint8Array(signature))).replace(\n /=+$/,\n '',\n );\n\n return value + '.' + hash;\n};\n\nexport const unsign: UnsignFunction = async (signed, secret) => {\n const index = signed.lastIndexOf('.');\n const value = signed.slice(0, index);\n const hash = signed.slice(index + 1);\n\n const key = await createKey(secret, ['verify']);\n const data = encoder.encode(value);\n const signature = byteStringToUint8Array(atob(hash));\n const valid = await crypto.subtle.verify('HMAC', key, signature, data);\n\n return valid ? value : false;\n};\n\nasync function createKey(\n secret: string,\n usages: CryptoKey['usages'],\n): Promise<CryptoKey> {\n const key = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(secret),\n {name: 'HMAC', hash: 'SHA-256'},\n false,\n usages,\n );\n\n return key;\n}\n\nfunction byteStringToUint8Array(byteString: string): Uint8Array {\n const array = new Uint8Array(byteString.length);\n\n for (let i = 0; i < byteString.length; i++) {\n array[i] = byteString.charCodeAt(i);\n }\n\n return array;\n}\n","import {\n createRequestHandler as createRemixRequestHandler,\n type AppLoadContext,\n type ServerBuild,\n} from '@remix-run/server-runtime';\n\nexport function createRequestHandler<Context = unknown>({\n build,\n mode,\n getLoadContext,\n shouldProxyAsset,\n}: {\n build: ServerBuild;\n mode?: string;\n getLoadContext?: (request: Request) => Promise<Context> | Context;\n /**\n * By default, Hydrogen will prefix all static assets with a CDN url.\n * If you need to serve static assets from the same domain or from the root,\n * then update the `shouldProxyAsset: (url: string) => boolean` function below\n * to return `true` when the url (pathname) matches your asset.\n *\n * @example\n * ```ts\n * shouldProxyAsset(url) {\n * return new URL(url).pathname === '/robots.txt';\n * }\n * ```\n */\n shouldProxyAsset?: (url: string) => boolean;\n}) {\n const handleRequest = createRemixRequestHandler(build, mode);\n\n return async (request: Request) => {\n const url = new URL(request.url);\n\n if (\n mode === 'production' &&\n build.publicPath !== undefined &&\n shouldProxyAsset?.(request.url)\n ) {\n /**\n * Use the assetPrefix (publicPath) as the origin. Note that Remix expects client assets to be\n * prefixed with `/build/*`, and as such, `/build/` is included in the Oxygen-created `assetPrefix`.\n * However, we need strip out the leading `/build/` for this use case, as developers may wish to\n * serve a static asset from the root `/public` folder (one level up from `/build`).\n */\n const newOriginAndPathPrefix = (build.publicPath || '').replace(\n /\\/build\\/$/,\n '',\n );\n\n return fetch(\n request.url.replace(url.origin, newOriginAndPathPrefix),\n request,\n );\n }\n\n return handleRequest(\n request,\n (await getLoadContext?.(request)) as AppLoadContext,\n );\n };\n}\n\nexport function getBuyerIp(request: Request) {\n return request.headers.get('oxygen-buyer-ip') ?? undefined;\n}\n","export {\n createCookie,\n createCookieSessionStorage,\n createMemorySessionStorage,\n createSessionStorage,\n} from './implementations';\n\nexport {createRequestHandler, getBuyerIp} from './server';\n\nexport {\n createSession,\n isCookie,\n isSession,\n json,\n MaxPartSizeExceededError,\n redirect,\n defer,\n unstable_composeUploadHandlers,\n unstable_createMemoryUploadHandler,\n unstable_parseMultipartFormData,\n} from '@remix-run/server-runtime';\n\nexport type {\n ActionArgs,\n ActionFunction,\n AppData,\n AppLoadContext,\n Cookie,\n CookieOptions,\n CookieParseOptions,\n CookieSerializeOptions,\n CookieSignatureOptions,\n DataFunctionArgs,\n EntryContext,\n ErrorBoundaryComponent,\n HandleDataRequestFunction,\n HandleDocumentRequestFunction,\n HeadersFunction,\n HtmlLinkDescriptor,\n HtmlMetaDescriptor,\n LinkDescriptor,\n LinksFunction,\n LoaderFunction,\n LoaderArgs,\n MemoryUploadHandlerFilterArgs,\n MemoryUploadHandlerOptions,\n MetaDescriptor,\n MetaFunction,\n PageLinkDescriptor,\n RequestHandler,\n RouteComponent,\n RouteHandle,\n SerializeFrom,\n ServerBuild,\n ServerEntryModule,\n Session,\n SessionData,\n SessionIdStorageStrategy,\n SessionStorage,\n SignFunction,\n TypedResponse,\n UnsignFunction,\n UploadHandlerPart,\n UploadHandler,\n} from '@remix-run/server-runtime';\n"]}
1
+ {"version":3,"sources":["../../src/implementations.ts","../../src/crypto.ts","../../src/server.ts","../../src/index.ts"],"names":[],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACHP,IAAM,UAAU,IAAI,YAAY;AAEzB,IAAM,OAAqB,OAAO,OAAO,WAAW;AACzD,QAAM,MAAM,MAAM,UAAU,QAAQ,CAAC,MAAM,CAAC;AAC5C,QAAM,OAAO,QAAQ,OAAO,KAAK;AACjC,QAAM,YAAY,MAAM,OAAO,OAAO,KAAK,QAAQ,KAAK,IAAI;AAC5D,QAAM,OAAO,KAAK,OAAO,aAAa,GAAG,IAAI,WAAW,SAAS,CAAC,CAAC,EAAE;AAAA,IACnE;AAAA,IACA;AAAA,EACF;AAEA,SAAO,QAAQ,MAAM;AACvB;AAEO,IAAM,SAAyB,OAAO,QAAQ,WAAW;AAC9D,QAAM,QAAQ,OAAO,YAAY,GAAG;AACpC,QAAM,QAAQ,OAAO,MAAM,GAAG,KAAK;AACnC,QAAM,OAAO,OAAO,MAAM,QAAQ,CAAC;AAEnC,QAAM,MAAM,MAAM,UAAU,QAAQ,CAAC,QAAQ,CAAC;AAC9C,QAAM,OAAO,QAAQ,OAAO,KAAK;AACjC,QAAM,YAAY,uBAAuB,KAAK,IAAI,CAAC;AACnD,QAAM,QAAQ,MAAM,OAAO,OAAO,OAAO,QAAQ,KAAK,WAAW,IAAI;AAErE,SAAO,QAAQ,QAAQ;AACzB;AAEA,eAAe,UACb,QACA,QACoB;AACpB,QAAM,MAAM,MAAM,OAAO,OAAO;AAAA,IAC9B;AAAA,IACA,QAAQ,OAAO,MAAM;AAAA,IACrB,EAAC,MAAM,QAAQ,MAAM,UAAS;AAAA,IAC9B;AAAA,IACA;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,uBAAuB,YAAgC;AAC9D,QAAM,QAAQ,IAAI,WAAW,WAAW,MAAM;AAE9C,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AAC1C,UAAM,KAAK,WAAW,WAAW,CAAC;AAAA,EACpC;AAEA,SAAO;AACT;;;AD3CO,IAAM,eAAe,oBAAoB,EAAC,MAAM,OAAM,CAAC;AACvD,IAAM,6BACX,kCAAkC,YAAY;AACzC,IAAM,uBAAuB,4BAA4B,YAAY;AACrE,IAAM,6BACX,kCAAkC,oBAAoB;;;AEdxD;AAAA,EACE,wBAAwB;AAAA,OAGnB;AAEA,SAAS,qBAAwC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,gBAAgB,0BAA0B,OAAO,IAAI;AAE3D,SAAO,OAAO,YAAqB;AACjC,WAAO;AAAA,MACL;AAAA,MACC,MAAM,iBAAiB,OAAO;AAAA,IACjC;AAAA,EACF;AACF;AAEO,SAAS,WAAW,SAAkB;AAC3C,SAAO,QAAQ,QAAQ,IAAI,iBAAiB,KAAK;AACnD;;;AClBA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK","sourcesContent":["import {\n createCookieFactory,\n createCookieSessionStorageFactory,\n createMemorySessionStorageFactory,\n createSessionStorageFactory,\n} from '@remix-run/server-runtime';\n\nimport {sign, unsign} from './crypto';\n\nexport const createCookie = createCookieFactory({sign, unsign});\nexport const createCookieSessionStorage =\n createCookieSessionStorageFactory(createCookie);\nexport const createSessionStorage = createSessionStorageFactory(createCookie);\nexport const createMemorySessionStorage =\n createMemorySessionStorageFactory(createSessionStorage);\n","import type {SignFunction, UnsignFunction} from '@remix-run/server-runtime';\n\nconst encoder = new TextEncoder();\n\nexport const sign: SignFunction = async (value, secret) => {\n const key = await createKey(secret, ['sign']);\n const data = encoder.encode(value);\n const signature = await crypto.subtle.sign('HMAC', key, data);\n const hash = btoa(String.fromCharCode(...new Uint8Array(signature))).replace(\n /=+$/,\n '',\n );\n\n return value + '.' + hash;\n};\n\nexport const unsign: UnsignFunction = async (signed, secret) => {\n const index = signed.lastIndexOf('.');\n const value = signed.slice(0, index);\n const hash = signed.slice(index + 1);\n\n const key = await createKey(secret, ['verify']);\n const data = encoder.encode(value);\n const signature = byteStringToUint8Array(atob(hash));\n const valid = await crypto.subtle.verify('HMAC', key, signature, data);\n\n return valid ? value : false;\n};\n\nasync function createKey(\n secret: string,\n usages: CryptoKey['usages'],\n): Promise<CryptoKey> {\n const key = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(secret),\n {name: 'HMAC', hash: 'SHA-256'},\n false,\n usages,\n );\n\n return key;\n}\n\nfunction byteStringToUint8Array(byteString: string): Uint8Array {\n const array = new Uint8Array(byteString.length);\n\n for (let i = 0; i < byteString.length; i++) {\n array[i] = byteString.charCodeAt(i);\n }\n\n return array;\n}\n","import {\n createRequestHandler as createRemixRequestHandler,\n type AppLoadContext,\n type ServerBuild,\n} from '@remix-run/server-runtime';\n\nexport function createRequestHandler<Context = unknown>({\n build,\n mode,\n getLoadContext,\n}: {\n build: ServerBuild;\n mode?: string;\n getLoadContext?: (request: Request) => Promise<Context> | Context;\n}) {\n const handleRequest = createRemixRequestHandler(build, mode);\n\n return async (request: Request) => {\n return handleRequest(\n request,\n (await getLoadContext?.(request)) as AppLoadContext,\n );\n };\n}\n\nexport function getBuyerIp(request: Request) {\n return request.headers.get('oxygen-buyer-ip') ?? undefined;\n}\n","export {\n createCookie,\n createCookieSessionStorage,\n createMemorySessionStorage,\n createSessionStorage,\n} from './implementations';\n\nexport {createRequestHandler, getBuyerIp} from './server';\n\nexport {\n createSession,\n isCookie,\n isSession,\n json,\n MaxPartSizeExceededError,\n redirect,\n defer,\n unstable_composeUploadHandlers,\n unstable_createMemoryUploadHandler,\n unstable_parseMultipartFormData,\n} from '@remix-run/server-runtime';\n\nexport type {\n ActionArgs,\n ActionFunction,\n AppData,\n AppLoadContext,\n Cookie,\n CookieOptions,\n CookieParseOptions,\n CookieSerializeOptions,\n CookieSignatureOptions,\n DataFunctionArgs,\n EntryContext,\n ErrorBoundaryComponent,\n HandleDataRequestFunction,\n HandleDocumentRequestFunction,\n HeadersFunction,\n HtmlLinkDescriptor,\n HtmlMetaDescriptor,\n LinkDescriptor,\n LinksFunction,\n LoaderFunction,\n LoaderArgs,\n MemoryUploadHandlerFilterArgs,\n MemoryUploadHandlerOptions,\n MetaDescriptor,\n MetaFunction,\n PageLinkDescriptor,\n RequestHandler,\n RouteComponent,\n RouteHandle,\n SerializeFrom,\n ServerBuild,\n ServerEntryModule,\n Session,\n SessionData,\n SessionIdStorageStrategy,\n SessionStorage,\n SignFunction,\n TypedResponse,\n UnsignFunction,\n UploadHandlerPart,\n UploadHandler,\n} from '@remix-run/server-runtime';\n"]}
@@ -2,7 +2,7 @@
2
2
 
3
3
  var serverRuntime = require('@remix-run/server-runtime');
4
4
 
5
- var c=new TextEncoder,p=async(e,o)=>{let t=await d(o,["sign"]),n=c.encode(e),a=await crypto.subtle.sign("HMAC",t,n),r=btoa(String.fromCharCode(...new Uint8Array(a))).replace(/=+$/,"");return e+"."+r},l=async(e,o)=>{let t=e.lastIndexOf("."),n=e.slice(0,t),a=e.slice(t+1),r=await d(o,["verify"]),i=c.encode(n),s=g(atob(a));return await crypto.subtle.verify("HMAC",r,s,i)?n:!1};async function d(e,o){return await crypto.subtle.importKey("raw",c.encode(e),{name:"HMAC",hash:"SHA-256"},!1,o)}function g(e){let o=new Uint8Array(e.length);for(let t=0;t<e.length;t++)o[t]=e.charCodeAt(t);return o}var u=serverRuntime.createCookieFactory({sign:p,unsign:l}),f=serverRuntime.createCookieSessionStorageFactory(u),y=serverRuntime.createSessionStorageFactory(u),k=serverRuntime.createMemorySessionStorageFactory(y);function F({build:e,mode:o,getLoadContext:t,shouldProxyAsset:n}){let a=serverRuntime.createRequestHandler(e,o);return async r=>{let i=new URL(r.url);if(o==="production"&&e.publicPath!==void 0&&n?.(r.url)){let s=(e.publicPath||"").replace(/\/build\/$/,"");return fetch(r.url.replace(i.origin,s),r)}return a(r,await t?.(r))}}function H(e){return e.headers.get("oxygen-buyer-ip")??void 0}
5
+ var s=new TextEncoder,c=async(e,o)=>{let t=await p(o,["sign"]),r=s.encode(e),n=await crypto.subtle.sign("HMAC",t,r),a=btoa(String.fromCharCode(...new Uint8Array(n))).replace(/=+$/,"");return e+"."+a},u=async(e,o)=>{let t=e.lastIndexOf("."),r=e.slice(0,t),n=e.slice(t+1),a=await p(o,["verify"]),l=s.encode(r),y=g(atob(n));return await crypto.subtle.verify("HMAC",a,y,l)?r:!1};async function p(e,o){return await crypto.subtle.importKey("raw",s.encode(e),{name:"HMAC",hash:"SHA-256"},!1,o)}function g(e){let o=new Uint8Array(e.length);for(let t=0;t<e.length;t++)o[t]=e.charCodeAt(t);return o}var i=serverRuntime.createCookieFactory({sign:c,unsign:u}),f=serverRuntime.createCookieSessionStorageFactory(i),d=serverRuntime.createSessionStorageFactory(i),k=serverRuntime.createMemorySessionStorageFactory(d);function H({build:e,mode:o,getLoadContext:t}){let r=serverRuntime.createRequestHandler(e,o);return async n=>r(n,await t?.(n))}function A(e){return e.headers.get("oxygen-buyer-ip")??void 0}
6
6
 
7
7
  Object.defineProperty(exports, 'MaxPartSizeExceededError', {
8
8
  enumerable: true,
@@ -44,11 +44,11 @@ Object.defineProperty(exports, 'unstable_parseMultipartFormData', {
44
44
  enumerable: true,
45
45
  get: function () { return serverRuntime.unstable_parseMultipartFormData; }
46
46
  });
47
- exports.createCookie = u;
47
+ exports.createCookie = i;
48
48
  exports.createCookieSessionStorage = f;
49
49
  exports.createMemorySessionStorage = k;
50
- exports.createRequestHandler = F;
51
- exports.createSessionStorage = y;
52
- exports.getBuyerIp = H;
50
+ exports.createRequestHandler = H;
51
+ exports.createSessionStorage = d;
52
+ exports.getBuyerIp = A;
53
53
  //# sourceMappingURL=out.js.map
54
54
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/implementations.ts","../../src/crypto.ts","../../src/server.ts","../../src/index.ts"],"names":["createCookieFactory","createCookieSessionStorageFactory","createMemorySessionStorageFactory","createSessionStorageFactory","encoder","sign","value","secret","key","createKey","data","signature","hash","unsign","signed","index","byteStringToUint8Array","usages","byteString","array","i","createCookie","createCookieSessionStorage","createSessionStorage","createMemorySessionStorage","createRemixRequestHandler","createRequestHandler","build","mode","getLoadContext","shouldProxyAsset","handleRequest","request","url","newOriginAndPathPrefix","getBuyerIp","createSession","isCookie","isSession","json","MaxPartSizeExceededError","redirect","defer","unstable_composeUploadHandlers","unstable_createMemoryUploadHandler","unstable_parseMultipartFormData"],"mappings":"AAAA,OACE,uBAAAA,EACA,qCAAAC,EACA,qCAAAC,EACA,+BAAAC,MACK,4BCHP,IAAMC,EAAU,IAAI,YAEPC,EAAqB,MAAOC,EAAOC,IAAW,CACzD,IAAMC,EAAM,MAAMC,EAAUF,EAAQ,CAAC,MAAM,CAAC,EACtCG,EAAON,EAAQ,OAAOE,CAAK,EAC3BK,EAAY,MAAM,OAAO,OAAO,KAAK,OAAQH,EAAKE,CAAI,EACtDE,EAAO,KAAK,OAAO,aAAa,GAAG,IAAI,WAAWD,CAAS,CAAC,CAAC,EAAE,QACnE,MACA,EACF,EAEA,OAAOL,EAAQ,IAAMM,CACvB,EAEaC,EAAyB,MAAOC,EAAQP,IAAW,CAC9D,IAAMQ,EAAQD,EAAO,YAAY,GAAG,EAC9BR,EAAQQ,EAAO,MAAM,EAAGC,CAAK,EAC7BH,EAAOE,EAAO,MAAMC,EAAQ,CAAC,EAE7BP,EAAM,MAAMC,EAAUF,EAAQ,CAAC,QAAQ,CAAC,EACxCG,EAAON,EAAQ,OAAOE,CAAK,EAC3BK,EAAYK,EAAuB,KAAKJ,CAAI,CAAC,EAGnD,OAFc,MAAM,OAAO,OAAO,OAAO,OAAQJ,EAAKG,EAAWD,CAAI,EAEtDJ,EAAQ,EACzB,EAEA,eAAeG,EACbF,EACAU,EACoB,CASpB,OARY,MAAM,OAAO,OAAO,UAC9B,MACAb,EAAQ,OAAOG,CAAM,EACrB,CAAC,KAAM,OAAQ,KAAM,SAAS,EAC9B,GACAU,CACF,CAGF,CAEA,SAASD,EAAuBE,EAAgC,CAC9D,IAAMC,EAAQ,IAAI,WAAWD,EAAW,MAAM,EAE9C,QAASE,EAAI,EAAGA,EAAIF,EAAW,OAAQE,IACrCD,EAAMC,GAAKF,EAAW,WAAWE,CAAC,EAGpC,OAAOD,CACT,CD3CO,IAAME,EAAerB,EAAoB,CAAC,KAAAK,EAAM,OAAAQ,CAAM,CAAC,EACjDS,EACXrB,EAAkCoB,CAAY,EACnCE,EAAuBpB,EAA4BkB,CAAY,EAC/DG,EACXtB,EAAkCqB,CAAoB,EEdxD,OACE,wBAAwBE,MAGnB,4BAEA,SAASC,EAAwC,CACtD,MAAAC,EACA,KAAAC,EACA,eAAAC,EACA,iBAAAC,CACF,EAkBG,CACD,IAAMC,EAAgBN,EAA0BE,EAAOC,CAAI,EAE3D,MAAO,OAAOI,GAAqB,CACjC,IAAMC,EAAM,IAAI,IAAID,EAAQ,GAAG,EAE/B,GACEJ,IAAS,cACTD,EAAM,aAAe,QACrBG,IAAmBE,EAAQ,GAAG,EAC9B,CAOA,IAAME,GAA0BP,EAAM,YAAc,IAAI,QACtD,aACA,EACF,EAEA,OAAO,MACLK,EAAQ,IAAI,QAAQC,EAAI,OAAQC,CAAsB,EACtDF,CACF,CACF,CAEA,OAAOD,EACLC,EACC,MAAMH,IAAiBG,CAAO,CACjC,CACF,CACF,CAEO,SAASG,EAAWH,EAAkB,CAC3C,OAAOA,EAAQ,QAAQ,IAAI,iBAAiB,GAAK,MACnD,CCzDA,OACE,iBAAAI,EACA,YAAAC,EACA,aAAAC,EACA,QAAAC,EACA,4BAAAC,EACA,YAAAC,EACA,SAAAC,EACA,kCAAAC,EACA,sCAAAC,EACA,mCAAAC,MACK","sourcesContent":["import {\n createCookieFactory,\n createCookieSessionStorageFactory,\n createMemorySessionStorageFactory,\n createSessionStorageFactory,\n} from '@remix-run/server-runtime';\n\nimport {sign, unsign} from './crypto';\n\nexport const createCookie = createCookieFactory({sign, unsign});\nexport const createCookieSessionStorage =\n createCookieSessionStorageFactory(createCookie);\nexport const createSessionStorage = createSessionStorageFactory(createCookie);\nexport const createMemorySessionStorage =\n createMemorySessionStorageFactory(createSessionStorage);\n","import type {SignFunction, UnsignFunction} from '@remix-run/server-runtime';\n\nconst encoder = new TextEncoder();\n\nexport const sign: SignFunction = async (value, secret) => {\n const key = await createKey(secret, ['sign']);\n const data = encoder.encode(value);\n const signature = await crypto.subtle.sign('HMAC', key, data);\n const hash = btoa(String.fromCharCode(...new Uint8Array(signature))).replace(\n /=+$/,\n '',\n );\n\n return value + '.' + hash;\n};\n\nexport const unsign: UnsignFunction = async (signed, secret) => {\n const index = signed.lastIndexOf('.');\n const value = signed.slice(0, index);\n const hash = signed.slice(index + 1);\n\n const key = await createKey(secret, ['verify']);\n const data = encoder.encode(value);\n const signature = byteStringToUint8Array(atob(hash));\n const valid = await crypto.subtle.verify('HMAC', key, signature, data);\n\n return valid ? value : false;\n};\n\nasync function createKey(\n secret: string,\n usages: CryptoKey['usages'],\n): Promise<CryptoKey> {\n const key = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(secret),\n {name: 'HMAC', hash: 'SHA-256'},\n false,\n usages,\n );\n\n return key;\n}\n\nfunction byteStringToUint8Array(byteString: string): Uint8Array {\n const array = new Uint8Array(byteString.length);\n\n for (let i = 0; i < byteString.length; i++) {\n array[i] = byteString.charCodeAt(i);\n }\n\n return array;\n}\n","import {\n createRequestHandler as createRemixRequestHandler,\n type AppLoadContext,\n type ServerBuild,\n} from '@remix-run/server-runtime';\n\nexport function createRequestHandler<Context = unknown>({\n build,\n mode,\n getLoadContext,\n shouldProxyAsset,\n}: {\n build: ServerBuild;\n mode?: string;\n getLoadContext?: (request: Request) => Promise<Context> | Context;\n /**\n * By default, Hydrogen will prefix all static assets with a CDN url.\n * If you need to serve static assets from the same domain or from the root,\n * then update the `shouldProxyAsset: (url: string) => boolean` function below\n * to return `true` when the url (pathname) matches your asset.\n *\n * @example\n * ```ts\n * shouldProxyAsset(url) {\n * return new URL(url).pathname === '/robots.txt';\n * }\n * ```\n */\n shouldProxyAsset?: (url: string) => boolean;\n}) {\n const handleRequest = createRemixRequestHandler(build, mode);\n\n return async (request: Request) => {\n const url = new URL(request.url);\n\n if (\n mode === 'production' &&\n build.publicPath !== undefined &&\n shouldProxyAsset?.(request.url)\n ) {\n /**\n * Use the assetPrefix (publicPath) as the origin. Note that Remix expects client assets to be\n * prefixed with `/build/*`, and as such, `/build/` is included in the Oxygen-created `assetPrefix`.\n * However, we need strip out the leading `/build/` for this use case, as developers may wish to\n * serve a static asset from the root `/public` folder (one level up from `/build`).\n */\n const newOriginAndPathPrefix = (build.publicPath || '').replace(\n /\\/build\\/$/,\n '',\n );\n\n return fetch(\n request.url.replace(url.origin, newOriginAndPathPrefix),\n request,\n );\n }\n\n return handleRequest(\n request,\n (await getLoadContext?.(request)) as AppLoadContext,\n );\n };\n}\n\nexport function getBuyerIp(request: Request) {\n return request.headers.get('oxygen-buyer-ip') ?? undefined;\n}\n","export {\n createCookie,\n createCookieSessionStorage,\n createMemorySessionStorage,\n createSessionStorage,\n} from './implementations';\n\nexport {createRequestHandler, getBuyerIp} from './server';\n\nexport {\n createSession,\n isCookie,\n isSession,\n json,\n MaxPartSizeExceededError,\n redirect,\n defer,\n unstable_composeUploadHandlers,\n unstable_createMemoryUploadHandler,\n unstable_parseMultipartFormData,\n} from '@remix-run/server-runtime';\n\nexport type {\n ActionArgs,\n ActionFunction,\n AppData,\n AppLoadContext,\n Cookie,\n CookieOptions,\n CookieParseOptions,\n CookieSerializeOptions,\n CookieSignatureOptions,\n DataFunctionArgs,\n EntryContext,\n ErrorBoundaryComponent,\n HandleDataRequestFunction,\n HandleDocumentRequestFunction,\n HeadersFunction,\n HtmlLinkDescriptor,\n HtmlMetaDescriptor,\n LinkDescriptor,\n LinksFunction,\n LoaderFunction,\n LoaderArgs,\n MemoryUploadHandlerFilterArgs,\n MemoryUploadHandlerOptions,\n MetaDescriptor,\n MetaFunction,\n PageLinkDescriptor,\n RequestHandler,\n RouteComponent,\n RouteHandle,\n SerializeFrom,\n ServerBuild,\n ServerEntryModule,\n Session,\n SessionData,\n SessionIdStorageStrategy,\n SessionStorage,\n SignFunction,\n TypedResponse,\n UnsignFunction,\n UploadHandlerPart,\n UploadHandler,\n} from '@remix-run/server-runtime';\n"]}
1
+ {"version":3,"sources":["../../src/implementations.ts","../../src/crypto.ts","../../src/server.ts","../../src/index.ts"],"names":["createCookieFactory","createCookieSessionStorageFactory","createMemorySessionStorageFactory","createSessionStorageFactory","encoder","sign","value","secret","key","createKey","data","signature","hash","unsign","signed","index","byteStringToUint8Array","usages","byteString","array","i","createCookie","createCookieSessionStorage","createSessionStorage","createMemorySessionStorage","createRemixRequestHandler","createRequestHandler","build","mode","getLoadContext","handleRequest","request","getBuyerIp","createSession","isCookie","isSession","json","MaxPartSizeExceededError","redirect","defer","unstable_composeUploadHandlers","unstable_createMemoryUploadHandler","unstable_parseMultipartFormData"],"mappings":"AAAA,OACE,uBAAAA,EACA,qCAAAC,EACA,qCAAAC,EACA,+BAAAC,MACK,4BCHP,IAAMC,EAAU,IAAI,YAEPC,EAAqB,MAAOC,EAAOC,IAAW,CACzD,IAAMC,EAAM,MAAMC,EAAUF,EAAQ,CAAC,MAAM,CAAC,EACtCG,EAAON,EAAQ,OAAOE,CAAK,EAC3BK,EAAY,MAAM,OAAO,OAAO,KAAK,OAAQH,EAAKE,CAAI,EACtDE,EAAO,KAAK,OAAO,aAAa,GAAG,IAAI,WAAWD,CAAS,CAAC,CAAC,EAAE,QACnE,MACA,EACF,EAEA,OAAOL,EAAQ,IAAMM,CACvB,EAEaC,EAAyB,MAAOC,EAAQP,IAAW,CAC9D,IAAMQ,EAAQD,EAAO,YAAY,GAAG,EAC9BR,EAAQQ,EAAO,MAAM,EAAGC,CAAK,EAC7BH,EAAOE,EAAO,MAAMC,EAAQ,CAAC,EAE7BP,EAAM,MAAMC,EAAUF,EAAQ,CAAC,QAAQ,CAAC,EACxCG,EAAON,EAAQ,OAAOE,CAAK,EAC3BK,EAAYK,EAAuB,KAAKJ,CAAI,CAAC,EAGnD,OAFc,MAAM,OAAO,OAAO,OAAO,OAAQJ,EAAKG,EAAWD,CAAI,EAEtDJ,EAAQ,EACzB,EAEA,eAAeG,EACbF,EACAU,EACoB,CASpB,OARY,MAAM,OAAO,OAAO,UAC9B,MACAb,EAAQ,OAAOG,CAAM,EACrB,CAAC,KAAM,OAAQ,KAAM,SAAS,EAC9B,GACAU,CACF,CAGF,CAEA,SAASD,EAAuBE,EAAgC,CAC9D,IAAMC,EAAQ,IAAI,WAAWD,EAAW,MAAM,EAE9C,QAASE,EAAI,EAAGA,EAAIF,EAAW,OAAQE,IACrCD,EAAMC,GAAKF,EAAW,WAAWE,CAAC,EAGpC,OAAOD,CACT,CD3CO,IAAME,EAAerB,EAAoB,CAAC,KAAAK,EAAM,OAAAQ,CAAM,CAAC,EACjDS,EACXrB,EAAkCoB,CAAY,EACnCE,EAAuBpB,EAA4BkB,CAAY,EAC/DG,EACXtB,EAAkCqB,CAAoB,EEdxD,OACE,wBAAwBE,MAGnB,4BAEA,SAASC,EAAwC,CACtD,MAAAC,EACA,KAAAC,EACA,eAAAC,CACF,EAIG,CACD,IAAMC,EAAgBL,EAA0BE,EAAOC,CAAI,EAE3D,MAAO,OAAOG,GACLD,EACLC,EACC,MAAMF,IAAiBE,CAAO,CACjC,CAEJ,CAEO,SAASC,EAAWD,EAAkB,CAC3C,OAAOA,EAAQ,QAAQ,IAAI,iBAAiB,GAAK,MACnD,CClBA,OACE,iBAAAE,EACA,YAAAC,EACA,aAAAC,EACA,QAAAC,EACA,4BAAAC,EACA,YAAAC,EACA,SAAAC,EACA,kCAAAC,EACA,sCAAAC,EACA,mCAAAC,MACK","sourcesContent":["import {\n createCookieFactory,\n createCookieSessionStorageFactory,\n createMemorySessionStorageFactory,\n createSessionStorageFactory,\n} from '@remix-run/server-runtime';\n\nimport {sign, unsign} from './crypto';\n\nexport const createCookie = createCookieFactory({sign, unsign});\nexport const createCookieSessionStorage =\n createCookieSessionStorageFactory(createCookie);\nexport const createSessionStorage = createSessionStorageFactory(createCookie);\nexport const createMemorySessionStorage =\n createMemorySessionStorageFactory(createSessionStorage);\n","import type {SignFunction, UnsignFunction} from '@remix-run/server-runtime';\n\nconst encoder = new TextEncoder();\n\nexport const sign: SignFunction = async (value, secret) => {\n const key = await createKey(secret, ['sign']);\n const data = encoder.encode(value);\n const signature = await crypto.subtle.sign('HMAC', key, data);\n const hash = btoa(String.fromCharCode(...new Uint8Array(signature))).replace(\n /=+$/,\n '',\n );\n\n return value + '.' + hash;\n};\n\nexport const unsign: UnsignFunction = async (signed, secret) => {\n const index = signed.lastIndexOf('.');\n const value = signed.slice(0, index);\n const hash = signed.slice(index + 1);\n\n const key = await createKey(secret, ['verify']);\n const data = encoder.encode(value);\n const signature = byteStringToUint8Array(atob(hash));\n const valid = await crypto.subtle.verify('HMAC', key, signature, data);\n\n return valid ? value : false;\n};\n\nasync function createKey(\n secret: string,\n usages: CryptoKey['usages'],\n): Promise<CryptoKey> {\n const key = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(secret),\n {name: 'HMAC', hash: 'SHA-256'},\n false,\n usages,\n );\n\n return key;\n}\n\nfunction byteStringToUint8Array(byteString: string): Uint8Array {\n const array = new Uint8Array(byteString.length);\n\n for (let i = 0; i < byteString.length; i++) {\n array[i] = byteString.charCodeAt(i);\n }\n\n return array;\n}\n","import {\n createRequestHandler as createRemixRequestHandler,\n type AppLoadContext,\n type ServerBuild,\n} from '@remix-run/server-runtime';\n\nexport function createRequestHandler<Context = unknown>({\n build,\n mode,\n getLoadContext,\n}: {\n build: ServerBuild;\n mode?: string;\n getLoadContext?: (request: Request) => Promise<Context> | Context;\n}) {\n const handleRequest = createRemixRequestHandler(build, mode);\n\n return async (request: Request) => {\n return handleRequest(\n request,\n (await getLoadContext?.(request)) as AppLoadContext,\n );\n };\n}\n\nexport function getBuyerIp(request: Request) {\n return request.headers.get('oxygen-buyer-ip') ?? undefined;\n}\n","export {\n createCookie,\n createCookieSessionStorage,\n createMemorySessionStorage,\n createSessionStorage,\n} from './implementations';\n\nexport {createRequestHandler, getBuyerIp} from './server';\n\nexport {\n createSession,\n isCookie,\n isSession,\n json,\n MaxPartSizeExceededError,\n redirect,\n defer,\n unstable_composeUploadHandlers,\n unstable_createMemoryUploadHandler,\n unstable_parseMultipartFormData,\n} from '@remix-run/server-runtime';\n\nexport type {\n ActionArgs,\n ActionFunction,\n AppData,\n AppLoadContext,\n Cookie,\n CookieOptions,\n CookieParseOptions,\n CookieSerializeOptions,\n CookieSignatureOptions,\n DataFunctionArgs,\n EntryContext,\n ErrorBoundaryComponent,\n HandleDataRequestFunction,\n HandleDocumentRequestFunction,\n HeadersFunction,\n HtmlLinkDescriptor,\n HtmlMetaDescriptor,\n LinkDescriptor,\n LinksFunction,\n LoaderFunction,\n LoaderArgs,\n MemoryUploadHandlerFilterArgs,\n MemoryUploadHandlerOptions,\n MetaDescriptor,\n MetaFunction,\n PageLinkDescriptor,\n RequestHandler,\n RouteComponent,\n RouteHandle,\n SerializeFrom,\n ServerBuild,\n ServerEntryModule,\n Session,\n SessionData,\n SessionIdStorageStrategy,\n SessionStorage,\n SignFunction,\n TypedResponse,\n UnsignFunction,\n UploadHandlerPart,\n UploadHandler,\n} from '@remix-run/server-runtime';\n"]}
@@ -7,24 +7,10 @@ declare const createCookieSessionStorage: _remix_run_server_runtime.CreateCookie
7
7
  declare const createSessionStorage: _remix_run_server_runtime.CreateSessionStorageFunction;
8
8
  declare const createMemorySessionStorage: _remix_run_server_runtime.CreateMemorySessionStorageFunction;
9
9
 
10
- declare function createRequestHandler<Context = unknown>({ build, mode, getLoadContext, shouldProxyAsset, }: {
10
+ declare function createRequestHandler<Context = unknown>({ build, mode, getLoadContext, }: {
11
11
  build: ServerBuild;
12
12
  mode?: string;
13
13
  getLoadContext?: (request: Request) => Promise<Context> | Context;
14
- /**
15
- * By default, Hydrogen will prefix all static assets with a CDN url.
16
- * If you need to serve static assets from the same domain or from the root,
17
- * then update the `shouldProxyAsset: (url: string) => boolean` function below
18
- * to return `true` when the url (pathname) matches your asset.
19
- *
20
- * @example
21
- * ```ts
22
- * shouldProxyAsset(url) {
23
- * return new URL(url).pathname === '/robots.txt';
24
- * }
25
- * ```
26
- */
27
- shouldProxyAsset?: (url: string) => boolean;
28
14
  }): (request: Request) => Promise<Response>;
29
15
  declare function getBuyerIp(request: Request): string | undefined;
30
16
 
@@ -1,8 +1,8 @@
1
1
  import { createCookieFactory, createCookieSessionStorageFactory, createSessionStorageFactory, createMemorySessionStorageFactory, createRequestHandler } from '@remix-run/server-runtime';
2
2
  export { MaxPartSizeExceededError, createSession, defer, isCookie, isSession, json, redirect, unstable_composeUploadHandlers, unstable_createMemoryUploadHandler, unstable_parseMultipartFormData } from '@remix-run/server-runtime';
3
3
 
4
- var c=new TextEncoder,p=async(e,o)=>{let t=await d(o,["sign"]),n=c.encode(e),a=await crypto.subtle.sign("HMAC",t,n),r=btoa(String.fromCharCode(...new Uint8Array(a))).replace(/=+$/,"");return e+"."+r},l=async(e,o)=>{let t=e.lastIndexOf("."),n=e.slice(0,t),a=e.slice(t+1),r=await d(o,["verify"]),i=c.encode(n),s=g(atob(a));return await crypto.subtle.verify("HMAC",r,s,i)?n:!1};async function d(e,o){return await crypto.subtle.importKey("raw",c.encode(e),{name:"HMAC",hash:"SHA-256"},!1,o)}function g(e){let o=new Uint8Array(e.length);for(let t=0;t<e.length;t++)o[t]=e.charCodeAt(t);return o}var u=createCookieFactory({sign:p,unsign:l}),f=createCookieSessionStorageFactory(u),y=createSessionStorageFactory(u),k=createMemorySessionStorageFactory(y);function F({build:e,mode:o,getLoadContext:t,shouldProxyAsset:n}){let a=createRequestHandler(e,o);return async r=>{let i=new URL(r.url);if(o==="production"&&e.publicPath!==void 0&&n?.(r.url)){let s=(e.publicPath||"").replace(/\/build\/$/,"");return fetch(r.url.replace(i.origin,s),r)}return a(r,await t?.(r))}}function H(e){return e.headers.get("oxygen-buyer-ip")??void 0}
4
+ var s=new TextEncoder,c=async(e,o)=>{let t=await p(o,["sign"]),r=s.encode(e),n=await crypto.subtle.sign("HMAC",t,r),a=btoa(String.fromCharCode(...new Uint8Array(n))).replace(/=+$/,"");return e+"."+a},u=async(e,o)=>{let t=e.lastIndexOf("."),r=e.slice(0,t),n=e.slice(t+1),a=await p(o,["verify"]),l=s.encode(r),y=g(atob(n));return await crypto.subtle.verify("HMAC",a,y,l)?r:!1};async function p(e,o){return await crypto.subtle.importKey("raw",s.encode(e),{name:"HMAC",hash:"SHA-256"},!1,o)}function g(e){let o=new Uint8Array(e.length);for(let t=0;t<e.length;t++)o[t]=e.charCodeAt(t);return o}var i=createCookieFactory({sign:c,unsign:u}),f=createCookieSessionStorageFactory(i),d=createSessionStorageFactory(i),k=createMemorySessionStorageFactory(d);function H({build:e,mode:o,getLoadContext:t}){let r=createRequestHandler(e,o);return async n=>r(n,await t?.(n))}function A(e){return e.headers.get("oxygen-buyer-ip")??void 0}
5
5
 
6
- export { u as createCookie, f as createCookieSessionStorage, k as createMemorySessionStorage, F as createRequestHandler, y as createSessionStorage, H as getBuyerIp };
6
+ export { i as createCookie, f as createCookieSessionStorage, k as createMemorySessionStorage, H as createRequestHandler, d as createSessionStorage, A as getBuyerIp };
7
7
  //# sourceMappingURL=out.js.map
8
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/implementations.ts","../../src/crypto.ts","../../src/server.ts","../../src/index.ts"],"names":["createCookieFactory","createCookieSessionStorageFactory","createMemorySessionStorageFactory","createSessionStorageFactory","encoder","sign","value","secret","key","createKey","data","signature","hash","unsign","signed","index","byteStringToUint8Array","usages","byteString","array","i","createCookie","createCookieSessionStorage","createSessionStorage","createMemorySessionStorage","createRemixRequestHandler","createRequestHandler","build","mode","getLoadContext","shouldProxyAsset","handleRequest","request","url","newOriginAndPathPrefix","getBuyerIp","createSession","isCookie","isSession","json","MaxPartSizeExceededError","redirect","defer","unstable_composeUploadHandlers","unstable_createMemoryUploadHandler","unstable_parseMultipartFormData"],"mappings":"AAAA,OACE,uBAAAA,EACA,qCAAAC,EACA,qCAAAC,EACA,+BAAAC,MACK,4BCHP,IAAMC,EAAU,IAAI,YAEPC,EAAqB,MAAOC,EAAOC,IAAW,CACzD,IAAMC,EAAM,MAAMC,EAAUF,EAAQ,CAAC,MAAM,CAAC,EACtCG,EAAON,EAAQ,OAAOE,CAAK,EAC3BK,EAAY,MAAM,OAAO,OAAO,KAAK,OAAQH,EAAKE,CAAI,EACtDE,EAAO,KAAK,OAAO,aAAa,GAAG,IAAI,WAAWD,CAAS,CAAC,CAAC,EAAE,QACnE,MACA,EACF,EAEA,OAAOL,EAAQ,IAAMM,CACvB,EAEaC,EAAyB,MAAOC,EAAQP,IAAW,CAC9D,IAAMQ,EAAQD,EAAO,YAAY,GAAG,EAC9BR,EAAQQ,EAAO,MAAM,EAAGC,CAAK,EAC7BH,EAAOE,EAAO,MAAMC,EAAQ,CAAC,EAE7BP,EAAM,MAAMC,EAAUF,EAAQ,CAAC,QAAQ,CAAC,EACxCG,EAAON,EAAQ,OAAOE,CAAK,EAC3BK,EAAYK,EAAuB,KAAKJ,CAAI,CAAC,EAGnD,OAFc,MAAM,OAAO,OAAO,OAAO,OAAQJ,EAAKG,EAAWD,CAAI,EAEtDJ,EAAQ,EACzB,EAEA,eAAeG,EACbF,EACAU,EACoB,CASpB,OARY,MAAM,OAAO,OAAO,UAC9B,MACAb,EAAQ,OAAOG,CAAM,EACrB,CAAC,KAAM,OAAQ,KAAM,SAAS,EAC9B,GACAU,CACF,CAGF,CAEA,SAASD,EAAuBE,EAAgC,CAC9D,IAAMC,EAAQ,IAAI,WAAWD,EAAW,MAAM,EAE9C,QAASE,EAAI,EAAGA,EAAIF,EAAW,OAAQE,IACrCD,EAAMC,GAAKF,EAAW,WAAWE,CAAC,EAGpC,OAAOD,CACT,CD3CO,IAAME,EAAerB,EAAoB,CAAC,KAAAK,EAAM,OAAAQ,CAAM,CAAC,EACjDS,EACXrB,EAAkCoB,CAAY,EACnCE,EAAuBpB,EAA4BkB,CAAY,EAC/DG,EACXtB,EAAkCqB,CAAoB,EEdxD,OACE,wBAAwBE,MAGnB,4BAEA,SAASC,EAAwC,CACtD,MAAAC,EACA,KAAAC,EACA,eAAAC,EACA,iBAAAC,CACF,EAkBG,CACD,IAAMC,EAAgBN,EAA0BE,EAAOC,CAAI,EAE3D,MAAO,OAAOI,GAAqB,CACjC,IAAMC,EAAM,IAAI,IAAID,EAAQ,GAAG,EAE/B,GACEJ,IAAS,cACTD,EAAM,aAAe,QACrBG,IAAmBE,EAAQ,GAAG,EAC9B,CAOA,IAAME,GAA0BP,EAAM,YAAc,IAAI,QACtD,aACA,EACF,EAEA,OAAO,MACLK,EAAQ,IAAI,QAAQC,EAAI,OAAQC,CAAsB,EACtDF,CACF,CACF,CAEA,OAAOD,EACLC,EACC,MAAMH,IAAiBG,CAAO,CACjC,CACF,CACF,CAEO,SAASG,EAAWH,EAAkB,CAC3C,OAAOA,EAAQ,QAAQ,IAAI,iBAAiB,GAAK,MACnD,CCzDA,OACE,iBAAAI,EACA,YAAAC,EACA,aAAAC,EACA,QAAAC,EACA,4BAAAC,EACA,YAAAC,EACA,SAAAC,EACA,kCAAAC,EACA,sCAAAC,EACA,mCAAAC,MACK","sourcesContent":["import {\n createCookieFactory,\n createCookieSessionStorageFactory,\n createMemorySessionStorageFactory,\n createSessionStorageFactory,\n} from '@remix-run/server-runtime';\n\nimport {sign, unsign} from './crypto';\n\nexport const createCookie = createCookieFactory({sign, unsign});\nexport const createCookieSessionStorage =\n createCookieSessionStorageFactory(createCookie);\nexport const createSessionStorage = createSessionStorageFactory(createCookie);\nexport const createMemorySessionStorage =\n createMemorySessionStorageFactory(createSessionStorage);\n","import type {SignFunction, UnsignFunction} from '@remix-run/server-runtime';\n\nconst encoder = new TextEncoder();\n\nexport const sign: SignFunction = async (value, secret) => {\n const key = await createKey(secret, ['sign']);\n const data = encoder.encode(value);\n const signature = await crypto.subtle.sign('HMAC', key, data);\n const hash = btoa(String.fromCharCode(...new Uint8Array(signature))).replace(\n /=+$/,\n '',\n );\n\n return value + '.' + hash;\n};\n\nexport const unsign: UnsignFunction = async (signed, secret) => {\n const index = signed.lastIndexOf('.');\n const value = signed.slice(0, index);\n const hash = signed.slice(index + 1);\n\n const key = await createKey(secret, ['verify']);\n const data = encoder.encode(value);\n const signature = byteStringToUint8Array(atob(hash));\n const valid = await crypto.subtle.verify('HMAC', key, signature, data);\n\n return valid ? value : false;\n};\n\nasync function createKey(\n secret: string,\n usages: CryptoKey['usages'],\n): Promise<CryptoKey> {\n const key = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(secret),\n {name: 'HMAC', hash: 'SHA-256'},\n false,\n usages,\n );\n\n return key;\n}\n\nfunction byteStringToUint8Array(byteString: string): Uint8Array {\n const array = new Uint8Array(byteString.length);\n\n for (let i = 0; i < byteString.length; i++) {\n array[i] = byteString.charCodeAt(i);\n }\n\n return array;\n}\n","import {\n createRequestHandler as createRemixRequestHandler,\n type AppLoadContext,\n type ServerBuild,\n} from '@remix-run/server-runtime';\n\nexport function createRequestHandler<Context = unknown>({\n build,\n mode,\n getLoadContext,\n shouldProxyAsset,\n}: {\n build: ServerBuild;\n mode?: string;\n getLoadContext?: (request: Request) => Promise<Context> | Context;\n /**\n * By default, Hydrogen will prefix all static assets with a CDN url.\n * If you need to serve static assets from the same domain or from the root,\n * then update the `shouldProxyAsset: (url: string) => boolean` function below\n * to return `true` when the url (pathname) matches your asset.\n *\n * @example\n * ```ts\n * shouldProxyAsset(url) {\n * return new URL(url).pathname === '/robots.txt';\n * }\n * ```\n */\n shouldProxyAsset?: (url: string) => boolean;\n}) {\n const handleRequest = createRemixRequestHandler(build, mode);\n\n return async (request: Request) => {\n const url = new URL(request.url);\n\n if (\n mode === 'production' &&\n build.publicPath !== undefined &&\n shouldProxyAsset?.(request.url)\n ) {\n /**\n * Use the assetPrefix (publicPath) as the origin. Note that Remix expects client assets to be\n * prefixed with `/build/*`, and as such, `/build/` is included in the Oxygen-created `assetPrefix`.\n * However, we need strip out the leading `/build/` for this use case, as developers may wish to\n * serve a static asset from the root `/public` folder (one level up from `/build`).\n */\n const newOriginAndPathPrefix = (build.publicPath || '').replace(\n /\\/build\\/$/,\n '',\n );\n\n return fetch(\n request.url.replace(url.origin, newOriginAndPathPrefix),\n request,\n );\n }\n\n return handleRequest(\n request,\n (await getLoadContext?.(request)) as AppLoadContext,\n );\n };\n}\n\nexport function getBuyerIp(request: Request) {\n return request.headers.get('oxygen-buyer-ip') ?? undefined;\n}\n","export {\n createCookie,\n createCookieSessionStorage,\n createMemorySessionStorage,\n createSessionStorage,\n} from './implementations';\n\nexport {createRequestHandler, getBuyerIp} from './server';\n\nexport {\n createSession,\n isCookie,\n isSession,\n json,\n MaxPartSizeExceededError,\n redirect,\n defer,\n unstable_composeUploadHandlers,\n unstable_createMemoryUploadHandler,\n unstable_parseMultipartFormData,\n} from '@remix-run/server-runtime';\n\nexport type {\n ActionArgs,\n ActionFunction,\n AppData,\n AppLoadContext,\n Cookie,\n CookieOptions,\n CookieParseOptions,\n CookieSerializeOptions,\n CookieSignatureOptions,\n DataFunctionArgs,\n EntryContext,\n ErrorBoundaryComponent,\n HandleDataRequestFunction,\n HandleDocumentRequestFunction,\n HeadersFunction,\n HtmlLinkDescriptor,\n HtmlMetaDescriptor,\n LinkDescriptor,\n LinksFunction,\n LoaderFunction,\n LoaderArgs,\n MemoryUploadHandlerFilterArgs,\n MemoryUploadHandlerOptions,\n MetaDescriptor,\n MetaFunction,\n PageLinkDescriptor,\n RequestHandler,\n RouteComponent,\n RouteHandle,\n SerializeFrom,\n ServerBuild,\n ServerEntryModule,\n Session,\n SessionData,\n SessionIdStorageStrategy,\n SessionStorage,\n SignFunction,\n TypedResponse,\n UnsignFunction,\n UploadHandlerPart,\n UploadHandler,\n} from '@remix-run/server-runtime';\n"]}
1
+ {"version":3,"sources":["../../src/implementations.ts","../../src/crypto.ts","../../src/server.ts","../../src/index.ts"],"names":["createCookieFactory","createCookieSessionStorageFactory","createMemorySessionStorageFactory","createSessionStorageFactory","encoder","sign","value","secret","key","createKey","data","signature","hash","unsign","signed","index","byteStringToUint8Array","usages","byteString","array","i","createCookie","createCookieSessionStorage","createSessionStorage","createMemorySessionStorage","createRemixRequestHandler","createRequestHandler","build","mode","getLoadContext","handleRequest","request","getBuyerIp","createSession","isCookie","isSession","json","MaxPartSizeExceededError","redirect","defer","unstable_composeUploadHandlers","unstable_createMemoryUploadHandler","unstable_parseMultipartFormData"],"mappings":"AAAA,OACE,uBAAAA,EACA,qCAAAC,EACA,qCAAAC,EACA,+BAAAC,MACK,4BCHP,IAAMC,EAAU,IAAI,YAEPC,EAAqB,MAAOC,EAAOC,IAAW,CACzD,IAAMC,EAAM,MAAMC,EAAUF,EAAQ,CAAC,MAAM,CAAC,EACtCG,EAAON,EAAQ,OAAOE,CAAK,EAC3BK,EAAY,MAAM,OAAO,OAAO,KAAK,OAAQH,EAAKE,CAAI,EACtDE,EAAO,KAAK,OAAO,aAAa,GAAG,IAAI,WAAWD,CAAS,CAAC,CAAC,EAAE,QACnE,MACA,EACF,EAEA,OAAOL,EAAQ,IAAMM,CACvB,EAEaC,EAAyB,MAAOC,EAAQP,IAAW,CAC9D,IAAMQ,EAAQD,EAAO,YAAY,GAAG,EAC9BR,EAAQQ,EAAO,MAAM,EAAGC,CAAK,EAC7BH,EAAOE,EAAO,MAAMC,EAAQ,CAAC,EAE7BP,EAAM,MAAMC,EAAUF,EAAQ,CAAC,QAAQ,CAAC,EACxCG,EAAON,EAAQ,OAAOE,CAAK,EAC3BK,EAAYK,EAAuB,KAAKJ,CAAI,CAAC,EAGnD,OAFc,MAAM,OAAO,OAAO,OAAO,OAAQJ,EAAKG,EAAWD,CAAI,EAEtDJ,EAAQ,EACzB,EAEA,eAAeG,EACbF,EACAU,EACoB,CASpB,OARY,MAAM,OAAO,OAAO,UAC9B,MACAb,EAAQ,OAAOG,CAAM,EACrB,CAAC,KAAM,OAAQ,KAAM,SAAS,EAC9B,GACAU,CACF,CAGF,CAEA,SAASD,EAAuBE,EAAgC,CAC9D,IAAMC,EAAQ,IAAI,WAAWD,EAAW,MAAM,EAE9C,QAASE,EAAI,EAAGA,EAAIF,EAAW,OAAQE,IACrCD,EAAMC,GAAKF,EAAW,WAAWE,CAAC,EAGpC,OAAOD,CACT,CD3CO,IAAME,EAAerB,EAAoB,CAAC,KAAAK,EAAM,OAAAQ,CAAM,CAAC,EACjDS,EACXrB,EAAkCoB,CAAY,EACnCE,EAAuBpB,EAA4BkB,CAAY,EAC/DG,EACXtB,EAAkCqB,CAAoB,EEdxD,OACE,wBAAwBE,MAGnB,4BAEA,SAASC,EAAwC,CACtD,MAAAC,EACA,KAAAC,EACA,eAAAC,CACF,EAIG,CACD,IAAMC,EAAgBL,EAA0BE,EAAOC,CAAI,EAE3D,MAAO,OAAOG,GACLD,EACLC,EACC,MAAMF,IAAiBE,CAAO,CACjC,CAEJ,CAEO,SAASC,EAAWD,EAAkB,CAC3C,OAAOA,EAAQ,QAAQ,IAAI,iBAAiB,GAAK,MACnD,CClBA,OACE,iBAAAE,EACA,YAAAC,EACA,aAAAC,EACA,QAAAC,EACA,4BAAAC,EACA,YAAAC,EACA,SAAAC,EACA,kCAAAC,EACA,sCAAAC,EACA,mCAAAC,MACK","sourcesContent":["import {\n createCookieFactory,\n createCookieSessionStorageFactory,\n createMemorySessionStorageFactory,\n createSessionStorageFactory,\n} from '@remix-run/server-runtime';\n\nimport {sign, unsign} from './crypto';\n\nexport const createCookie = createCookieFactory({sign, unsign});\nexport const createCookieSessionStorage =\n createCookieSessionStorageFactory(createCookie);\nexport const createSessionStorage = createSessionStorageFactory(createCookie);\nexport const createMemorySessionStorage =\n createMemorySessionStorageFactory(createSessionStorage);\n","import type {SignFunction, UnsignFunction} from '@remix-run/server-runtime';\n\nconst encoder = new TextEncoder();\n\nexport const sign: SignFunction = async (value, secret) => {\n const key = await createKey(secret, ['sign']);\n const data = encoder.encode(value);\n const signature = await crypto.subtle.sign('HMAC', key, data);\n const hash = btoa(String.fromCharCode(...new Uint8Array(signature))).replace(\n /=+$/,\n '',\n );\n\n return value + '.' + hash;\n};\n\nexport const unsign: UnsignFunction = async (signed, secret) => {\n const index = signed.lastIndexOf('.');\n const value = signed.slice(0, index);\n const hash = signed.slice(index + 1);\n\n const key = await createKey(secret, ['verify']);\n const data = encoder.encode(value);\n const signature = byteStringToUint8Array(atob(hash));\n const valid = await crypto.subtle.verify('HMAC', key, signature, data);\n\n return valid ? value : false;\n};\n\nasync function createKey(\n secret: string,\n usages: CryptoKey['usages'],\n): Promise<CryptoKey> {\n const key = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(secret),\n {name: 'HMAC', hash: 'SHA-256'},\n false,\n usages,\n );\n\n return key;\n}\n\nfunction byteStringToUint8Array(byteString: string): Uint8Array {\n const array = new Uint8Array(byteString.length);\n\n for (let i = 0; i < byteString.length; i++) {\n array[i] = byteString.charCodeAt(i);\n }\n\n return array;\n}\n","import {\n createRequestHandler as createRemixRequestHandler,\n type AppLoadContext,\n type ServerBuild,\n} from '@remix-run/server-runtime';\n\nexport function createRequestHandler<Context = unknown>({\n build,\n mode,\n getLoadContext,\n}: {\n build: ServerBuild;\n mode?: string;\n getLoadContext?: (request: Request) => Promise<Context> | Context;\n}) {\n const handleRequest = createRemixRequestHandler(build, mode);\n\n return async (request: Request) => {\n return handleRequest(\n request,\n (await getLoadContext?.(request)) as AppLoadContext,\n );\n };\n}\n\nexport function getBuyerIp(request: Request) {\n return request.headers.get('oxygen-buyer-ip') ?? undefined;\n}\n","export {\n createCookie,\n createCookieSessionStorage,\n createMemorySessionStorage,\n createSessionStorage,\n} from './implementations';\n\nexport {createRequestHandler, getBuyerIp} from './server';\n\nexport {\n createSession,\n isCookie,\n isSession,\n json,\n MaxPartSizeExceededError,\n redirect,\n defer,\n unstable_composeUploadHandlers,\n unstable_createMemoryUploadHandler,\n unstable_parseMultipartFormData,\n} from '@remix-run/server-runtime';\n\nexport type {\n ActionArgs,\n ActionFunction,\n AppData,\n AppLoadContext,\n Cookie,\n CookieOptions,\n CookieParseOptions,\n CookieSerializeOptions,\n CookieSignatureOptions,\n DataFunctionArgs,\n EntryContext,\n ErrorBoundaryComponent,\n HandleDataRequestFunction,\n HandleDocumentRequestFunction,\n HeadersFunction,\n HtmlLinkDescriptor,\n HtmlMetaDescriptor,\n LinkDescriptor,\n LinksFunction,\n LoaderFunction,\n LoaderArgs,\n MemoryUploadHandlerFilterArgs,\n MemoryUploadHandlerOptions,\n MetaDescriptor,\n MetaFunction,\n PageLinkDescriptor,\n RequestHandler,\n RouteComponent,\n RouteHandle,\n SerializeFrom,\n ServerBuild,\n ServerEntryModule,\n Session,\n SessionData,\n SessionIdStorageStrategy,\n SessionStorage,\n SignFunction,\n TypedResponse,\n UnsignFunction,\n UploadHandlerPart,\n UploadHandler,\n} from '@remix-run/server-runtime';\n"]}
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "@shopify:registry": "https://registry.npmjs.org"
6
6
  },
7
7
  "type": "module",
8
- "version": "1.0.0-alpha.2",
8
+ "version": "1.0.0-alpha.4",
9
9
  "main": "dist/index.cjs",
10
10
  "module": "dist/production/index.js",
11
11
  "types": "dist/production/index.d.ts",
@@ -38,7 +38,7 @@
38
38
  "dist"
39
39
  ],
40
40
  "dependencies": {
41
- "@remix-run/server-runtime": "0.0.0-experimental-e18af792a"
41
+ "@remix-run/server-runtime": "1.12.0"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@shopify/oxygen-workers-types": "^3.17.2"