iron-session 8.0.0-beta.2 → 8.0.0-beta.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.
package/dist/index.cjs CHANGED
@@ -1,16 +1,19 @@
1
1
  'use strict';
2
2
 
3
+ var module$1 = require('module');
4
+
5
+ var require$1=module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (document.currentScript && document.currentScript.src || new URL('out.js', document.baseURI).href)));
3
6
  var __create = Object.create;
4
7
  var __defProp = Object.defineProperty;
5
8
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
9
  var __getOwnPropNames = Object.getOwnPropertyNames;
7
10
  var __getProtoOf = Object.getPrototypeOf;
8
11
  var __hasOwnProp = Object.prototype.hasOwnProperty;
9
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
10
- get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
12
+ var __require = /* @__PURE__ */ ((x) => typeof require$1 !== "undefined" ? require$1 : typeof Proxy !== "undefined" ? new Proxy(x, {
13
+ get: (a, b) => (typeof require$1 !== "undefined" ? require$1 : a)[b]
11
14
  }) : x)(function(x) {
12
- if (typeof require !== "undefined")
13
- return require.apply(this, arguments);
15
+ if (typeof require$1 !== "undefined")
16
+ return require$1.apply(this, arguments);
14
17
  throw Error('Dynamic require of "' + x + '" is not supported');
15
18
  });
16
19
  var __commonJS = (cb, mod) => function __require2() {
@@ -527,7 +530,7 @@ function setCookie(res, cookieValue) {
527
530
  cookieValue
528
531
  ]);
529
532
  }
530
- function createSealData(_crypto = globalThis.crypto ??= __require("crypto").webcrypto) {
533
+ function createSealData(_crypto = globalThis.crypto ?? __require("crypto").webcrypto) {
531
534
  return async function sealData2(data, {
532
535
  password,
533
536
  ttl = fourteenDaysInSeconds
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/.pnpm/cookie@0.6.0/node_modules/cookie/index.js","../src/core.ts","../node_modules/.pnpm/iron-webcrypto@1.0.0/node_modules/iron-webcrypto/dist/index.js","../src/index.ts"],"names":["parse","serialize","decode","seal","sealData","unsealData","getIronSession","getServerActionIronSession"],"mappings":"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","sourcesContent":["/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString\n\n/**\n * RegExp to match field-content in RFC 7230 sec 3.2\n *\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar = VCHAR / obs-text\n * obs-text = %x80-FF\n */\n\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [options]\n * @return {object}\n * @public\n */\n\nfunction parse(str, options) {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string');\n }\n\n var obj = {}\n var opt = options || {};\n var dec = opt.decode || decode;\n\n var index = 0\n while (index < str.length) {\n var eqIdx = str.indexOf('=', index)\n\n // no more cookie pairs\n if (eqIdx === -1) {\n break\n }\n\n var endIdx = str.indexOf(';', index)\n\n if (endIdx === -1) {\n endIdx = str.length\n } else if (endIdx < eqIdx) {\n // backtrack on prior semicolon\n index = str.lastIndexOf(';', eqIdx - 1) + 1\n continue\n }\n\n var key = str.slice(index, eqIdx).trim()\n\n // only assign once\n if (undefined === obj[key]) {\n var val = str.slice(eqIdx + 1, endIdx).trim()\n\n // quoted values\n if (val.charCodeAt(0) === 0x22) {\n val = val.slice(1, -1)\n }\n\n obj[key] = tryDecode(val, dec);\n }\n\n index = endIdx + 1\n }\n\n return obj;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize the a name value pair into a cookie string suitable for\n * http headers. An optional options object specified cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n * => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [options]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, options) {\n var opt = options || {};\n var enc = opt.encode || encode;\n\n if (typeof enc !== 'function') {\n throw new TypeError('option encode is invalid');\n }\n\n if (!fieldContentRegExp.test(name)) {\n throw new TypeError('argument name is invalid');\n }\n\n var value = enc(val);\n\n if (value && !fieldContentRegExp.test(value)) {\n throw new TypeError('argument val is invalid');\n }\n\n var str = name + '=' + value;\n\n if (null != opt.maxAge) {\n var maxAge = opt.maxAge - 0;\n\n if (isNaN(maxAge) || !isFinite(maxAge)) {\n throw new TypeError('option maxAge is invalid')\n }\n\n str += '; Max-Age=' + Math.floor(maxAge);\n }\n\n if (opt.domain) {\n if (!fieldContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n\n str += '; Domain=' + opt.domain;\n }\n\n if (opt.path) {\n if (!fieldContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n\n str += '; Path=' + opt.path;\n }\n\n if (opt.expires) {\n var expires = opt.expires\n\n if (!isDate(expires) || isNaN(expires.valueOf())) {\n throw new TypeError('option expires is invalid');\n }\n\n str += '; Expires=' + expires.toUTCString()\n }\n\n if (opt.httpOnly) {\n str += '; HttpOnly';\n }\n\n if (opt.secure) {\n str += '; Secure';\n }\n\n if (opt.partitioned) {\n str += '; Partitioned'\n }\n\n if (opt.priority) {\n var priority = typeof opt.priority === 'string'\n ? opt.priority.toLowerCase()\n : opt.priority\n\n switch (priority) {\n case 'low':\n str += '; Priority=Low'\n break\n case 'medium':\n str += '; Priority=Medium'\n break\n case 'high':\n str += '; Priority=High'\n break\n default:\n throw new TypeError('option priority is invalid')\n }\n }\n\n if (opt.sameSite) {\n var sameSite = typeof opt.sameSite === 'string'\n ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n\n return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction decode (str) {\n return str.indexOf('%') !== -1\n ? decodeURIComponent(str)\n : str\n}\n\n/**\n * URL-encode value.\n *\n * @param {string} val\n * @returns {string}\n */\n\nfunction encode (val) {\n return encodeURIComponent(val)\n}\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate (val) {\n return __toString.call(val) === '[object Date]' ||\n val instanceof Date\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n try {\n return decode(str);\n } catch (e) {\n return str;\n }\n}\n","import type { IncomingMessage, ServerResponse } from \"http\";\nimport { parse, serialize, type CookieSerializeOptions } from \"cookie\";\nimport {\n defaults as ironDefaults,\n seal as ironSeal,\n unseal as ironUnseal,\n} from \"iron-webcrypto\";\n\ntype PasswordsMap = Record<string, string>;\ntype Password = PasswordsMap | string;\n\ntype RequestType = IncomingMessage | Request;\ntype ResponseType = Response | ServerResponse;\n\n/**\n * {@link https://wicg.github.io/cookie-store/#dictdef-cookielistitem CookieListItem}\n * as specified by W3C.\n */\ninterface CookieListItem\n extends Pick<\n CookieSerializeOptions,\n \"domain\" | \"path\" | \"sameSite\" | \"secure\"\n > {\n /** A string with the name of a cookie. */\n name: string;\n /** A string containing the value of the cookie. */\n value: string;\n /** A number of milliseconds or Date interface containing the expires of the cookie. */\n expires?: CookieSerializeOptions[\"expires\"] | number;\n}\n\n/**\n * Superset of {@link CookieListItem} extending it with\n * the `httpOnly`, `maxAge` and `priority` properties.\n */\ntype ResponseCookie = CookieListItem &\n Pick<CookieSerializeOptions, \"httpOnly\" | \"maxAge\" | \"priority\">;\n\n/**\n * The high-level type definition of the .get() and .set() methods\n * of { cookies() } from \"next/headers\"\n */\nexport interface ICookieHandler {\n get: (name: string) => { name: string; value: string } | undefined;\n set: {\n (name: string, value: string, cookie?: Partial<ResponseCookie>): void;\n (options: ResponseCookie): void;\n };\n}\n\n/**\n * Set-Cookie Attributes do not include `encode`. We omit this from our `cookieOptions` type.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie\n * @see https://developer.chrome.com/docs/devtools/application/cookies/\n */\ntype CookieOptions = Omit<CookieSerializeOptions, \"encode\">;\n\nexport interface IronSessionOptions {\n /**\n * The cookie name that will be used inside the browser. Make sure it's unique\n * given your application.\n *\n * @example 'vercel-session'\n */\n cookieName: string;\n\n /**\n * The password(s) that will be used to encrypt the cookie. Can either be a string\n * or an object.\n *\n * When you provide multiple passwords then all of them will be used to decrypt\n * the cookie. But only the most recent (`= highest key`, `2` in the example)\n * password will be used to encrypt the cookie. This allows password rotation.\n *\n * @example { 1: 'password-1', 2: 'password-2' }\n */\n password: Password;\n\n /**\n * The time (in seconds) that the session will be valid for. Also sets the\n * `max-age` attribute of the cookie automatically (`= ttl - 60s`, so that the\n * cookie always expire before the session).\n *\n * `ttl = 0` means no expiration.\n *\n * @default 1209600\n */\n ttl?: number;\n\n /**\n * The options that will be passed to the cookie library.\n *\n * If you want to use \"session cookies\" (cookies that are deleted when the browser\n * is closed) then you need to pass `cookieOptions: { maxAge: undefined }`\n *\n * @see https://github.com/jshttp/cookie#options-1\n */\n cookieOptions?: CookieOptions;\n}\n\ntype OverridableOptions = Pick<IronSessionOptions, \"cookieOptions\" | \"ttl\">;\n\nexport type IronSession<T> = T & {\n /**\n * Destroys the session data and removes the cookie.\n */\n readonly destroy: (destroyOptions?: OverridableOptions) => Promise<void>;\n\n /**\n * Encrypts the session data and sets the cookie.\n */\n readonly save: (saveOptions?: OverridableOptions) => Promise<void>;\n};\n\n// default time allowed to check for iron seal validity when ttl passed\n// see https://hapi.dev/module/iron/api/?v=7.0.1#options\nconst timestampSkewSec = 60;\nconst fourteenDaysInSeconds = 14 * 24 * 3600;\n\n// We store a token major version to handle data format changes so that the cookies\n// can be kept alive between upgrades, no need to disconnect everyone.\nconst currentMajorVersion = 2;\nconst versionDelimiter = \"~\";\n\nconst defaultOptions: Required<OverridableOptions> = {\n ttl: fourteenDaysInSeconds,\n cookieOptions: { httpOnly: true, secure: true, sameSite: \"lax\", path: \"/\" },\n};\n\nfunction normalizeStringPasswordToMap(password: Password): PasswordsMap {\n return typeof password === \"string\" ? { 1: password } : password;\n}\n\nfunction parseSeal(seal: string): {\n sealWithoutVersion: string;\n tokenVersion: number | null;\n} {\n const [sealWithoutVersion, tokenVersionAsString] =\n seal.split(versionDelimiter);\n const tokenVersion =\n tokenVersionAsString == null ? null : parseInt(tokenVersionAsString, 10);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return { sealWithoutVersion: sealWithoutVersion!, tokenVersion };\n}\n\nfunction computeCookieMaxAge(ttl: number): number {\n if (ttl === 0) {\n // ttl = 0 means no expiration\n // but in reality cookies have to expire (can't have no max-age)\n // 2147483647 is the max value for max-age in cookies\n // see https://stackoverflow.com/a/11685301/147079\n return 2147483647;\n }\n\n // The next line makes sure browser will expire cookies before seals are considered expired by the server.\n // It also allows for clock difference of 60 seconds between server and clients.\n return ttl - timestampSkewSec;\n}\n\nfunction getCookie(req: RequestType, cookieName: string): string {\n return (\n parse(\n (\"headers\" in req && typeof req.headers.get === \"function\"\n ? req.headers.get(\"cookie\")\n : (req as IncomingMessage).headers.cookie) ?? \"\",\n )[cookieName] ?? \"\"\n );\n}\n\nfunction getServerActionCookie(\n cookieName: string,\n cookieHandler: ICookieHandler,\n): string {\n const cookieObject = cookieHandler.get(cookieName);\n const cookie = cookieObject?.value;\n if (typeof cookie === \"string\") {\n return cookie;\n }\n return \"\";\n}\n\nfunction setCookie(res: ResponseType, cookieValue: string): void {\n if (\"headers\" in res && typeof res.headers.append === \"function\") {\n res.headers.append(\"set-cookie\", cookieValue);\n return;\n }\n let existingSetCookie = (res as ServerResponse).getHeader(\"set-cookie\") ?? [];\n if (!Array.isArray(existingSetCookie)) {\n existingSetCookie = [existingSetCookie.toString()];\n }\n (res as ServerResponse).setHeader(\"set-cookie\", [\n ...existingSetCookie,\n cookieValue,\n ]);\n}\n\nexport function createSealData(\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n _crypto: Crypto = (globalThis.crypto ??= require(\"node:crypto\").webcrypto),\n) {\n return async function sealData(\n data: unknown,\n {\n password,\n ttl = fourteenDaysInSeconds,\n }: { password: Password; ttl?: number },\n ): Promise<string> {\n const passwordsMap = normalizeStringPasswordToMap(password);\n\n const mostRecentPasswordId = Math.max(\n ...Object.keys(passwordsMap).map(Number),\n );\n const passwordForSeal = {\n id: mostRecentPasswordId.toString(),\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n secret: passwordsMap[mostRecentPasswordId]!,\n };\n\n const seal = await ironSeal(_crypto, data, passwordForSeal, {\n ...ironDefaults,\n ttl: ttl * 1000,\n });\n\n return `${seal}${versionDelimiter}${currentMajorVersion}`;\n };\n}\n\nexport function createUnsealData(\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n _crypto: Crypto = (globalThis.crypto ??= require(\"node:crypto\").webcrypto),\n) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return async function unsealData<T extends {} = {}>(\n seal: string,\n {\n password,\n ttl = fourteenDaysInSeconds,\n }: { password: Password; ttl?: number },\n ): Promise<T> {\n const passwordsMap = normalizeStringPasswordToMap(password);\n const { sealWithoutVersion, tokenVersion } = parseSeal(seal);\n\n try {\n const data =\n (await ironUnseal(_crypto, sealWithoutVersion, passwordsMap, {\n ...ironDefaults,\n ttl: ttl * 1000,\n })) /* c8 ignore next */ ?? {};\n\n if (tokenVersion === 2) {\n return data as T;\n }\n\n // @ts-expect-error `persistent` does not exist on newer tokens\n return { ...data.persistent } as T;\n } catch (error) {\n if (\n error instanceof Error &&\n /^(Expired seal|Bad hmac value|Cannot find password|Incorrect number of sealed components)/.test(\n error.message,\n )\n ) {\n // if seal expired or\n // if seal is not valid (encrypted using a different password, when passwords are badly rotated) or\n // if we can't find back the password in the seal\n // then we just start a new session over\n return {} as T;\n }\n\n /* c8 ignore next 2 */\n throw error;\n }\n };\n}\n\nfunction mergeOptions(\n userSessionOptions: IronSessionOptions,\n overrides?: OverridableOptions,\n): Required<IronSessionOptions> {\n const options: Required<IronSessionOptions> = {\n ...defaultOptions,\n ...userSessionOptions,\n ...overrides,\n cookieOptions: {\n ...defaultOptions.cookieOptions,\n ...userSessionOptions.cookieOptions,\n ...overrides?.cookieOptions,\n },\n };\n\n if (\n userSessionOptions.cookieOptions &&\n \"maxAge\" in userSessionOptions.cookieOptions\n ) {\n if (userSessionOptions.cookieOptions.maxAge === undefined) {\n // session cookies, do not set maxAge, consider token as infinite\n options.ttl = 0;\n }\n } else {\n options.cookieOptions.maxAge = computeCookieMaxAge(options.ttl);\n }\n\n return options;\n}\n\nexport function createGetIronSession(\n sealData: ReturnType<typeof createSealData>,\n unsealData: ReturnType<typeof createUnsealData>,\n) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return async function getIronSession<T extends {} = {}>(\n req: RequestType,\n res: ResponseType,\n userSessionOptions: IronSessionOptions,\n ): Promise<IronSession<T>> {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!req) {\n throw new Error(\"iron-session: Bad usage. Missing request parameter.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!res) {\n throw new Error(\"iron-session: Bad usage. Missing response parameter.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!userSessionOptions) {\n throw new Error(\"iron-session: Bad usage. Missing options.\");\n }\n\n if (!userSessionOptions.cookieName) {\n throw new Error(\"iron-session: Bad usage. Missing cookie name.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (!userSessionOptions.password) {\n throw new Error(\"iron-session: Bad usage. Missing password.\");\n }\n\n const passwordsMap = normalizeStringPasswordToMap(\n userSessionOptions.password,\n );\n if (Object.values(passwordsMap).some((password) => password.length < 32)) {\n throw new Error(\n \"iron-session: Bad usage. Password must be at least 32 characters long.\",\n );\n }\n\n const options = mergeOptions(userSessionOptions);\n const sealFromCookies = getCookie(req, options.cookieName);\n const session = sealFromCookies\n ? await unsealData<T>(sealFromCookies, {\n password: passwordsMap,\n ttl: options.ttl,\n })\n : ({} as T);\n\n Object.defineProperties(session, {\n save: {\n value: async function save(saveOptions?: OverridableOptions) {\n if (\"headersSent\" in res && res.headersSent) {\n throw new Error(\n \"iron-session: Cannot set session cookie: session.save() was called after headers were sent. Make sure to call it before any res.send() or res.end()\",\n );\n }\n\n const mergedOptions = mergeOptions(userSessionOptions, saveOptions);\n const seal = await sealData(session, {\n password: passwordsMap,\n ttl: mergedOptions.ttl,\n });\n const cookieValue = serialize(\n mergedOptions.cookieName,\n seal,\n mergedOptions.cookieOptions,\n );\n\n if (cookieValue.length > 4096) {\n throw new Error(\n `iron-session: Cookie length is too big (${cookieValue.length} bytes), browsers will refuse it. Try to remove some data.`,\n );\n }\n\n setCookie(res, cookieValue);\n },\n },\n\n destroy: {\n value: async function destroy(destroyOptions?: OverridableOptions) {\n Object.keys(session).forEach((key) => {\n // @ts-expect-error ...\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete session[key];\n });\n\n const mergedOptions = mergeOptions(\n userSessionOptions,\n destroyOptions,\n );\n const cookieValue = serialize(mergedOptions.cookieName, \"\", {\n ...mergedOptions.cookieOptions,\n maxAge: 0,\n });\n\n setCookie(res, cookieValue);\n },\n },\n });\n\n return session as IronSession<T>;\n };\n}\n\nexport function createGetServerActionIronSession(\n sealData: ReturnType<typeof createSealData>,\n unsealData: ReturnType<typeof createUnsealData>,\n) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return async function getServerActionIronSession<T extends {} = {}>(\n userSessionOptions: IronSessionOptions,\n cookieHandler: ICookieHandler,\n ): Promise<IronSession<T>> {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!userSessionOptions) {\n throw new Error(\"iron-session: Bad usage. Missing options.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!cookieHandler) {\n throw new Error(\n \"iron-session: Bad usage. Missing NextJS cookies() handler.\",\n );\n }\n\n if (!userSessionOptions.cookieName) {\n throw new Error(\"iron-session: Bad usage. Missing cookie name.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (!userSessionOptions.password) {\n throw new Error(\"iron-session: Bad usage. Missing password.\");\n }\n\n const passwordsMap = normalizeStringPasswordToMap(\n userSessionOptions.password,\n );\n if (Object.values(passwordsMap).some((password) => password.length < 32)) {\n throw new Error(\n \"iron-session: Bad usage. Password must be at least 32 characters long.\",\n );\n }\n\n const options = mergeOptions(userSessionOptions);\n const sealFromCookies = getServerActionCookie(\n options.cookieName,\n cookieHandler,\n );\n const session = sealFromCookies\n ? await unsealData<T>(sealFromCookies, {\n password: passwordsMap,\n ttl: options.ttl,\n })\n : ({} as T);\n\n Object.defineProperties(session, {\n save: {\n value: async function save(saveOptions?: OverridableOptions) {\n const mergedOptions = mergeOptions(userSessionOptions, saveOptions);\n const seal = await sealData(session, {\n password: passwordsMap,\n ttl: mergedOptions.ttl,\n });\n\n const cookieLength =\n mergedOptions.cookieName.length +\n seal.length +\n JSON.stringify(mergedOptions.cookieOptions).length;\n\n if (cookieLength > 4096) {\n throw new Error(\n `iron-session: Cookie length is too big (${cookieLength} bytes), browsers will refuse it. Try to remove some data.`,\n );\n }\n\n cookieHandler.set(\n mergedOptions.cookieName,\n seal,\n mergedOptions.cookieOptions,\n );\n },\n },\n\n destroy: {\n value: async function destroy(destroyOptions: OverridableOptions) {\n Object.keys(session).forEach((key) => {\n // @ts-expect-error ...\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete session[key];\n });\n const mergedOptions = mergeOptions(\n userSessionOptions,\n destroyOptions,\n );\n const cookieOptions = { ...mergedOptions.cookieOptions, maxAge: 0 };\n\n cookieHandler.set(mergedOptions.cookieName, \"\", cookieOptions);\n },\n },\n });\n\n return session as IronSession<T>;\n };\n}\n\nexport function mergeHeaders(\n ...headersList: (HeadersInit | undefined)[]\n): Headers {\n const mergedHeaders = new Headers();\n headersList.forEach((headers) => {\n new Headers(headers).forEach((value, key) => {\n mergedHeaders.append(key, value);\n });\n });\n return mergedHeaders;\n}\n\nexport function createResponse(\n originalResponse: Response,\n bodyString: string,\n options?: ResponseInit,\n): Response {\n return new Response(bodyString, {\n status: options?.status ?? originalResponse.status,\n statusText: options?.statusText ?? originalResponse.statusText,\n headers: mergeHeaders(options?.headers, originalResponse.headers),\n });\n}\n","// node_modules/.pnpm/@smithy+util-base64@2.0.0/node_modules/@smithy/util-base64/dist-es/constants.browser.js\nvar alphabetByEncoding = {};\nvar alphabetByValue = new Array(64);\nfor (let i = 0, start = \"A\".charCodeAt(0), limit = \"Z\".charCodeAt(0); i + start <= limit; i++) {\n const char = String.fromCharCode(i + start);\n alphabetByEncoding[char] = i;\n alphabetByValue[i] = char;\n}\nfor (let i = 0, start = \"a\".charCodeAt(0), limit = \"z\".charCodeAt(0); i + start <= limit; i++) {\n const char = String.fromCharCode(i + start);\n const index = i + 26;\n alphabetByEncoding[char] = index;\n alphabetByValue[index] = char;\n}\nfor (let i = 0; i < 10; i++) {\n alphabetByEncoding[i.toString(10)] = i + 52;\n const char = i.toString(10);\n const index = i + 52;\n alphabetByEncoding[char] = index;\n alphabetByValue[index] = char;\n}\nalphabetByEncoding[\"+\"] = 62;\nalphabetByValue[62] = \"+\";\nalphabetByEncoding[\"/\"] = 63;\nalphabetByValue[63] = \"/\";\nvar bitsPerLetter = 6;\nvar bitsPerByte = 8;\nvar maxLetterValue = 63;\n\n// node_modules/.pnpm/@smithy+util-base64@2.0.0/node_modules/@smithy/util-base64/dist-es/fromBase64.browser.js\nvar fromBase64 = (input) => {\n let totalByteLength = input.length / 4 * 3;\n if (input.slice(-2) === \"==\") {\n totalByteLength -= 2;\n } else if (input.slice(-1) === \"=\") {\n totalByteLength--;\n }\n const out = new ArrayBuffer(totalByteLength);\n const dataView = new DataView(out);\n for (let i = 0; i < input.length; i += 4) {\n let bits = 0;\n let bitLength = 0;\n for (let j = i, limit = i + 3; j <= limit; j++) {\n if (input[j] !== \"=\") {\n if (!(input[j] in alphabetByEncoding)) {\n throw new TypeError(`Invalid character ${input[j]} in base64 string.`);\n }\n bits |= alphabetByEncoding[input[j]] << (limit - j) * bitsPerLetter;\n bitLength += bitsPerLetter;\n } else {\n bits >>= bitsPerLetter;\n }\n }\n const chunkOffset = i / 4 * 3;\n bits >>= bitLength % bitsPerByte;\n const byteLength = Math.floor(bitLength / bitsPerByte);\n for (let k = 0; k < byteLength; k++) {\n const offset = (byteLength - k - 1) * bitsPerByte;\n dataView.setUint8(chunkOffset + k, (bits & 255 << offset) >> offset);\n }\n }\n return new Uint8Array(out);\n};\n\n// node_modules/.pnpm/@smithy+util-base64@2.0.0/node_modules/@smithy/util-base64/dist-es/toBase64.browser.js\nfunction toBase64(input) {\n let str = \"\";\n for (let i = 0; i < input.length; i += 3) {\n let bits = 0;\n let bitLength = 0;\n for (let j = i, limit = Math.min(i + 3, input.length); j < limit; j++) {\n bits |= input[j] << (limit - j - 1) * bitsPerByte;\n bitLength += bitsPerByte;\n }\n const bitClusterCount = Math.ceil(bitLength / bitsPerLetter);\n bits <<= bitClusterCount * bitsPerLetter - bitLength;\n for (let k = 1; k <= bitClusterCount; k++) {\n const offset = (bitClusterCount - k) * bitsPerLetter;\n str += alphabetByValue[(bits & maxLetterValue << offset) >> offset];\n }\n str += \"==\".slice(0, 4 - bitClusterCount);\n }\n return str;\n}\n\n// src/index.ts\nvar stringToBuffer = (value) => {\n return new TextEncoder().encode(value);\n};\nvar bufferToString = (value) => {\n return new TextDecoder().decode(value);\n};\nvar base64urlEncode = (value) => toBase64(typeof value === \"string\" ? stringToBuffer(value) : value).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\nvar base64urlDecode = (value) => fromBase64(\n value.replace(/-/g, \"+\").replace(/_/g, \"/\") + Array((4 - value.length % 4) % 4 + 1).join(\"=\")\n);\nvar defaults = {\n encryption: { saltBits: 256, algorithm: \"aes-256-cbc\", iterations: 1, minPasswordlength: 32 },\n integrity: { saltBits: 256, algorithm: \"sha256\", iterations: 1, minPasswordlength: 32 },\n ttl: 0,\n timestampSkewSec: 60,\n localtimeOffsetMsec: 0\n};\nvar clone = (options) => ({\n ...options,\n encryption: { ...options.encryption },\n integrity: { ...options.integrity }\n});\nvar algorithms = {\n \"aes-128-ctr\": { keyBits: 128, ivBits: 128, name: \"AES-CTR\" },\n \"aes-256-cbc\": { keyBits: 256, ivBits: 128, name: \"AES-CBC\" },\n sha256: { keyBits: 256, name: \"SHA-256\" }\n};\nvar macFormatVersion = \"2\";\nvar macPrefix = `Fe26.${macFormatVersion}`;\nvar randomBytes = (_crypto, size) => {\n const bytes = new Uint8Array(size);\n _crypto.getRandomValues(bytes);\n return bytes;\n};\nvar randomBits = (_crypto, bits) => {\n if (bits < 1)\n throw Error(\"Invalid random bits count\");\n const bytes = Math.ceil(bits / 8);\n return randomBytes(_crypto, bytes);\n};\nvar pbkdf2 = async (_crypto, password, salt, iterations, keyLength, hash) => {\n const passwordBuffer = stringToBuffer(password);\n const importedKey = await _crypto.subtle.importKey(\"raw\", passwordBuffer, \"PBKDF2\", false, [\n \"deriveBits\"\n ]);\n const saltBuffer = stringToBuffer(salt);\n const params = { name: \"PBKDF2\", hash, salt: saltBuffer, iterations };\n const derivation = await _crypto.subtle.deriveBits(params, importedKey, keyLength * 8);\n return derivation;\n};\nvar generateKey = async (_crypto, password, options) => {\n var _a;\n if (!(password == null ? void 0 : password.length))\n throw new Error(\"Empty password\");\n if (options == null || typeof options !== \"object\")\n throw new Error(\"Bad options\");\n if (!(options.algorithm in algorithms))\n throw new Error(`Unknown algorithm: ${options.algorithm}`);\n const algorithm = algorithms[options.algorithm];\n const result = {};\n const hmac = (_a = options.hmac) != null ? _a : false;\n const id = hmac ? { name: \"HMAC\", hash: algorithm.name } : { name: algorithm.name };\n const usage = hmac ? [\"sign\", \"verify\"] : [\"encrypt\", \"decrypt\"];\n if (typeof password === \"string\") {\n if (password.length < options.minPasswordlength)\n throw new Error(\n `Password string too short (min ${options.minPasswordlength} characters required)`\n );\n let { salt = \"\" } = options;\n if (!salt) {\n const { saltBits = 0 } = options;\n if (!saltBits)\n throw new Error(\"Missing salt and saltBits options\");\n const randomSalt = randomBits(_crypto, saltBits);\n salt = [...new Uint8Array(randomSalt)].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n }\n const derivedKey = await pbkdf2(\n _crypto,\n password,\n salt,\n options.iterations,\n algorithm.keyBits / 8,\n \"SHA-1\"\n );\n const importedEncryptionKey = await _crypto.subtle.importKey(\n \"raw\",\n derivedKey,\n id,\n false,\n usage\n );\n result.key = importedEncryptionKey;\n result.salt = salt;\n } else {\n if (password.length < algorithm.keyBits / 8)\n throw new Error(\"Key buffer (password) too small\");\n result.key = await _crypto.subtle.importKey(\"raw\", password, id, false, usage);\n result.salt = \"\";\n }\n if (options.iv)\n result.iv = options.iv;\n else if (\"ivBits\" in algorithm)\n result.iv = randomBits(_crypto, algorithm.ivBits);\n return result;\n};\nvar encrypt = async (_crypto, password, options, data) => {\n const key = await generateKey(_crypto, password, options);\n const textBuffer = stringToBuffer(data);\n const encrypted = await _crypto.subtle.encrypt(\n { name: algorithms[options.algorithm].name, iv: key.iv },\n key.key,\n textBuffer\n );\n return { encrypted: new Uint8Array(encrypted), key };\n};\nvar decrypt = async (_crypto, password, options, data) => {\n const key = await generateKey(_crypto, password, options);\n const decrypted = await _crypto.subtle.decrypt(\n { name: algorithms[options.algorithm].name, iv: key.iv },\n key.key,\n typeof data === \"string\" ? stringToBuffer(data) : data\n );\n return bufferToString(new Uint8Array(decrypted));\n};\nvar hmacWithPassword = async (_crypto, password, options, data) => {\n const key = await generateKey(_crypto, password, { ...options, hmac: true });\n const textBuffer = stringToBuffer(data);\n const signed = await _crypto.subtle.sign({ name: \"HMAC\" }, key.key, textBuffer);\n const digest = base64urlEncode(new Uint8Array(signed));\n return { digest, salt: key.salt };\n};\nvar normalizePassword = (password) => {\n if (typeof password === \"string\" || password instanceof Uint8Array)\n return { encryption: password, integrity: password };\n if (\"secret\" in password)\n return { id: password.id, encryption: password.secret, integrity: password.secret };\n return { id: password.id, encryption: password.encryption, integrity: password.integrity };\n};\nvar seal = async (_crypto, object, password, options) => {\n if (!password)\n throw Error(\"Empty password\");\n const opts = clone(options);\n const now = Date.now() + (opts.localtimeOffsetMsec || 0);\n const objectString = JSON.stringify(object);\n const pass = normalizePassword(password);\n const { id = \"\" } = pass;\n if (id && !/^\\w+$/.test(id))\n throw new Error(\"Invalid password id\");\n const { encrypted, key } = await encrypt(_crypto, pass.encryption, opts.encryption, objectString);\n const encryptedB64 = base64urlEncode(new Uint8Array(encrypted));\n const iv = base64urlEncode(key.iv);\n const expiration = opts.ttl ? now + opts.ttl : \"\";\n const macBaseString = `${macPrefix}*${id}*${key.salt}*${iv}*${encryptedB64}*${expiration}`;\n const mac = await hmacWithPassword(_crypto, pass.integrity, opts.integrity, macBaseString);\n const sealed = `${macBaseString}*${mac.salt}*${mac.digest}`;\n return sealed;\n};\nvar fixedTimeComparison = (a, b) => {\n let mismatch = a.length === b.length ? 0 : 1;\n if (mismatch)\n b = a;\n for (let i = 0; i < a.length; i += 1)\n mismatch |= a.charCodeAt(i) ^ b.charCodeAt(i);\n return mismatch === 0;\n};\nvar unseal = async (_crypto, sealed, password, options) => {\n if (!password)\n throw Error(\"Empty password\");\n const opts = clone(options);\n const now = Date.now() + (opts.localtimeOffsetMsec || 0);\n const parts = sealed.split(\"*\");\n if (parts.length !== 8)\n throw new Error(\"Incorrect number of sealed components\");\n const prefix = parts[0];\n let passwordId = parts[1];\n const encryptionSalt = parts[2];\n const encryptionIv = parts[3];\n const encryptedB64 = parts[4];\n const expiration = parts[5];\n const hmacSalt = parts[6];\n const hmac = parts[7];\n const macBaseString = `${prefix}*${passwordId}*${encryptionSalt}*${encryptionIv}*${encryptedB64}*${expiration}`;\n if (macPrefix !== prefix)\n throw new Error(\"Wrong mac prefix\");\n if (expiration) {\n if (!/^\\d+$/.exec(expiration))\n throw new Error(\"Invalid expiration\");\n const exp = parseInt(expiration, 10);\n if (exp <= now - opts.timestampSkewSec * 1e3)\n throw new Error(\"Expired seal\");\n }\n if (typeof password === \"undefined\" || typeof password === \"string\" && password.length === 0)\n throw new Error(\"Empty password\");\n let pass = \"\";\n passwordId = passwordId || \"default\";\n if (typeof password === \"string\" || password instanceof Uint8Array)\n pass = password;\n else if (!(passwordId in password))\n throw new Error(`Cannot find password: ${passwordId}`);\n else\n pass = password[passwordId];\n pass = normalizePassword(pass);\n const macOptions = opts.integrity;\n macOptions.salt = hmacSalt;\n const mac = await hmacWithPassword(_crypto, pass.integrity, macOptions, macBaseString);\n if (!fixedTimeComparison(mac.digest, hmac))\n throw new Error(\"Bad hmac value\");\n const encrypted = base64urlDecode(encryptedB64);\n const decryptOptions = opts.encryption;\n decryptOptions.salt = encryptionSalt;\n decryptOptions.iv = base64urlDecode(encryptionIv);\n const decrypted = await decrypt(_crypto, pass.encryption, decryptOptions, encrypted);\n if (decrypted)\n return JSON.parse(decrypted);\n return null;\n};\n\nexport { algorithms, base64urlDecode, base64urlEncode, bufferToString, clone, decrypt, defaults, encrypt, generateKey, hmacWithPassword, macFormatVersion, macPrefix, randomBits, seal, stringToBuffer, unseal };\n","import {\n createGetIronSession,\n createGetServerActionIronSession,\n createSealData,\n createUnsealData,\n} from \"./core.js\";\n\nexport * from \"./core.js\";\nexport const sealData = createSealData();\nexport const unsealData = createUnsealData();\nexport const getIronSession = createGetIronSession(sealData, unsealData);\nexport const getServerActionIronSession = createGetServerActionIronSession(\n sealData,\n unsealData,\n);\n"]}
1
+ {"version":3,"sources":["../node_modules/.pnpm/cookie@0.6.0/node_modules/cookie/index.js","../src/core.ts","../node_modules/.pnpm/iron-webcrypto@1.0.0/node_modules/iron-webcrypto/dist/index.js","../src/index.ts"],"names":["parse","serialize","decode","seal","sealData","unsealData","getIronSession","getServerActionIronSession"],"mappings":"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","sourcesContent":["/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString\n\n/**\n * RegExp to match field-content in RFC 7230 sec 3.2\n *\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar = VCHAR / obs-text\n * obs-text = %x80-FF\n */\n\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [options]\n * @return {object}\n * @public\n */\n\nfunction parse(str, options) {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string');\n }\n\n var obj = {}\n var opt = options || {};\n var dec = opt.decode || decode;\n\n var index = 0\n while (index < str.length) {\n var eqIdx = str.indexOf('=', index)\n\n // no more cookie pairs\n if (eqIdx === -1) {\n break\n }\n\n var endIdx = str.indexOf(';', index)\n\n if (endIdx === -1) {\n endIdx = str.length\n } else if (endIdx < eqIdx) {\n // backtrack on prior semicolon\n index = str.lastIndexOf(';', eqIdx - 1) + 1\n continue\n }\n\n var key = str.slice(index, eqIdx).trim()\n\n // only assign once\n if (undefined === obj[key]) {\n var val = str.slice(eqIdx + 1, endIdx).trim()\n\n // quoted values\n if (val.charCodeAt(0) === 0x22) {\n val = val.slice(1, -1)\n }\n\n obj[key] = tryDecode(val, dec);\n }\n\n index = endIdx + 1\n }\n\n return obj;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize the a name value pair into a cookie string suitable for\n * http headers. An optional options object specified cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n * => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [options]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, options) {\n var opt = options || {};\n var enc = opt.encode || encode;\n\n if (typeof enc !== 'function') {\n throw new TypeError('option encode is invalid');\n }\n\n if (!fieldContentRegExp.test(name)) {\n throw new TypeError('argument name is invalid');\n }\n\n var value = enc(val);\n\n if (value && !fieldContentRegExp.test(value)) {\n throw new TypeError('argument val is invalid');\n }\n\n var str = name + '=' + value;\n\n if (null != opt.maxAge) {\n var maxAge = opt.maxAge - 0;\n\n if (isNaN(maxAge) || !isFinite(maxAge)) {\n throw new TypeError('option maxAge is invalid')\n }\n\n str += '; Max-Age=' + Math.floor(maxAge);\n }\n\n if (opt.domain) {\n if (!fieldContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n\n str += '; Domain=' + opt.domain;\n }\n\n if (opt.path) {\n if (!fieldContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n\n str += '; Path=' + opt.path;\n }\n\n if (opt.expires) {\n var expires = opt.expires\n\n if (!isDate(expires) || isNaN(expires.valueOf())) {\n throw new TypeError('option expires is invalid');\n }\n\n str += '; Expires=' + expires.toUTCString()\n }\n\n if (opt.httpOnly) {\n str += '; HttpOnly';\n }\n\n if (opt.secure) {\n str += '; Secure';\n }\n\n if (opt.partitioned) {\n str += '; Partitioned'\n }\n\n if (opt.priority) {\n var priority = typeof opt.priority === 'string'\n ? opt.priority.toLowerCase()\n : opt.priority\n\n switch (priority) {\n case 'low':\n str += '; Priority=Low'\n break\n case 'medium':\n str += '; Priority=Medium'\n break\n case 'high':\n str += '; Priority=High'\n break\n default:\n throw new TypeError('option priority is invalid')\n }\n }\n\n if (opt.sameSite) {\n var sameSite = typeof opt.sameSite === 'string'\n ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n\n return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction decode (str) {\n return str.indexOf('%') !== -1\n ? decodeURIComponent(str)\n : str\n}\n\n/**\n * URL-encode value.\n *\n * @param {string} val\n * @returns {string}\n */\n\nfunction encode (val) {\n return encodeURIComponent(val)\n}\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate (val) {\n return __toString.call(val) === '[object Date]' ||\n val instanceof Date\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n try {\n return decode(str);\n } catch (e) {\n return str;\n }\n}\n","import type { IncomingMessage, ServerResponse } from \"http\";\nimport { parse, serialize, type CookieSerializeOptions } from \"cookie\";\nimport {\n defaults as ironDefaults,\n seal as ironSeal,\n unseal as ironUnseal,\n} from \"iron-webcrypto\";\n\ntype PasswordsMap = Record<string, string>;\ntype Password = PasswordsMap | string;\n\ntype RequestType = IncomingMessage | Request;\ntype ResponseType = Response | ServerResponse;\n\n/**\n * {@link https://wicg.github.io/cookie-store/#dictdef-cookielistitem CookieListItem}\n * as specified by W3C.\n */\ninterface CookieListItem\n extends Pick<\n CookieSerializeOptions,\n \"domain\" | \"path\" | \"sameSite\" | \"secure\"\n > {\n /** A string with the name of a cookie. */\n name: string;\n /** A string containing the value of the cookie. */\n value: string;\n /** A number of milliseconds or Date interface containing the expires of the cookie. */\n expires?: CookieSerializeOptions[\"expires\"] | number;\n}\n\n/**\n * Superset of {@link CookieListItem} extending it with\n * the `httpOnly`, `maxAge` and `priority` properties.\n */\ntype ResponseCookie = CookieListItem &\n Pick<CookieSerializeOptions, \"httpOnly\" | \"maxAge\" | \"priority\">;\n\n/**\n * The high-level type definition of the .get() and .set() methods\n * of { cookies() } from \"next/headers\"\n */\nexport interface ICookieHandler {\n get: (name: string) => { name: string; value: string } | undefined;\n set: {\n (name: string, value: string, cookie?: Partial<ResponseCookie>): void;\n (options: ResponseCookie): void;\n };\n}\n\n/**\n * Set-Cookie Attributes do not include `encode`. We omit this from our `cookieOptions` type.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie\n * @see https://developer.chrome.com/docs/devtools/application/cookies/\n */\ntype CookieOptions = Omit<CookieSerializeOptions, \"encode\">;\n\nexport interface IronSessionOptions {\n /**\n * The cookie name that will be used inside the browser. Make sure it's unique\n * given your application.\n *\n * @example 'vercel-session'\n */\n cookieName: string;\n\n /**\n * The password(s) that will be used to encrypt the cookie. Can either be a string\n * or an object.\n *\n * When you provide multiple passwords then all of them will be used to decrypt\n * the cookie. But only the most recent (`= highest key`, `2` in the example)\n * password will be used to encrypt the cookie. This allows password rotation.\n *\n * @example { 1: 'password-1', 2: 'password-2' }\n */\n password: Password;\n\n /**\n * The time (in seconds) that the session will be valid for. Also sets the\n * `max-age` attribute of the cookie automatically (`= ttl - 60s`, so that the\n * cookie always expire before the session).\n *\n * `ttl = 0` means no expiration.\n *\n * @default 1209600\n */\n ttl?: number;\n\n /**\n * The options that will be passed to the cookie library.\n *\n * If you want to use \"session cookies\" (cookies that are deleted when the browser\n * is closed) then you need to pass `cookieOptions: { maxAge: undefined }`\n *\n * @see https://github.com/jshttp/cookie#options-1\n */\n cookieOptions?: CookieOptions;\n}\n\ntype OverridableOptions = Pick<IronSessionOptions, \"cookieOptions\" | \"ttl\">;\n\nexport type IronSession<T> = T & {\n /**\n * Destroys the session data and removes the cookie.\n */\n readonly destroy: (destroyOptions?: OverridableOptions) => Promise<void>;\n\n /**\n * Encrypts the session data and sets the cookie.\n */\n readonly save: (saveOptions?: OverridableOptions) => Promise<void>;\n};\n\n// default time allowed to check for iron seal validity when ttl passed\n// see https://hapi.dev/module/iron/api/?v=7.0.1#options\nconst timestampSkewSec = 60;\nconst fourteenDaysInSeconds = 14 * 24 * 3600;\n\n// We store a token major version to handle data format changes so that the cookies\n// can be kept alive between upgrades, no need to disconnect everyone.\nconst currentMajorVersion = 2;\nconst versionDelimiter = \"~\";\n\nconst defaultOptions: Required<OverridableOptions> = {\n ttl: fourteenDaysInSeconds,\n cookieOptions: { httpOnly: true, secure: true, sameSite: \"lax\", path: \"/\" },\n};\n\nfunction normalizeStringPasswordToMap(password: Password): PasswordsMap {\n return typeof password === \"string\" ? { 1: password } : password;\n}\n\nfunction parseSeal(seal: string): {\n sealWithoutVersion: string;\n tokenVersion: number | null;\n} {\n const [sealWithoutVersion, tokenVersionAsString] =\n seal.split(versionDelimiter);\n const tokenVersion =\n tokenVersionAsString == null ? null : parseInt(tokenVersionAsString, 10);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return { sealWithoutVersion: sealWithoutVersion!, tokenVersion };\n}\n\nfunction computeCookieMaxAge(ttl: number): number {\n if (ttl === 0) {\n // ttl = 0 means no expiration\n // but in reality cookies have to expire (can't have no max-age)\n // 2147483647 is the max value for max-age in cookies\n // see https://stackoverflow.com/a/11685301/147079\n return 2147483647;\n }\n\n // The next line makes sure browser will expire cookies before seals are considered expired by the server.\n // It also allows for clock difference of 60 seconds between server and clients.\n return ttl - timestampSkewSec;\n}\n\nfunction getCookie(req: RequestType, cookieName: string): string {\n return (\n parse(\n (\"headers\" in req && typeof req.headers.get === \"function\"\n ? req.headers.get(\"cookie\")\n : (req as IncomingMessage).headers.cookie) ?? \"\",\n )[cookieName] ?? \"\"\n );\n}\n\nfunction getServerActionCookie(\n cookieName: string,\n cookieHandler: ICookieHandler,\n): string {\n const cookieObject = cookieHandler.get(cookieName);\n const cookie = cookieObject?.value;\n if (typeof cookie === \"string\") {\n return cookie;\n }\n return \"\";\n}\n\nfunction setCookie(res: ResponseType, cookieValue: string): void {\n if (\"headers\" in res && typeof res.headers.append === \"function\") {\n res.headers.append(\"set-cookie\", cookieValue);\n return;\n }\n let existingSetCookie = (res as ServerResponse).getHeader(\"set-cookie\") ?? [];\n if (!Array.isArray(existingSetCookie)) {\n existingSetCookie = [existingSetCookie.toString()];\n }\n (res as ServerResponse).setHeader(\"set-cookie\", [\n ...existingSetCookie,\n cookieValue,\n ]);\n}\n\nexport function createSealData(\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n _crypto: Crypto = globalThis.crypto ?? require(\"node:crypto\").webcrypto,\n) {\n return async function sealData(\n data: unknown,\n {\n password,\n ttl = fourteenDaysInSeconds,\n }: { password: Password; ttl?: number },\n ): Promise<string> {\n const passwordsMap = normalizeStringPasswordToMap(password);\n\n const mostRecentPasswordId = Math.max(\n ...Object.keys(passwordsMap).map(Number),\n );\n const passwordForSeal = {\n id: mostRecentPasswordId.toString(),\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n secret: passwordsMap[mostRecentPasswordId]!,\n };\n\n const seal = await ironSeal(_crypto, data, passwordForSeal, {\n ...ironDefaults,\n ttl: ttl * 1000,\n });\n\n return `${seal}${versionDelimiter}${currentMajorVersion}`;\n };\n}\n\nexport function createUnsealData(\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n _crypto: Crypto = (globalThis.crypto ??= require(\"node:crypto\").webcrypto),\n) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return async function unsealData<T extends {} = {}>(\n seal: string,\n {\n password,\n ttl = fourteenDaysInSeconds,\n }: { password: Password; ttl?: number },\n ): Promise<T> {\n const passwordsMap = normalizeStringPasswordToMap(password);\n const { sealWithoutVersion, tokenVersion } = parseSeal(seal);\n\n try {\n const data =\n (await ironUnseal(_crypto, sealWithoutVersion, passwordsMap, {\n ...ironDefaults,\n ttl: ttl * 1000,\n })) /* c8 ignore next */ ?? {};\n\n if (tokenVersion === 2) {\n return data as T;\n }\n\n // @ts-expect-error `persistent` does not exist on newer tokens\n return { ...data.persistent } as T;\n } catch (error) {\n if (\n error instanceof Error &&\n /^(Expired seal|Bad hmac value|Cannot find password|Incorrect number of sealed components)/.test(\n error.message,\n )\n ) {\n // if seal expired or\n // if seal is not valid (encrypted using a different password, when passwords are badly rotated) or\n // if we can't find back the password in the seal\n // then we just start a new session over\n return {} as T;\n }\n\n /* c8 ignore next 2 */\n throw error;\n }\n };\n}\n\nfunction mergeOptions(\n userSessionOptions: IronSessionOptions,\n overrides?: OverridableOptions,\n): Required<IronSessionOptions> {\n const options: Required<IronSessionOptions> = {\n ...defaultOptions,\n ...userSessionOptions,\n ...overrides,\n cookieOptions: {\n ...defaultOptions.cookieOptions,\n ...userSessionOptions.cookieOptions,\n ...overrides?.cookieOptions,\n },\n };\n\n if (\n userSessionOptions.cookieOptions &&\n \"maxAge\" in userSessionOptions.cookieOptions\n ) {\n if (userSessionOptions.cookieOptions.maxAge === undefined) {\n // session cookies, do not set maxAge, consider token as infinite\n options.ttl = 0;\n }\n } else {\n options.cookieOptions.maxAge = computeCookieMaxAge(options.ttl);\n }\n\n return options;\n}\n\nexport function createGetIronSession(\n sealData: ReturnType<typeof createSealData>,\n unsealData: ReturnType<typeof createUnsealData>,\n) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return async function getIronSession<T extends {} = {}>(\n req: RequestType,\n res: ResponseType,\n userSessionOptions: IronSessionOptions,\n ): Promise<IronSession<T>> {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!req) {\n throw new Error(\"iron-session: Bad usage. Missing request parameter.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!res) {\n throw new Error(\"iron-session: Bad usage. Missing response parameter.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!userSessionOptions) {\n throw new Error(\"iron-session: Bad usage. Missing options.\");\n }\n\n if (!userSessionOptions.cookieName) {\n throw new Error(\"iron-session: Bad usage. Missing cookie name.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (!userSessionOptions.password) {\n throw new Error(\"iron-session: Bad usage. Missing password.\");\n }\n\n const passwordsMap = normalizeStringPasswordToMap(\n userSessionOptions.password,\n );\n if (Object.values(passwordsMap).some((password) => password.length < 32)) {\n throw new Error(\n \"iron-session: Bad usage. Password must be at least 32 characters long.\",\n );\n }\n\n const options = mergeOptions(userSessionOptions);\n const sealFromCookies = getCookie(req, options.cookieName);\n const session = sealFromCookies\n ? await unsealData<T>(sealFromCookies, {\n password: passwordsMap,\n ttl: options.ttl,\n })\n : ({} as T);\n\n Object.defineProperties(session, {\n save: {\n value: async function save(saveOptions?: OverridableOptions) {\n if (\"headersSent\" in res && res.headersSent) {\n throw new Error(\n \"iron-session: Cannot set session cookie: session.save() was called after headers were sent. Make sure to call it before any res.send() or res.end()\",\n );\n }\n\n const mergedOptions = mergeOptions(userSessionOptions, saveOptions);\n const seal = await sealData(session, {\n password: passwordsMap,\n ttl: mergedOptions.ttl,\n });\n const cookieValue = serialize(\n mergedOptions.cookieName,\n seal,\n mergedOptions.cookieOptions,\n );\n\n if (cookieValue.length > 4096) {\n throw new Error(\n `iron-session: Cookie length is too big (${cookieValue.length} bytes), browsers will refuse it. Try to remove some data.`,\n );\n }\n\n setCookie(res, cookieValue);\n },\n },\n\n destroy: {\n value: async function destroy(destroyOptions?: OverridableOptions) {\n Object.keys(session).forEach((key) => {\n // @ts-expect-error ...\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete session[key];\n });\n\n const mergedOptions = mergeOptions(\n userSessionOptions,\n destroyOptions,\n );\n const cookieValue = serialize(mergedOptions.cookieName, \"\", {\n ...mergedOptions.cookieOptions,\n maxAge: 0,\n });\n\n setCookie(res, cookieValue);\n },\n },\n });\n\n return session as IronSession<T>;\n };\n}\n\nexport function createGetServerActionIronSession(\n sealData: ReturnType<typeof createSealData>,\n unsealData: ReturnType<typeof createUnsealData>,\n) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return async function getServerActionIronSession<T extends {} = {}>(\n userSessionOptions: IronSessionOptions,\n cookieHandler: ICookieHandler,\n ): Promise<IronSession<T>> {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!userSessionOptions) {\n throw new Error(\"iron-session: Bad usage. Missing options.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!cookieHandler) {\n throw new Error(\n \"iron-session: Bad usage. Missing NextJS cookies() handler.\",\n );\n }\n\n if (!userSessionOptions.cookieName) {\n throw new Error(\"iron-session: Bad usage. Missing cookie name.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (!userSessionOptions.password) {\n throw new Error(\"iron-session: Bad usage. Missing password.\");\n }\n\n const passwordsMap = normalizeStringPasswordToMap(\n userSessionOptions.password,\n );\n if (Object.values(passwordsMap).some((password) => password.length < 32)) {\n throw new Error(\n \"iron-session: Bad usage. Password must be at least 32 characters long.\",\n );\n }\n\n const options = mergeOptions(userSessionOptions);\n const sealFromCookies = getServerActionCookie(\n options.cookieName,\n cookieHandler,\n );\n const session = sealFromCookies\n ? await unsealData<T>(sealFromCookies, {\n password: passwordsMap,\n ttl: options.ttl,\n })\n : ({} as T);\n\n Object.defineProperties(session, {\n save: {\n value: async function save(saveOptions?: OverridableOptions) {\n const mergedOptions = mergeOptions(userSessionOptions, saveOptions);\n const seal = await sealData(session, {\n password: passwordsMap,\n ttl: mergedOptions.ttl,\n });\n\n const cookieLength =\n mergedOptions.cookieName.length +\n seal.length +\n JSON.stringify(mergedOptions.cookieOptions).length;\n\n if (cookieLength > 4096) {\n throw new Error(\n `iron-session: Cookie length is too big (${cookieLength} bytes), browsers will refuse it. Try to remove some data.`,\n );\n }\n\n cookieHandler.set(\n mergedOptions.cookieName,\n seal,\n mergedOptions.cookieOptions,\n );\n },\n },\n\n destroy: {\n value: async function destroy(destroyOptions: OverridableOptions) {\n Object.keys(session).forEach((key) => {\n // @ts-expect-error ...\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete session[key];\n });\n const mergedOptions = mergeOptions(\n userSessionOptions,\n destroyOptions,\n );\n const cookieOptions = { ...mergedOptions.cookieOptions, maxAge: 0 };\n\n cookieHandler.set(mergedOptions.cookieName, \"\", cookieOptions);\n },\n },\n });\n\n return session as IronSession<T>;\n };\n}\n\nexport function mergeHeaders(\n ...headersList: (HeadersInit | undefined)[]\n): Headers {\n const mergedHeaders = new Headers();\n headersList.forEach((headers) => {\n new Headers(headers).forEach((value, key) => {\n mergedHeaders.append(key, value);\n });\n });\n return mergedHeaders;\n}\n\nexport function createResponse(\n originalResponse: Response,\n bodyString: string,\n options?: ResponseInit,\n): Response {\n return new Response(bodyString, {\n status: options?.status ?? originalResponse.status,\n statusText: options?.statusText ?? originalResponse.statusText,\n headers: mergeHeaders(options?.headers, originalResponse.headers),\n });\n}\n","// node_modules/.pnpm/@smithy+util-base64@2.0.0/node_modules/@smithy/util-base64/dist-es/constants.browser.js\nvar alphabetByEncoding = {};\nvar alphabetByValue = new Array(64);\nfor (let i = 0, start = \"A\".charCodeAt(0), limit = \"Z\".charCodeAt(0); i + start <= limit; i++) {\n const char = String.fromCharCode(i + start);\n alphabetByEncoding[char] = i;\n alphabetByValue[i] = char;\n}\nfor (let i = 0, start = \"a\".charCodeAt(0), limit = \"z\".charCodeAt(0); i + start <= limit; i++) {\n const char = String.fromCharCode(i + start);\n const index = i + 26;\n alphabetByEncoding[char] = index;\n alphabetByValue[index] = char;\n}\nfor (let i = 0; i < 10; i++) {\n alphabetByEncoding[i.toString(10)] = i + 52;\n const char = i.toString(10);\n const index = i + 52;\n alphabetByEncoding[char] = index;\n alphabetByValue[index] = char;\n}\nalphabetByEncoding[\"+\"] = 62;\nalphabetByValue[62] = \"+\";\nalphabetByEncoding[\"/\"] = 63;\nalphabetByValue[63] = \"/\";\nvar bitsPerLetter = 6;\nvar bitsPerByte = 8;\nvar maxLetterValue = 63;\n\n// node_modules/.pnpm/@smithy+util-base64@2.0.0/node_modules/@smithy/util-base64/dist-es/fromBase64.browser.js\nvar fromBase64 = (input) => {\n let totalByteLength = input.length / 4 * 3;\n if (input.slice(-2) === \"==\") {\n totalByteLength -= 2;\n } else if (input.slice(-1) === \"=\") {\n totalByteLength--;\n }\n const out = new ArrayBuffer(totalByteLength);\n const dataView = new DataView(out);\n for (let i = 0; i < input.length; i += 4) {\n let bits = 0;\n let bitLength = 0;\n for (let j = i, limit = i + 3; j <= limit; j++) {\n if (input[j] !== \"=\") {\n if (!(input[j] in alphabetByEncoding)) {\n throw new TypeError(`Invalid character ${input[j]} in base64 string.`);\n }\n bits |= alphabetByEncoding[input[j]] << (limit - j) * bitsPerLetter;\n bitLength += bitsPerLetter;\n } else {\n bits >>= bitsPerLetter;\n }\n }\n const chunkOffset = i / 4 * 3;\n bits >>= bitLength % bitsPerByte;\n const byteLength = Math.floor(bitLength / bitsPerByte);\n for (let k = 0; k < byteLength; k++) {\n const offset = (byteLength - k - 1) * bitsPerByte;\n dataView.setUint8(chunkOffset + k, (bits & 255 << offset) >> offset);\n }\n }\n return new Uint8Array(out);\n};\n\n// node_modules/.pnpm/@smithy+util-base64@2.0.0/node_modules/@smithy/util-base64/dist-es/toBase64.browser.js\nfunction toBase64(input) {\n let str = \"\";\n for (let i = 0; i < input.length; i += 3) {\n let bits = 0;\n let bitLength = 0;\n for (let j = i, limit = Math.min(i + 3, input.length); j < limit; j++) {\n bits |= input[j] << (limit - j - 1) * bitsPerByte;\n bitLength += bitsPerByte;\n }\n const bitClusterCount = Math.ceil(bitLength / bitsPerLetter);\n bits <<= bitClusterCount * bitsPerLetter - bitLength;\n for (let k = 1; k <= bitClusterCount; k++) {\n const offset = (bitClusterCount - k) * bitsPerLetter;\n str += alphabetByValue[(bits & maxLetterValue << offset) >> offset];\n }\n str += \"==\".slice(0, 4 - bitClusterCount);\n }\n return str;\n}\n\n// src/index.ts\nvar stringToBuffer = (value) => {\n return new TextEncoder().encode(value);\n};\nvar bufferToString = (value) => {\n return new TextDecoder().decode(value);\n};\nvar base64urlEncode = (value) => toBase64(typeof value === \"string\" ? stringToBuffer(value) : value).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\nvar base64urlDecode = (value) => fromBase64(\n value.replace(/-/g, \"+\").replace(/_/g, \"/\") + Array((4 - value.length % 4) % 4 + 1).join(\"=\")\n);\nvar defaults = {\n encryption: { saltBits: 256, algorithm: \"aes-256-cbc\", iterations: 1, minPasswordlength: 32 },\n integrity: { saltBits: 256, algorithm: \"sha256\", iterations: 1, minPasswordlength: 32 },\n ttl: 0,\n timestampSkewSec: 60,\n localtimeOffsetMsec: 0\n};\nvar clone = (options) => ({\n ...options,\n encryption: { ...options.encryption },\n integrity: { ...options.integrity }\n});\nvar algorithms = {\n \"aes-128-ctr\": { keyBits: 128, ivBits: 128, name: \"AES-CTR\" },\n \"aes-256-cbc\": { keyBits: 256, ivBits: 128, name: \"AES-CBC\" },\n sha256: { keyBits: 256, name: \"SHA-256\" }\n};\nvar macFormatVersion = \"2\";\nvar macPrefix = `Fe26.${macFormatVersion}`;\nvar randomBytes = (_crypto, size) => {\n const bytes = new Uint8Array(size);\n _crypto.getRandomValues(bytes);\n return bytes;\n};\nvar randomBits = (_crypto, bits) => {\n if (bits < 1)\n throw Error(\"Invalid random bits count\");\n const bytes = Math.ceil(bits / 8);\n return randomBytes(_crypto, bytes);\n};\nvar pbkdf2 = async (_crypto, password, salt, iterations, keyLength, hash) => {\n const passwordBuffer = stringToBuffer(password);\n const importedKey = await _crypto.subtle.importKey(\"raw\", passwordBuffer, \"PBKDF2\", false, [\n \"deriveBits\"\n ]);\n const saltBuffer = stringToBuffer(salt);\n const params = { name: \"PBKDF2\", hash, salt: saltBuffer, iterations };\n const derivation = await _crypto.subtle.deriveBits(params, importedKey, keyLength * 8);\n return derivation;\n};\nvar generateKey = async (_crypto, password, options) => {\n var _a;\n if (!(password == null ? void 0 : password.length))\n throw new Error(\"Empty password\");\n if (options == null || typeof options !== \"object\")\n throw new Error(\"Bad options\");\n if (!(options.algorithm in algorithms))\n throw new Error(`Unknown algorithm: ${options.algorithm}`);\n const algorithm = algorithms[options.algorithm];\n const result = {};\n const hmac = (_a = options.hmac) != null ? _a : false;\n const id = hmac ? { name: \"HMAC\", hash: algorithm.name } : { name: algorithm.name };\n const usage = hmac ? [\"sign\", \"verify\"] : [\"encrypt\", \"decrypt\"];\n if (typeof password === \"string\") {\n if (password.length < options.minPasswordlength)\n throw new Error(\n `Password string too short (min ${options.minPasswordlength} characters required)`\n );\n let { salt = \"\" } = options;\n if (!salt) {\n const { saltBits = 0 } = options;\n if (!saltBits)\n throw new Error(\"Missing salt and saltBits options\");\n const randomSalt = randomBits(_crypto, saltBits);\n salt = [...new Uint8Array(randomSalt)].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n }\n const derivedKey = await pbkdf2(\n _crypto,\n password,\n salt,\n options.iterations,\n algorithm.keyBits / 8,\n \"SHA-1\"\n );\n const importedEncryptionKey = await _crypto.subtle.importKey(\n \"raw\",\n derivedKey,\n id,\n false,\n usage\n );\n result.key = importedEncryptionKey;\n result.salt = salt;\n } else {\n if (password.length < algorithm.keyBits / 8)\n throw new Error(\"Key buffer (password) too small\");\n result.key = await _crypto.subtle.importKey(\"raw\", password, id, false, usage);\n result.salt = \"\";\n }\n if (options.iv)\n result.iv = options.iv;\n else if (\"ivBits\" in algorithm)\n result.iv = randomBits(_crypto, algorithm.ivBits);\n return result;\n};\nvar encrypt = async (_crypto, password, options, data) => {\n const key = await generateKey(_crypto, password, options);\n const textBuffer = stringToBuffer(data);\n const encrypted = await _crypto.subtle.encrypt(\n { name: algorithms[options.algorithm].name, iv: key.iv },\n key.key,\n textBuffer\n );\n return { encrypted: new Uint8Array(encrypted), key };\n};\nvar decrypt = async (_crypto, password, options, data) => {\n const key = await generateKey(_crypto, password, options);\n const decrypted = await _crypto.subtle.decrypt(\n { name: algorithms[options.algorithm].name, iv: key.iv },\n key.key,\n typeof data === \"string\" ? stringToBuffer(data) : data\n );\n return bufferToString(new Uint8Array(decrypted));\n};\nvar hmacWithPassword = async (_crypto, password, options, data) => {\n const key = await generateKey(_crypto, password, { ...options, hmac: true });\n const textBuffer = stringToBuffer(data);\n const signed = await _crypto.subtle.sign({ name: \"HMAC\" }, key.key, textBuffer);\n const digest = base64urlEncode(new Uint8Array(signed));\n return { digest, salt: key.salt };\n};\nvar normalizePassword = (password) => {\n if (typeof password === \"string\" || password instanceof Uint8Array)\n return { encryption: password, integrity: password };\n if (\"secret\" in password)\n return { id: password.id, encryption: password.secret, integrity: password.secret };\n return { id: password.id, encryption: password.encryption, integrity: password.integrity };\n};\nvar seal = async (_crypto, object, password, options) => {\n if (!password)\n throw Error(\"Empty password\");\n const opts = clone(options);\n const now = Date.now() + (opts.localtimeOffsetMsec || 0);\n const objectString = JSON.stringify(object);\n const pass = normalizePassword(password);\n const { id = \"\" } = pass;\n if (id && !/^\\w+$/.test(id))\n throw new Error(\"Invalid password id\");\n const { encrypted, key } = await encrypt(_crypto, pass.encryption, opts.encryption, objectString);\n const encryptedB64 = base64urlEncode(new Uint8Array(encrypted));\n const iv = base64urlEncode(key.iv);\n const expiration = opts.ttl ? now + opts.ttl : \"\";\n const macBaseString = `${macPrefix}*${id}*${key.salt}*${iv}*${encryptedB64}*${expiration}`;\n const mac = await hmacWithPassword(_crypto, pass.integrity, opts.integrity, macBaseString);\n const sealed = `${macBaseString}*${mac.salt}*${mac.digest}`;\n return sealed;\n};\nvar fixedTimeComparison = (a, b) => {\n let mismatch = a.length === b.length ? 0 : 1;\n if (mismatch)\n b = a;\n for (let i = 0; i < a.length; i += 1)\n mismatch |= a.charCodeAt(i) ^ b.charCodeAt(i);\n return mismatch === 0;\n};\nvar unseal = async (_crypto, sealed, password, options) => {\n if (!password)\n throw Error(\"Empty password\");\n const opts = clone(options);\n const now = Date.now() + (opts.localtimeOffsetMsec || 0);\n const parts = sealed.split(\"*\");\n if (parts.length !== 8)\n throw new Error(\"Incorrect number of sealed components\");\n const prefix = parts[0];\n let passwordId = parts[1];\n const encryptionSalt = parts[2];\n const encryptionIv = parts[3];\n const encryptedB64 = parts[4];\n const expiration = parts[5];\n const hmacSalt = parts[6];\n const hmac = parts[7];\n const macBaseString = `${prefix}*${passwordId}*${encryptionSalt}*${encryptionIv}*${encryptedB64}*${expiration}`;\n if (macPrefix !== prefix)\n throw new Error(\"Wrong mac prefix\");\n if (expiration) {\n if (!/^\\d+$/.exec(expiration))\n throw new Error(\"Invalid expiration\");\n const exp = parseInt(expiration, 10);\n if (exp <= now - opts.timestampSkewSec * 1e3)\n throw new Error(\"Expired seal\");\n }\n if (typeof password === \"undefined\" || typeof password === \"string\" && password.length === 0)\n throw new Error(\"Empty password\");\n let pass = \"\";\n passwordId = passwordId || \"default\";\n if (typeof password === \"string\" || password instanceof Uint8Array)\n pass = password;\n else if (!(passwordId in password))\n throw new Error(`Cannot find password: ${passwordId}`);\n else\n pass = password[passwordId];\n pass = normalizePassword(pass);\n const macOptions = opts.integrity;\n macOptions.salt = hmacSalt;\n const mac = await hmacWithPassword(_crypto, pass.integrity, macOptions, macBaseString);\n if (!fixedTimeComparison(mac.digest, hmac))\n throw new Error(\"Bad hmac value\");\n const encrypted = base64urlDecode(encryptedB64);\n const decryptOptions = opts.encryption;\n decryptOptions.salt = encryptionSalt;\n decryptOptions.iv = base64urlDecode(encryptionIv);\n const decrypted = await decrypt(_crypto, pass.encryption, decryptOptions, encrypted);\n if (decrypted)\n return JSON.parse(decrypted);\n return null;\n};\n\nexport { algorithms, base64urlDecode, base64urlEncode, bufferToString, clone, decrypt, defaults, encrypt, generateKey, hmacWithPassword, macFormatVersion, macPrefix, randomBits, seal, stringToBuffer, unseal };\n","import {\n createGetIronSession,\n createGetServerActionIronSession,\n createSealData,\n createUnsealData,\n} from \"./core.js\";\n\nexport * from \"./core.js\";\nexport const sealData = createSealData();\nexport const unsealData = createUnsealData();\nexport const getIronSession = createGetIronSession(sealData, unsealData);\nexport const getServerActionIronSession = createGetServerActionIronSession(\n sealData,\n unsealData,\n);\n"]}
package/dist/index.js CHANGED
@@ -1,3 +1,6 @@
1
+ import { createRequire } from 'module';
2
+
3
+ var require=createRequire(import.meta.url);
1
4
  var __create = Object.create;
2
5
  var __defProp = Object.defineProperty;
3
6
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -525,7 +528,7 @@ function setCookie(res, cookieValue) {
525
528
  cookieValue
526
529
  ]);
527
530
  }
528
- function createSealData(_crypto = globalThis.crypto ??= __require("node:crypto").webcrypto) {
531
+ function createSealData(_crypto = globalThis.crypto ?? __require("node:crypto").webcrypto) {
529
532
  return async function sealData2(data, {
530
533
  password,
531
534
  ttl = fourteenDaysInSeconds
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/.pnpm/cookie@0.6.0/node_modules/cookie/index.js","../src/core.ts","../node_modules/.pnpm/iron-webcrypto@1.0.0/node_modules/iron-webcrypto/dist/index.js","../src/index.ts"],"names":["parse","serialize","decode","seal","sealData","unsealData","getIronSession","getServerActionIronSession"],"mappings":"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","sourcesContent":["/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString\n\n/**\n * RegExp to match field-content in RFC 7230 sec 3.2\n *\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar = VCHAR / obs-text\n * obs-text = %x80-FF\n */\n\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [options]\n * @return {object}\n * @public\n */\n\nfunction parse(str, options) {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string');\n }\n\n var obj = {}\n var opt = options || {};\n var dec = opt.decode || decode;\n\n var index = 0\n while (index < str.length) {\n var eqIdx = str.indexOf('=', index)\n\n // no more cookie pairs\n if (eqIdx === -1) {\n break\n }\n\n var endIdx = str.indexOf(';', index)\n\n if (endIdx === -1) {\n endIdx = str.length\n } else if (endIdx < eqIdx) {\n // backtrack on prior semicolon\n index = str.lastIndexOf(';', eqIdx - 1) + 1\n continue\n }\n\n var key = str.slice(index, eqIdx).trim()\n\n // only assign once\n if (undefined === obj[key]) {\n var val = str.slice(eqIdx + 1, endIdx).trim()\n\n // quoted values\n if (val.charCodeAt(0) === 0x22) {\n val = val.slice(1, -1)\n }\n\n obj[key] = tryDecode(val, dec);\n }\n\n index = endIdx + 1\n }\n\n return obj;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize the a name value pair into a cookie string suitable for\n * http headers. An optional options object specified cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n * => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [options]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, options) {\n var opt = options || {};\n var enc = opt.encode || encode;\n\n if (typeof enc !== 'function') {\n throw new TypeError('option encode is invalid');\n }\n\n if (!fieldContentRegExp.test(name)) {\n throw new TypeError('argument name is invalid');\n }\n\n var value = enc(val);\n\n if (value && !fieldContentRegExp.test(value)) {\n throw new TypeError('argument val is invalid');\n }\n\n var str = name + '=' + value;\n\n if (null != opt.maxAge) {\n var maxAge = opt.maxAge - 0;\n\n if (isNaN(maxAge) || !isFinite(maxAge)) {\n throw new TypeError('option maxAge is invalid')\n }\n\n str += '; Max-Age=' + Math.floor(maxAge);\n }\n\n if (opt.domain) {\n if (!fieldContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n\n str += '; Domain=' + opt.domain;\n }\n\n if (opt.path) {\n if (!fieldContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n\n str += '; Path=' + opt.path;\n }\n\n if (opt.expires) {\n var expires = opt.expires\n\n if (!isDate(expires) || isNaN(expires.valueOf())) {\n throw new TypeError('option expires is invalid');\n }\n\n str += '; Expires=' + expires.toUTCString()\n }\n\n if (opt.httpOnly) {\n str += '; HttpOnly';\n }\n\n if (opt.secure) {\n str += '; Secure';\n }\n\n if (opt.partitioned) {\n str += '; Partitioned'\n }\n\n if (opt.priority) {\n var priority = typeof opt.priority === 'string'\n ? opt.priority.toLowerCase()\n : opt.priority\n\n switch (priority) {\n case 'low':\n str += '; Priority=Low'\n break\n case 'medium':\n str += '; Priority=Medium'\n break\n case 'high':\n str += '; Priority=High'\n break\n default:\n throw new TypeError('option priority is invalid')\n }\n }\n\n if (opt.sameSite) {\n var sameSite = typeof opt.sameSite === 'string'\n ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n\n return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction decode (str) {\n return str.indexOf('%') !== -1\n ? decodeURIComponent(str)\n : str\n}\n\n/**\n * URL-encode value.\n *\n * @param {string} val\n * @returns {string}\n */\n\nfunction encode (val) {\n return encodeURIComponent(val)\n}\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate (val) {\n return __toString.call(val) === '[object Date]' ||\n val instanceof Date\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n try {\n return decode(str);\n } catch (e) {\n return str;\n }\n}\n","import type { IncomingMessage, ServerResponse } from \"http\";\nimport { parse, serialize, type CookieSerializeOptions } from \"cookie\";\nimport {\n defaults as ironDefaults,\n seal as ironSeal,\n unseal as ironUnseal,\n} from \"iron-webcrypto\";\n\ntype PasswordsMap = Record<string, string>;\ntype Password = PasswordsMap | string;\n\ntype RequestType = IncomingMessage | Request;\ntype ResponseType = Response | ServerResponse;\n\n/**\n * {@link https://wicg.github.io/cookie-store/#dictdef-cookielistitem CookieListItem}\n * as specified by W3C.\n */\ninterface CookieListItem\n extends Pick<\n CookieSerializeOptions,\n \"domain\" | \"path\" | \"sameSite\" | \"secure\"\n > {\n /** A string with the name of a cookie. */\n name: string;\n /** A string containing the value of the cookie. */\n value: string;\n /** A number of milliseconds or Date interface containing the expires of the cookie. */\n expires?: CookieSerializeOptions[\"expires\"] | number;\n}\n\n/**\n * Superset of {@link CookieListItem} extending it with\n * the `httpOnly`, `maxAge` and `priority` properties.\n */\ntype ResponseCookie = CookieListItem &\n Pick<CookieSerializeOptions, \"httpOnly\" | \"maxAge\" | \"priority\">;\n\n/**\n * The high-level type definition of the .get() and .set() methods\n * of { cookies() } from \"next/headers\"\n */\nexport interface ICookieHandler {\n get: (name: string) => { name: string; value: string } | undefined;\n set: {\n (name: string, value: string, cookie?: Partial<ResponseCookie>): void;\n (options: ResponseCookie): void;\n };\n}\n\n/**\n * Set-Cookie Attributes do not include `encode`. We omit this from our `cookieOptions` type.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie\n * @see https://developer.chrome.com/docs/devtools/application/cookies/\n */\ntype CookieOptions = Omit<CookieSerializeOptions, \"encode\">;\n\nexport interface IronSessionOptions {\n /**\n * The cookie name that will be used inside the browser. Make sure it's unique\n * given your application.\n *\n * @example 'vercel-session'\n */\n cookieName: string;\n\n /**\n * The password(s) that will be used to encrypt the cookie. Can either be a string\n * or an object.\n *\n * When you provide multiple passwords then all of them will be used to decrypt\n * the cookie. But only the most recent (`= highest key`, `2` in the example)\n * password will be used to encrypt the cookie. This allows password rotation.\n *\n * @example { 1: 'password-1', 2: 'password-2' }\n */\n password: Password;\n\n /**\n * The time (in seconds) that the session will be valid for. Also sets the\n * `max-age` attribute of the cookie automatically (`= ttl - 60s`, so that the\n * cookie always expire before the session).\n *\n * `ttl = 0` means no expiration.\n *\n * @default 1209600\n */\n ttl?: number;\n\n /**\n * The options that will be passed to the cookie library.\n *\n * If you want to use \"session cookies\" (cookies that are deleted when the browser\n * is closed) then you need to pass `cookieOptions: { maxAge: undefined }`\n *\n * @see https://github.com/jshttp/cookie#options-1\n */\n cookieOptions?: CookieOptions;\n}\n\ntype OverridableOptions = Pick<IronSessionOptions, \"cookieOptions\" | \"ttl\">;\n\nexport type IronSession<T> = T & {\n /**\n * Destroys the session data and removes the cookie.\n */\n readonly destroy: (destroyOptions?: OverridableOptions) => Promise<void>;\n\n /**\n * Encrypts the session data and sets the cookie.\n */\n readonly save: (saveOptions?: OverridableOptions) => Promise<void>;\n};\n\n// default time allowed to check for iron seal validity when ttl passed\n// see https://hapi.dev/module/iron/api/?v=7.0.1#options\nconst timestampSkewSec = 60;\nconst fourteenDaysInSeconds = 14 * 24 * 3600;\n\n// We store a token major version to handle data format changes so that the cookies\n// can be kept alive between upgrades, no need to disconnect everyone.\nconst currentMajorVersion = 2;\nconst versionDelimiter = \"~\";\n\nconst defaultOptions: Required<OverridableOptions> = {\n ttl: fourteenDaysInSeconds,\n cookieOptions: { httpOnly: true, secure: true, sameSite: \"lax\", path: \"/\" },\n};\n\nfunction normalizeStringPasswordToMap(password: Password): PasswordsMap {\n return typeof password === \"string\" ? { 1: password } : password;\n}\n\nfunction parseSeal(seal: string): {\n sealWithoutVersion: string;\n tokenVersion: number | null;\n} {\n const [sealWithoutVersion, tokenVersionAsString] =\n seal.split(versionDelimiter);\n const tokenVersion =\n tokenVersionAsString == null ? null : parseInt(tokenVersionAsString, 10);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return { sealWithoutVersion: sealWithoutVersion!, tokenVersion };\n}\n\nfunction computeCookieMaxAge(ttl: number): number {\n if (ttl === 0) {\n // ttl = 0 means no expiration\n // but in reality cookies have to expire (can't have no max-age)\n // 2147483647 is the max value for max-age in cookies\n // see https://stackoverflow.com/a/11685301/147079\n return 2147483647;\n }\n\n // The next line makes sure browser will expire cookies before seals are considered expired by the server.\n // It also allows for clock difference of 60 seconds between server and clients.\n return ttl - timestampSkewSec;\n}\n\nfunction getCookie(req: RequestType, cookieName: string): string {\n return (\n parse(\n (\"headers\" in req && typeof req.headers.get === \"function\"\n ? req.headers.get(\"cookie\")\n : (req as IncomingMessage).headers.cookie) ?? \"\",\n )[cookieName] ?? \"\"\n );\n}\n\nfunction getServerActionCookie(\n cookieName: string,\n cookieHandler: ICookieHandler,\n): string {\n const cookieObject = cookieHandler.get(cookieName);\n const cookie = cookieObject?.value;\n if (typeof cookie === \"string\") {\n return cookie;\n }\n return \"\";\n}\n\nfunction setCookie(res: ResponseType, cookieValue: string): void {\n if (\"headers\" in res && typeof res.headers.append === \"function\") {\n res.headers.append(\"set-cookie\", cookieValue);\n return;\n }\n let existingSetCookie = (res as ServerResponse).getHeader(\"set-cookie\") ?? [];\n if (!Array.isArray(existingSetCookie)) {\n existingSetCookie = [existingSetCookie.toString()];\n }\n (res as ServerResponse).setHeader(\"set-cookie\", [\n ...existingSetCookie,\n cookieValue,\n ]);\n}\n\nexport function createSealData(\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n _crypto: Crypto = (globalThis.crypto ??= require(\"node:crypto\").webcrypto),\n) {\n return async function sealData(\n data: unknown,\n {\n password,\n ttl = fourteenDaysInSeconds,\n }: { password: Password; ttl?: number },\n ): Promise<string> {\n const passwordsMap = normalizeStringPasswordToMap(password);\n\n const mostRecentPasswordId = Math.max(\n ...Object.keys(passwordsMap).map(Number),\n );\n const passwordForSeal = {\n id: mostRecentPasswordId.toString(),\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n secret: passwordsMap[mostRecentPasswordId]!,\n };\n\n const seal = await ironSeal(_crypto, data, passwordForSeal, {\n ...ironDefaults,\n ttl: ttl * 1000,\n });\n\n return `${seal}${versionDelimiter}${currentMajorVersion}`;\n };\n}\n\nexport function createUnsealData(\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n _crypto: Crypto = (globalThis.crypto ??= require(\"node:crypto\").webcrypto),\n) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return async function unsealData<T extends {} = {}>(\n seal: string,\n {\n password,\n ttl = fourteenDaysInSeconds,\n }: { password: Password; ttl?: number },\n ): Promise<T> {\n const passwordsMap = normalizeStringPasswordToMap(password);\n const { sealWithoutVersion, tokenVersion } = parseSeal(seal);\n\n try {\n const data =\n (await ironUnseal(_crypto, sealWithoutVersion, passwordsMap, {\n ...ironDefaults,\n ttl: ttl * 1000,\n })) /* c8 ignore next */ ?? {};\n\n if (tokenVersion === 2) {\n return data as T;\n }\n\n // @ts-expect-error `persistent` does not exist on newer tokens\n return { ...data.persistent } as T;\n } catch (error) {\n if (\n error instanceof Error &&\n /^(Expired seal|Bad hmac value|Cannot find password|Incorrect number of sealed components)/.test(\n error.message,\n )\n ) {\n // if seal expired or\n // if seal is not valid (encrypted using a different password, when passwords are badly rotated) or\n // if we can't find back the password in the seal\n // then we just start a new session over\n return {} as T;\n }\n\n /* c8 ignore next 2 */\n throw error;\n }\n };\n}\n\nfunction mergeOptions(\n userSessionOptions: IronSessionOptions,\n overrides?: OverridableOptions,\n): Required<IronSessionOptions> {\n const options: Required<IronSessionOptions> = {\n ...defaultOptions,\n ...userSessionOptions,\n ...overrides,\n cookieOptions: {\n ...defaultOptions.cookieOptions,\n ...userSessionOptions.cookieOptions,\n ...overrides?.cookieOptions,\n },\n };\n\n if (\n userSessionOptions.cookieOptions &&\n \"maxAge\" in userSessionOptions.cookieOptions\n ) {\n if (userSessionOptions.cookieOptions.maxAge === undefined) {\n // session cookies, do not set maxAge, consider token as infinite\n options.ttl = 0;\n }\n } else {\n options.cookieOptions.maxAge = computeCookieMaxAge(options.ttl);\n }\n\n return options;\n}\n\nexport function createGetIronSession(\n sealData: ReturnType<typeof createSealData>,\n unsealData: ReturnType<typeof createUnsealData>,\n) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return async function getIronSession<T extends {} = {}>(\n req: RequestType,\n res: ResponseType,\n userSessionOptions: IronSessionOptions,\n ): Promise<IronSession<T>> {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!req) {\n throw new Error(\"iron-session: Bad usage. Missing request parameter.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!res) {\n throw new Error(\"iron-session: Bad usage. Missing response parameter.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!userSessionOptions) {\n throw new Error(\"iron-session: Bad usage. Missing options.\");\n }\n\n if (!userSessionOptions.cookieName) {\n throw new Error(\"iron-session: Bad usage. Missing cookie name.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (!userSessionOptions.password) {\n throw new Error(\"iron-session: Bad usage. Missing password.\");\n }\n\n const passwordsMap = normalizeStringPasswordToMap(\n userSessionOptions.password,\n );\n if (Object.values(passwordsMap).some((password) => password.length < 32)) {\n throw new Error(\n \"iron-session: Bad usage. Password must be at least 32 characters long.\",\n );\n }\n\n const options = mergeOptions(userSessionOptions);\n const sealFromCookies = getCookie(req, options.cookieName);\n const session = sealFromCookies\n ? await unsealData<T>(sealFromCookies, {\n password: passwordsMap,\n ttl: options.ttl,\n })\n : ({} as T);\n\n Object.defineProperties(session, {\n save: {\n value: async function save(saveOptions?: OverridableOptions) {\n if (\"headersSent\" in res && res.headersSent) {\n throw new Error(\n \"iron-session: Cannot set session cookie: session.save() was called after headers were sent. Make sure to call it before any res.send() or res.end()\",\n );\n }\n\n const mergedOptions = mergeOptions(userSessionOptions, saveOptions);\n const seal = await sealData(session, {\n password: passwordsMap,\n ttl: mergedOptions.ttl,\n });\n const cookieValue = serialize(\n mergedOptions.cookieName,\n seal,\n mergedOptions.cookieOptions,\n );\n\n if (cookieValue.length > 4096) {\n throw new Error(\n `iron-session: Cookie length is too big (${cookieValue.length} bytes), browsers will refuse it. Try to remove some data.`,\n );\n }\n\n setCookie(res, cookieValue);\n },\n },\n\n destroy: {\n value: async function destroy(destroyOptions?: OverridableOptions) {\n Object.keys(session).forEach((key) => {\n // @ts-expect-error ...\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete session[key];\n });\n\n const mergedOptions = mergeOptions(\n userSessionOptions,\n destroyOptions,\n );\n const cookieValue = serialize(mergedOptions.cookieName, \"\", {\n ...mergedOptions.cookieOptions,\n maxAge: 0,\n });\n\n setCookie(res, cookieValue);\n },\n },\n });\n\n return session as IronSession<T>;\n };\n}\n\nexport function createGetServerActionIronSession(\n sealData: ReturnType<typeof createSealData>,\n unsealData: ReturnType<typeof createUnsealData>,\n) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return async function getServerActionIronSession<T extends {} = {}>(\n userSessionOptions: IronSessionOptions,\n cookieHandler: ICookieHandler,\n ): Promise<IronSession<T>> {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!userSessionOptions) {\n throw new Error(\"iron-session: Bad usage. Missing options.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!cookieHandler) {\n throw new Error(\n \"iron-session: Bad usage. Missing NextJS cookies() handler.\",\n );\n }\n\n if (!userSessionOptions.cookieName) {\n throw new Error(\"iron-session: Bad usage. Missing cookie name.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (!userSessionOptions.password) {\n throw new Error(\"iron-session: Bad usage. Missing password.\");\n }\n\n const passwordsMap = normalizeStringPasswordToMap(\n userSessionOptions.password,\n );\n if (Object.values(passwordsMap).some((password) => password.length < 32)) {\n throw new Error(\n \"iron-session: Bad usage. Password must be at least 32 characters long.\",\n );\n }\n\n const options = mergeOptions(userSessionOptions);\n const sealFromCookies = getServerActionCookie(\n options.cookieName,\n cookieHandler,\n );\n const session = sealFromCookies\n ? await unsealData<T>(sealFromCookies, {\n password: passwordsMap,\n ttl: options.ttl,\n })\n : ({} as T);\n\n Object.defineProperties(session, {\n save: {\n value: async function save(saveOptions?: OverridableOptions) {\n const mergedOptions = mergeOptions(userSessionOptions, saveOptions);\n const seal = await sealData(session, {\n password: passwordsMap,\n ttl: mergedOptions.ttl,\n });\n\n const cookieLength =\n mergedOptions.cookieName.length +\n seal.length +\n JSON.stringify(mergedOptions.cookieOptions).length;\n\n if (cookieLength > 4096) {\n throw new Error(\n `iron-session: Cookie length is too big (${cookieLength} bytes), browsers will refuse it. Try to remove some data.`,\n );\n }\n\n cookieHandler.set(\n mergedOptions.cookieName,\n seal,\n mergedOptions.cookieOptions,\n );\n },\n },\n\n destroy: {\n value: async function destroy(destroyOptions: OverridableOptions) {\n Object.keys(session).forEach((key) => {\n // @ts-expect-error ...\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete session[key];\n });\n const mergedOptions = mergeOptions(\n userSessionOptions,\n destroyOptions,\n );\n const cookieOptions = { ...mergedOptions.cookieOptions, maxAge: 0 };\n\n cookieHandler.set(mergedOptions.cookieName, \"\", cookieOptions);\n },\n },\n });\n\n return session as IronSession<T>;\n };\n}\n\nexport function mergeHeaders(\n ...headersList: (HeadersInit | undefined)[]\n): Headers {\n const mergedHeaders = new Headers();\n headersList.forEach((headers) => {\n new Headers(headers).forEach((value, key) => {\n mergedHeaders.append(key, value);\n });\n });\n return mergedHeaders;\n}\n\nexport function createResponse(\n originalResponse: Response,\n bodyString: string,\n options?: ResponseInit,\n): Response {\n return new Response(bodyString, {\n status: options?.status ?? originalResponse.status,\n statusText: options?.statusText ?? originalResponse.statusText,\n headers: mergeHeaders(options?.headers, originalResponse.headers),\n });\n}\n","// node_modules/.pnpm/@smithy+util-base64@2.0.0/node_modules/@smithy/util-base64/dist-es/constants.browser.js\nvar alphabetByEncoding = {};\nvar alphabetByValue = new Array(64);\nfor (let i = 0, start = \"A\".charCodeAt(0), limit = \"Z\".charCodeAt(0); i + start <= limit; i++) {\n const char = String.fromCharCode(i + start);\n alphabetByEncoding[char] = i;\n alphabetByValue[i] = char;\n}\nfor (let i = 0, start = \"a\".charCodeAt(0), limit = \"z\".charCodeAt(0); i + start <= limit; i++) {\n const char = String.fromCharCode(i + start);\n const index = i + 26;\n alphabetByEncoding[char] = index;\n alphabetByValue[index] = char;\n}\nfor (let i = 0; i < 10; i++) {\n alphabetByEncoding[i.toString(10)] = i + 52;\n const char = i.toString(10);\n const index = i + 52;\n alphabetByEncoding[char] = index;\n alphabetByValue[index] = char;\n}\nalphabetByEncoding[\"+\"] = 62;\nalphabetByValue[62] = \"+\";\nalphabetByEncoding[\"/\"] = 63;\nalphabetByValue[63] = \"/\";\nvar bitsPerLetter = 6;\nvar bitsPerByte = 8;\nvar maxLetterValue = 63;\n\n// node_modules/.pnpm/@smithy+util-base64@2.0.0/node_modules/@smithy/util-base64/dist-es/fromBase64.browser.js\nvar fromBase64 = (input) => {\n let totalByteLength = input.length / 4 * 3;\n if (input.slice(-2) === \"==\") {\n totalByteLength -= 2;\n } else if (input.slice(-1) === \"=\") {\n totalByteLength--;\n }\n const out = new ArrayBuffer(totalByteLength);\n const dataView = new DataView(out);\n for (let i = 0; i < input.length; i += 4) {\n let bits = 0;\n let bitLength = 0;\n for (let j = i, limit = i + 3; j <= limit; j++) {\n if (input[j] !== \"=\") {\n if (!(input[j] in alphabetByEncoding)) {\n throw new TypeError(`Invalid character ${input[j]} in base64 string.`);\n }\n bits |= alphabetByEncoding[input[j]] << (limit - j) * bitsPerLetter;\n bitLength += bitsPerLetter;\n } else {\n bits >>= bitsPerLetter;\n }\n }\n const chunkOffset = i / 4 * 3;\n bits >>= bitLength % bitsPerByte;\n const byteLength = Math.floor(bitLength / bitsPerByte);\n for (let k = 0; k < byteLength; k++) {\n const offset = (byteLength - k - 1) * bitsPerByte;\n dataView.setUint8(chunkOffset + k, (bits & 255 << offset) >> offset);\n }\n }\n return new Uint8Array(out);\n};\n\n// node_modules/.pnpm/@smithy+util-base64@2.0.0/node_modules/@smithy/util-base64/dist-es/toBase64.browser.js\nfunction toBase64(input) {\n let str = \"\";\n for (let i = 0; i < input.length; i += 3) {\n let bits = 0;\n let bitLength = 0;\n for (let j = i, limit = Math.min(i + 3, input.length); j < limit; j++) {\n bits |= input[j] << (limit - j - 1) * bitsPerByte;\n bitLength += bitsPerByte;\n }\n const bitClusterCount = Math.ceil(bitLength / bitsPerLetter);\n bits <<= bitClusterCount * bitsPerLetter - bitLength;\n for (let k = 1; k <= bitClusterCount; k++) {\n const offset = (bitClusterCount - k) * bitsPerLetter;\n str += alphabetByValue[(bits & maxLetterValue << offset) >> offset];\n }\n str += \"==\".slice(0, 4 - bitClusterCount);\n }\n return str;\n}\n\n// src/index.ts\nvar stringToBuffer = (value) => {\n return new TextEncoder().encode(value);\n};\nvar bufferToString = (value) => {\n return new TextDecoder().decode(value);\n};\nvar base64urlEncode = (value) => toBase64(typeof value === \"string\" ? stringToBuffer(value) : value).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\nvar base64urlDecode = (value) => fromBase64(\n value.replace(/-/g, \"+\").replace(/_/g, \"/\") + Array((4 - value.length % 4) % 4 + 1).join(\"=\")\n);\nvar defaults = {\n encryption: { saltBits: 256, algorithm: \"aes-256-cbc\", iterations: 1, minPasswordlength: 32 },\n integrity: { saltBits: 256, algorithm: \"sha256\", iterations: 1, minPasswordlength: 32 },\n ttl: 0,\n timestampSkewSec: 60,\n localtimeOffsetMsec: 0\n};\nvar clone = (options) => ({\n ...options,\n encryption: { ...options.encryption },\n integrity: { ...options.integrity }\n});\nvar algorithms = {\n \"aes-128-ctr\": { keyBits: 128, ivBits: 128, name: \"AES-CTR\" },\n \"aes-256-cbc\": { keyBits: 256, ivBits: 128, name: \"AES-CBC\" },\n sha256: { keyBits: 256, name: \"SHA-256\" }\n};\nvar macFormatVersion = \"2\";\nvar macPrefix = `Fe26.${macFormatVersion}`;\nvar randomBytes = (_crypto, size) => {\n const bytes = new Uint8Array(size);\n _crypto.getRandomValues(bytes);\n return bytes;\n};\nvar randomBits = (_crypto, bits) => {\n if (bits < 1)\n throw Error(\"Invalid random bits count\");\n const bytes = Math.ceil(bits / 8);\n return randomBytes(_crypto, bytes);\n};\nvar pbkdf2 = async (_crypto, password, salt, iterations, keyLength, hash) => {\n const passwordBuffer = stringToBuffer(password);\n const importedKey = await _crypto.subtle.importKey(\"raw\", passwordBuffer, \"PBKDF2\", false, [\n \"deriveBits\"\n ]);\n const saltBuffer = stringToBuffer(salt);\n const params = { name: \"PBKDF2\", hash, salt: saltBuffer, iterations };\n const derivation = await _crypto.subtle.deriveBits(params, importedKey, keyLength * 8);\n return derivation;\n};\nvar generateKey = async (_crypto, password, options) => {\n var _a;\n if (!(password == null ? void 0 : password.length))\n throw new Error(\"Empty password\");\n if (options == null || typeof options !== \"object\")\n throw new Error(\"Bad options\");\n if (!(options.algorithm in algorithms))\n throw new Error(`Unknown algorithm: ${options.algorithm}`);\n const algorithm = algorithms[options.algorithm];\n const result = {};\n const hmac = (_a = options.hmac) != null ? _a : false;\n const id = hmac ? { name: \"HMAC\", hash: algorithm.name } : { name: algorithm.name };\n const usage = hmac ? [\"sign\", \"verify\"] : [\"encrypt\", \"decrypt\"];\n if (typeof password === \"string\") {\n if (password.length < options.minPasswordlength)\n throw new Error(\n `Password string too short (min ${options.minPasswordlength} characters required)`\n );\n let { salt = \"\" } = options;\n if (!salt) {\n const { saltBits = 0 } = options;\n if (!saltBits)\n throw new Error(\"Missing salt and saltBits options\");\n const randomSalt = randomBits(_crypto, saltBits);\n salt = [...new Uint8Array(randomSalt)].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n }\n const derivedKey = await pbkdf2(\n _crypto,\n password,\n salt,\n options.iterations,\n algorithm.keyBits / 8,\n \"SHA-1\"\n );\n const importedEncryptionKey = await _crypto.subtle.importKey(\n \"raw\",\n derivedKey,\n id,\n false,\n usage\n );\n result.key = importedEncryptionKey;\n result.salt = salt;\n } else {\n if (password.length < algorithm.keyBits / 8)\n throw new Error(\"Key buffer (password) too small\");\n result.key = await _crypto.subtle.importKey(\"raw\", password, id, false, usage);\n result.salt = \"\";\n }\n if (options.iv)\n result.iv = options.iv;\n else if (\"ivBits\" in algorithm)\n result.iv = randomBits(_crypto, algorithm.ivBits);\n return result;\n};\nvar encrypt = async (_crypto, password, options, data) => {\n const key = await generateKey(_crypto, password, options);\n const textBuffer = stringToBuffer(data);\n const encrypted = await _crypto.subtle.encrypt(\n { name: algorithms[options.algorithm].name, iv: key.iv },\n key.key,\n textBuffer\n );\n return { encrypted: new Uint8Array(encrypted), key };\n};\nvar decrypt = async (_crypto, password, options, data) => {\n const key = await generateKey(_crypto, password, options);\n const decrypted = await _crypto.subtle.decrypt(\n { name: algorithms[options.algorithm].name, iv: key.iv },\n key.key,\n typeof data === \"string\" ? stringToBuffer(data) : data\n );\n return bufferToString(new Uint8Array(decrypted));\n};\nvar hmacWithPassword = async (_crypto, password, options, data) => {\n const key = await generateKey(_crypto, password, { ...options, hmac: true });\n const textBuffer = stringToBuffer(data);\n const signed = await _crypto.subtle.sign({ name: \"HMAC\" }, key.key, textBuffer);\n const digest = base64urlEncode(new Uint8Array(signed));\n return { digest, salt: key.salt };\n};\nvar normalizePassword = (password) => {\n if (typeof password === \"string\" || password instanceof Uint8Array)\n return { encryption: password, integrity: password };\n if (\"secret\" in password)\n return { id: password.id, encryption: password.secret, integrity: password.secret };\n return { id: password.id, encryption: password.encryption, integrity: password.integrity };\n};\nvar seal = async (_crypto, object, password, options) => {\n if (!password)\n throw Error(\"Empty password\");\n const opts = clone(options);\n const now = Date.now() + (opts.localtimeOffsetMsec || 0);\n const objectString = JSON.stringify(object);\n const pass = normalizePassword(password);\n const { id = \"\" } = pass;\n if (id && !/^\\w+$/.test(id))\n throw new Error(\"Invalid password id\");\n const { encrypted, key } = await encrypt(_crypto, pass.encryption, opts.encryption, objectString);\n const encryptedB64 = base64urlEncode(new Uint8Array(encrypted));\n const iv = base64urlEncode(key.iv);\n const expiration = opts.ttl ? now + opts.ttl : \"\";\n const macBaseString = `${macPrefix}*${id}*${key.salt}*${iv}*${encryptedB64}*${expiration}`;\n const mac = await hmacWithPassword(_crypto, pass.integrity, opts.integrity, macBaseString);\n const sealed = `${macBaseString}*${mac.salt}*${mac.digest}`;\n return sealed;\n};\nvar fixedTimeComparison = (a, b) => {\n let mismatch = a.length === b.length ? 0 : 1;\n if (mismatch)\n b = a;\n for (let i = 0; i < a.length; i += 1)\n mismatch |= a.charCodeAt(i) ^ b.charCodeAt(i);\n return mismatch === 0;\n};\nvar unseal = async (_crypto, sealed, password, options) => {\n if (!password)\n throw Error(\"Empty password\");\n const opts = clone(options);\n const now = Date.now() + (opts.localtimeOffsetMsec || 0);\n const parts = sealed.split(\"*\");\n if (parts.length !== 8)\n throw new Error(\"Incorrect number of sealed components\");\n const prefix = parts[0];\n let passwordId = parts[1];\n const encryptionSalt = parts[2];\n const encryptionIv = parts[3];\n const encryptedB64 = parts[4];\n const expiration = parts[5];\n const hmacSalt = parts[6];\n const hmac = parts[7];\n const macBaseString = `${prefix}*${passwordId}*${encryptionSalt}*${encryptionIv}*${encryptedB64}*${expiration}`;\n if (macPrefix !== prefix)\n throw new Error(\"Wrong mac prefix\");\n if (expiration) {\n if (!/^\\d+$/.exec(expiration))\n throw new Error(\"Invalid expiration\");\n const exp = parseInt(expiration, 10);\n if (exp <= now - opts.timestampSkewSec * 1e3)\n throw new Error(\"Expired seal\");\n }\n if (typeof password === \"undefined\" || typeof password === \"string\" && password.length === 0)\n throw new Error(\"Empty password\");\n let pass = \"\";\n passwordId = passwordId || \"default\";\n if (typeof password === \"string\" || password instanceof Uint8Array)\n pass = password;\n else if (!(passwordId in password))\n throw new Error(`Cannot find password: ${passwordId}`);\n else\n pass = password[passwordId];\n pass = normalizePassword(pass);\n const macOptions = opts.integrity;\n macOptions.salt = hmacSalt;\n const mac = await hmacWithPassword(_crypto, pass.integrity, macOptions, macBaseString);\n if (!fixedTimeComparison(mac.digest, hmac))\n throw new Error(\"Bad hmac value\");\n const encrypted = base64urlDecode(encryptedB64);\n const decryptOptions = opts.encryption;\n decryptOptions.salt = encryptionSalt;\n decryptOptions.iv = base64urlDecode(encryptionIv);\n const decrypted = await decrypt(_crypto, pass.encryption, decryptOptions, encrypted);\n if (decrypted)\n return JSON.parse(decrypted);\n return null;\n};\n\nexport { algorithms, base64urlDecode, base64urlEncode, bufferToString, clone, decrypt, defaults, encrypt, generateKey, hmacWithPassword, macFormatVersion, macPrefix, randomBits, seal, stringToBuffer, unseal };\n","import {\n createGetIronSession,\n createGetServerActionIronSession,\n createSealData,\n createUnsealData,\n} from \"./core.js\";\n\nexport * from \"./core.js\";\nexport const sealData = createSealData();\nexport const unsealData = createUnsealData();\nexport const getIronSession = createGetIronSession(sealData, unsealData);\nexport const getServerActionIronSession = createGetServerActionIronSession(\n sealData,\n unsealData,\n);\n"]}
1
+ {"version":3,"sources":["../node_modules/.pnpm/cookie@0.6.0/node_modules/cookie/index.js","../src/core.ts","../node_modules/.pnpm/iron-webcrypto@1.0.0/node_modules/iron-webcrypto/dist/index.js","../src/index.ts"],"names":["parse","serialize","decode","seal","sealData","unsealData","getIronSession","getServerActionIronSession"],"mappings":"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","sourcesContent":["/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString\n\n/**\n * RegExp to match field-content in RFC 7230 sec 3.2\n *\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar = VCHAR / obs-text\n * obs-text = %x80-FF\n */\n\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [options]\n * @return {object}\n * @public\n */\n\nfunction parse(str, options) {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string');\n }\n\n var obj = {}\n var opt = options || {};\n var dec = opt.decode || decode;\n\n var index = 0\n while (index < str.length) {\n var eqIdx = str.indexOf('=', index)\n\n // no more cookie pairs\n if (eqIdx === -1) {\n break\n }\n\n var endIdx = str.indexOf(';', index)\n\n if (endIdx === -1) {\n endIdx = str.length\n } else if (endIdx < eqIdx) {\n // backtrack on prior semicolon\n index = str.lastIndexOf(';', eqIdx - 1) + 1\n continue\n }\n\n var key = str.slice(index, eqIdx).trim()\n\n // only assign once\n if (undefined === obj[key]) {\n var val = str.slice(eqIdx + 1, endIdx).trim()\n\n // quoted values\n if (val.charCodeAt(0) === 0x22) {\n val = val.slice(1, -1)\n }\n\n obj[key] = tryDecode(val, dec);\n }\n\n index = endIdx + 1\n }\n\n return obj;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize the a name value pair into a cookie string suitable for\n * http headers. An optional options object specified cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n * => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [options]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, options) {\n var opt = options || {};\n var enc = opt.encode || encode;\n\n if (typeof enc !== 'function') {\n throw new TypeError('option encode is invalid');\n }\n\n if (!fieldContentRegExp.test(name)) {\n throw new TypeError('argument name is invalid');\n }\n\n var value = enc(val);\n\n if (value && !fieldContentRegExp.test(value)) {\n throw new TypeError('argument val is invalid');\n }\n\n var str = name + '=' + value;\n\n if (null != opt.maxAge) {\n var maxAge = opt.maxAge - 0;\n\n if (isNaN(maxAge) || !isFinite(maxAge)) {\n throw new TypeError('option maxAge is invalid')\n }\n\n str += '; Max-Age=' + Math.floor(maxAge);\n }\n\n if (opt.domain) {\n if (!fieldContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n\n str += '; Domain=' + opt.domain;\n }\n\n if (opt.path) {\n if (!fieldContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n\n str += '; Path=' + opt.path;\n }\n\n if (opt.expires) {\n var expires = opt.expires\n\n if (!isDate(expires) || isNaN(expires.valueOf())) {\n throw new TypeError('option expires is invalid');\n }\n\n str += '; Expires=' + expires.toUTCString()\n }\n\n if (opt.httpOnly) {\n str += '; HttpOnly';\n }\n\n if (opt.secure) {\n str += '; Secure';\n }\n\n if (opt.partitioned) {\n str += '; Partitioned'\n }\n\n if (opt.priority) {\n var priority = typeof opt.priority === 'string'\n ? opt.priority.toLowerCase()\n : opt.priority\n\n switch (priority) {\n case 'low':\n str += '; Priority=Low'\n break\n case 'medium':\n str += '; Priority=Medium'\n break\n case 'high':\n str += '; Priority=High'\n break\n default:\n throw new TypeError('option priority is invalid')\n }\n }\n\n if (opt.sameSite) {\n var sameSite = typeof opt.sameSite === 'string'\n ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n\n return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction decode (str) {\n return str.indexOf('%') !== -1\n ? decodeURIComponent(str)\n : str\n}\n\n/**\n * URL-encode value.\n *\n * @param {string} val\n * @returns {string}\n */\n\nfunction encode (val) {\n return encodeURIComponent(val)\n}\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate (val) {\n return __toString.call(val) === '[object Date]' ||\n val instanceof Date\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n try {\n return decode(str);\n } catch (e) {\n return str;\n }\n}\n","import type { IncomingMessage, ServerResponse } from \"http\";\nimport { parse, serialize, type CookieSerializeOptions } from \"cookie\";\nimport {\n defaults as ironDefaults,\n seal as ironSeal,\n unseal as ironUnseal,\n} from \"iron-webcrypto\";\n\ntype PasswordsMap = Record<string, string>;\ntype Password = PasswordsMap | string;\n\ntype RequestType = IncomingMessage | Request;\ntype ResponseType = Response | ServerResponse;\n\n/**\n * {@link https://wicg.github.io/cookie-store/#dictdef-cookielistitem CookieListItem}\n * as specified by W3C.\n */\ninterface CookieListItem\n extends Pick<\n CookieSerializeOptions,\n \"domain\" | \"path\" | \"sameSite\" | \"secure\"\n > {\n /** A string with the name of a cookie. */\n name: string;\n /** A string containing the value of the cookie. */\n value: string;\n /** A number of milliseconds or Date interface containing the expires of the cookie. */\n expires?: CookieSerializeOptions[\"expires\"] | number;\n}\n\n/**\n * Superset of {@link CookieListItem} extending it with\n * the `httpOnly`, `maxAge` and `priority` properties.\n */\ntype ResponseCookie = CookieListItem &\n Pick<CookieSerializeOptions, \"httpOnly\" | \"maxAge\" | \"priority\">;\n\n/**\n * The high-level type definition of the .get() and .set() methods\n * of { cookies() } from \"next/headers\"\n */\nexport interface ICookieHandler {\n get: (name: string) => { name: string; value: string } | undefined;\n set: {\n (name: string, value: string, cookie?: Partial<ResponseCookie>): void;\n (options: ResponseCookie): void;\n };\n}\n\n/**\n * Set-Cookie Attributes do not include `encode`. We omit this from our `cookieOptions` type.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie\n * @see https://developer.chrome.com/docs/devtools/application/cookies/\n */\ntype CookieOptions = Omit<CookieSerializeOptions, \"encode\">;\n\nexport interface IronSessionOptions {\n /**\n * The cookie name that will be used inside the browser. Make sure it's unique\n * given your application.\n *\n * @example 'vercel-session'\n */\n cookieName: string;\n\n /**\n * The password(s) that will be used to encrypt the cookie. Can either be a string\n * or an object.\n *\n * When you provide multiple passwords then all of them will be used to decrypt\n * the cookie. But only the most recent (`= highest key`, `2` in the example)\n * password will be used to encrypt the cookie. This allows password rotation.\n *\n * @example { 1: 'password-1', 2: 'password-2' }\n */\n password: Password;\n\n /**\n * The time (in seconds) that the session will be valid for. Also sets the\n * `max-age` attribute of the cookie automatically (`= ttl - 60s`, so that the\n * cookie always expire before the session).\n *\n * `ttl = 0` means no expiration.\n *\n * @default 1209600\n */\n ttl?: number;\n\n /**\n * The options that will be passed to the cookie library.\n *\n * If you want to use \"session cookies\" (cookies that are deleted when the browser\n * is closed) then you need to pass `cookieOptions: { maxAge: undefined }`\n *\n * @see https://github.com/jshttp/cookie#options-1\n */\n cookieOptions?: CookieOptions;\n}\n\ntype OverridableOptions = Pick<IronSessionOptions, \"cookieOptions\" | \"ttl\">;\n\nexport type IronSession<T> = T & {\n /**\n * Destroys the session data and removes the cookie.\n */\n readonly destroy: (destroyOptions?: OverridableOptions) => Promise<void>;\n\n /**\n * Encrypts the session data and sets the cookie.\n */\n readonly save: (saveOptions?: OverridableOptions) => Promise<void>;\n};\n\n// default time allowed to check for iron seal validity when ttl passed\n// see https://hapi.dev/module/iron/api/?v=7.0.1#options\nconst timestampSkewSec = 60;\nconst fourteenDaysInSeconds = 14 * 24 * 3600;\n\n// We store a token major version to handle data format changes so that the cookies\n// can be kept alive between upgrades, no need to disconnect everyone.\nconst currentMajorVersion = 2;\nconst versionDelimiter = \"~\";\n\nconst defaultOptions: Required<OverridableOptions> = {\n ttl: fourteenDaysInSeconds,\n cookieOptions: { httpOnly: true, secure: true, sameSite: \"lax\", path: \"/\" },\n};\n\nfunction normalizeStringPasswordToMap(password: Password): PasswordsMap {\n return typeof password === \"string\" ? { 1: password } : password;\n}\n\nfunction parseSeal(seal: string): {\n sealWithoutVersion: string;\n tokenVersion: number | null;\n} {\n const [sealWithoutVersion, tokenVersionAsString] =\n seal.split(versionDelimiter);\n const tokenVersion =\n tokenVersionAsString == null ? null : parseInt(tokenVersionAsString, 10);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return { sealWithoutVersion: sealWithoutVersion!, tokenVersion };\n}\n\nfunction computeCookieMaxAge(ttl: number): number {\n if (ttl === 0) {\n // ttl = 0 means no expiration\n // but in reality cookies have to expire (can't have no max-age)\n // 2147483647 is the max value for max-age in cookies\n // see https://stackoverflow.com/a/11685301/147079\n return 2147483647;\n }\n\n // The next line makes sure browser will expire cookies before seals are considered expired by the server.\n // It also allows for clock difference of 60 seconds between server and clients.\n return ttl - timestampSkewSec;\n}\n\nfunction getCookie(req: RequestType, cookieName: string): string {\n return (\n parse(\n (\"headers\" in req && typeof req.headers.get === \"function\"\n ? req.headers.get(\"cookie\")\n : (req as IncomingMessage).headers.cookie) ?? \"\",\n )[cookieName] ?? \"\"\n );\n}\n\nfunction getServerActionCookie(\n cookieName: string,\n cookieHandler: ICookieHandler,\n): string {\n const cookieObject = cookieHandler.get(cookieName);\n const cookie = cookieObject?.value;\n if (typeof cookie === \"string\") {\n return cookie;\n }\n return \"\";\n}\n\nfunction setCookie(res: ResponseType, cookieValue: string): void {\n if (\"headers\" in res && typeof res.headers.append === \"function\") {\n res.headers.append(\"set-cookie\", cookieValue);\n return;\n }\n let existingSetCookie = (res as ServerResponse).getHeader(\"set-cookie\") ?? [];\n if (!Array.isArray(existingSetCookie)) {\n existingSetCookie = [existingSetCookie.toString()];\n }\n (res as ServerResponse).setHeader(\"set-cookie\", [\n ...existingSetCookie,\n cookieValue,\n ]);\n}\n\nexport function createSealData(\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n _crypto: Crypto = globalThis.crypto ?? require(\"node:crypto\").webcrypto,\n) {\n return async function sealData(\n data: unknown,\n {\n password,\n ttl = fourteenDaysInSeconds,\n }: { password: Password; ttl?: number },\n ): Promise<string> {\n const passwordsMap = normalizeStringPasswordToMap(password);\n\n const mostRecentPasswordId = Math.max(\n ...Object.keys(passwordsMap).map(Number),\n );\n const passwordForSeal = {\n id: mostRecentPasswordId.toString(),\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n secret: passwordsMap[mostRecentPasswordId]!,\n };\n\n const seal = await ironSeal(_crypto, data, passwordForSeal, {\n ...ironDefaults,\n ttl: ttl * 1000,\n });\n\n return `${seal}${versionDelimiter}${currentMajorVersion}`;\n };\n}\n\nexport function createUnsealData(\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n _crypto: Crypto = (globalThis.crypto ??= require(\"node:crypto\").webcrypto),\n) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return async function unsealData<T extends {} = {}>(\n seal: string,\n {\n password,\n ttl = fourteenDaysInSeconds,\n }: { password: Password; ttl?: number },\n ): Promise<T> {\n const passwordsMap = normalizeStringPasswordToMap(password);\n const { sealWithoutVersion, tokenVersion } = parseSeal(seal);\n\n try {\n const data =\n (await ironUnseal(_crypto, sealWithoutVersion, passwordsMap, {\n ...ironDefaults,\n ttl: ttl * 1000,\n })) /* c8 ignore next */ ?? {};\n\n if (tokenVersion === 2) {\n return data as T;\n }\n\n // @ts-expect-error `persistent` does not exist on newer tokens\n return { ...data.persistent } as T;\n } catch (error) {\n if (\n error instanceof Error &&\n /^(Expired seal|Bad hmac value|Cannot find password|Incorrect number of sealed components)/.test(\n error.message,\n )\n ) {\n // if seal expired or\n // if seal is not valid (encrypted using a different password, when passwords are badly rotated) or\n // if we can't find back the password in the seal\n // then we just start a new session over\n return {} as T;\n }\n\n /* c8 ignore next 2 */\n throw error;\n }\n };\n}\n\nfunction mergeOptions(\n userSessionOptions: IronSessionOptions,\n overrides?: OverridableOptions,\n): Required<IronSessionOptions> {\n const options: Required<IronSessionOptions> = {\n ...defaultOptions,\n ...userSessionOptions,\n ...overrides,\n cookieOptions: {\n ...defaultOptions.cookieOptions,\n ...userSessionOptions.cookieOptions,\n ...overrides?.cookieOptions,\n },\n };\n\n if (\n userSessionOptions.cookieOptions &&\n \"maxAge\" in userSessionOptions.cookieOptions\n ) {\n if (userSessionOptions.cookieOptions.maxAge === undefined) {\n // session cookies, do not set maxAge, consider token as infinite\n options.ttl = 0;\n }\n } else {\n options.cookieOptions.maxAge = computeCookieMaxAge(options.ttl);\n }\n\n return options;\n}\n\nexport function createGetIronSession(\n sealData: ReturnType<typeof createSealData>,\n unsealData: ReturnType<typeof createUnsealData>,\n) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return async function getIronSession<T extends {} = {}>(\n req: RequestType,\n res: ResponseType,\n userSessionOptions: IronSessionOptions,\n ): Promise<IronSession<T>> {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!req) {\n throw new Error(\"iron-session: Bad usage. Missing request parameter.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!res) {\n throw new Error(\"iron-session: Bad usage. Missing response parameter.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!userSessionOptions) {\n throw new Error(\"iron-session: Bad usage. Missing options.\");\n }\n\n if (!userSessionOptions.cookieName) {\n throw new Error(\"iron-session: Bad usage. Missing cookie name.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (!userSessionOptions.password) {\n throw new Error(\"iron-session: Bad usage. Missing password.\");\n }\n\n const passwordsMap = normalizeStringPasswordToMap(\n userSessionOptions.password,\n );\n if (Object.values(passwordsMap).some((password) => password.length < 32)) {\n throw new Error(\n \"iron-session: Bad usage. Password must be at least 32 characters long.\",\n );\n }\n\n const options = mergeOptions(userSessionOptions);\n const sealFromCookies = getCookie(req, options.cookieName);\n const session = sealFromCookies\n ? await unsealData<T>(sealFromCookies, {\n password: passwordsMap,\n ttl: options.ttl,\n })\n : ({} as T);\n\n Object.defineProperties(session, {\n save: {\n value: async function save(saveOptions?: OverridableOptions) {\n if (\"headersSent\" in res && res.headersSent) {\n throw new Error(\n \"iron-session: Cannot set session cookie: session.save() was called after headers were sent. Make sure to call it before any res.send() or res.end()\",\n );\n }\n\n const mergedOptions = mergeOptions(userSessionOptions, saveOptions);\n const seal = await sealData(session, {\n password: passwordsMap,\n ttl: mergedOptions.ttl,\n });\n const cookieValue = serialize(\n mergedOptions.cookieName,\n seal,\n mergedOptions.cookieOptions,\n );\n\n if (cookieValue.length > 4096) {\n throw new Error(\n `iron-session: Cookie length is too big (${cookieValue.length} bytes), browsers will refuse it. Try to remove some data.`,\n );\n }\n\n setCookie(res, cookieValue);\n },\n },\n\n destroy: {\n value: async function destroy(destroyOptions?: OverridableOptions) {\n Object.keys(session).forEach((key) => {\n // @ts-expect-error ...\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete session[key];\n });\n\n const mergedOptions = mergeOptions(\n userSessionOptions,\n destroyOptions,\n );\n const cookieValue = serialize(mergedOptions.cookieName, \"\", {\n ...mergedOptions.cookieOptions,\n maxAge: 0,\n });\n\n setCookie(res, cookieValue);\n },\n },\n });\n\n return session as IronSession<T>;\n };\n}\n\nexport function createGetServerActionIronSession(\n sealData: ReturnType<typeof createSealData>,\n unsealData: ReturnType<typeof createUnsealData>,\n) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return async function getServerActionIronSession<T extends {} = {}>(\n userSessionOptions: IronSessionOptions,\n cookieHandler: ICookieHandler,\n ): Promise<IronSession<T>> {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!userSessionOptions) {\n throw new Error(\"iron-session: Bad usage. Missing options.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/strict-boolean-expressions\n if (!cookieHandler) {\n throw new Error(\n \"iron-session: Bad usage. Missing NextJS cookies() handler.\",\n );\n }\n\n if (!userSessionOptions.cookieName) {\n throw new Error(\"iron-session: Bad usage. Missing cookie name.\");\n }\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (!userSessionOptions.password) {\n throw new Error(\"iron-session: Bad usage. Missing password.\");\n }\n\n const passwordsMap = normalizeStringPasswordToMap(\n userSessionOptions.password,\n );\n if (Object.values(passwordsMap).some((password) => password.length < 32)) {\n throw new Error(\n \"iron-session: Bad usage. Password must be at least 32 characters long.\",\n );\n }\n\n const options = mergeOptions(userSessionOptions);\n const sealFromCookies = getServerActionCookie(\n options.cookieName,\n cookieHandler,\n );\n const session = sealFromCookies\n ? await unsealData<T>(sealFromCookies, {\n password: passwordsMap,\n ttl: options.ttl,\n })\n : ({} as T);\n\n Object.defineProperties(session, {\n save: {\n value: async function save(saveOptions?: OverridableOptions) {\n const mergedOptions = mergeOptions(userSessionOptions, saveOptions);\n const seal = await sealData(session, {\n password: passwordsMap,\n ttl: mergedOptions.ttl,\n });\n\n const cookieLength =\n mergedOptions.cookieName.length +\n seal.length +\n JSON.stringify(mergedOptions.cookieOptions).length;\n\n if (cookieLength > 4096) {\n throw new Error(\n `iron-session: Cookie length is too big (${cookieLength} bytes), browsers will refuse it. Try to remove some data.`,\n );\n }\n\n cookieHandler.set(\n mergedOptions.cookieName,\n seal,\n mergedOptions.cookieOptions,\n );\n },\n },\n\n destroy: {\n value: async function destroy(destroyOptions: OverridableOptions) {\n Object.keys(session).forEach((key) => {\n // @ts-expect-error ...\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete session[key];\n });\n const mergedOptions = mergeOptions(\n userSessionOptions,\n destroyOptions,\n );\n const cookieOptions = { ...mergedOptions.cookieOptions, maxAge: 0 };\n\n cookieHandler.set(mergedOptions.cookieName, \"\", cookieOptions);\n },\n },\n });\n\n return session as IronSession<T>;\n };\n}\n\nexport function mergeHeaders(\n ...headersList: (HeadersInit | undefined)[]\n): Headers {\n const mergedHeaders = new Headers();\n headersList.forEach((headers) => {\n new Headers(headers).forEach((value, key) => {\n mergedHeaders.append(key, value);\n });\n });\n return mergedHeaders;\n}\n\nexport function createResponse(\n originalResponse: Response,\n bodyString: string,\n options?: ResponseInit,\n): Response {\n return new Response(bodyString, {\n status: options?.status ?? originalResponse.status,\n statusText: options?.statusText ?? originalResponse.statusText,\n headers: mergeHeaders(options?.headers, originalResponse.headers),\n });\n}\n","// node_modules/.pnpm/@smithy+util-base64@2.0.0/node_modules/@smithy/util-base64/dist-es/constants.browser.js\nvar alphabetByEncoding = {};\nvar alphabetByValue = new Array(64);\nfor (let i = 0, start = \"A\".charCodeAt(0), limit = \"Z\".charCodeAt(0); i + start <= limit; i++) {\n const char = String.fromCharCode(i + start);\n alphabetByEncoding[char] = i;\n alphabetByValue[i] = char;\n}\nfor (let i = 0, start = \"a\".charCodeAt(0), limit = \"z\".charCodeAt(0); i + start <= limit; i++) {\n const char = String.fromCharCode(i + start);\n const index = i + 26;\n alphabetByEncoding[char] = index;\n alphabetByValue[index] = char;\n}\nfor (let i = 0; i < 10; i++) {\n alphabetByEncoding[i.toString(10)] = i + 52;\n const char = i.toString(10);\n const index = i + 52;\n alphabetByEncoding[char] = index;\n alphabetByValue[index] = char;\n}\nalphabetByEncoding[\"+\"] = 62;\nalphabetByValue[62] = \"+\";\nalphabetByEncoding[\"/\"] = 63;\nalphabetByValue[63] = \"/\";\nvar bitsPerLetter = 6;\nvar bitsPerByte = 8;\nvar maxLetterValue = 63;\n\n// node_modules/.pnpm/@smithy+util-base64@2.0.0/node_modules/@smithy/util-base64/dist-es/fromBase64.browser.js\nvar fromBase64 = (input) => {\n let totalByteLength = input.length / 4 * 3;\n if (input.slice(-2) === \"==\") {\n totalByteLength -= 2;\n } else if (input.slice(-1) === \"=\") {\n totalByteLength--;\n }\n const out = new ArrayBuffer(totalByteLength);\n const dataView = new DataView(out);\n for (let i = 0; i < input.length; i += 4) {\n let bits = 0;\n let bitLength = 0;\n for (let j = i, limit = i + 3; j <= limit; j++) {\n if (input[j] !== \"=\") {\n if (!(input[j] in alphabetByEncoding)) {\n throw new TypeError(`Invalid character ${input[j]} in base64 string.`);\n }\n bits |= alphabetByEncoding[input[j]] << (limit - j) * bitsPerLetter;\n bitLength += bitsPerLetter;\n } else {\n bits >>= bitsPerLetter;\n }\n }\n const chunkOffset = i / 4 * 3;\n bits >>= bitLength % bitsPerByte;\n const byteLength = Math.floor(bitLength / bitsPerByte);\n for (let k = 0; k < byteLength; k++) {\n const offset = (byteLength - k - 1) * bitsPerByte;\n dataView.setUint8(chunkOffset + k, (bits & 255 << offset) >> offset);\n }\n }\n return new Uint8Array(out);\n};\n\n// node_modules/.pnpm/@smithy+util-base64@2.0.0/node_modules/@smithy/util-base64/dist-es/toBase64.browser.js\nfunction toBase64(input) {\n let str = \"\";\n for (let i = 0; i < input.length; i += 3) {\n let bits = 0;\n let bitLength = 0;\n for (let j = i, limit = Math.min(i + 3, input.length); j < limit; j++) {\n bits |= input[j] << (limit - j - 1) * bitsPerByte;\n bitLength += bitsPerByte;\n }\n const bitClusterCount = Math.ceil(bitLength / bitsPerLetter);\n bits <<= bitClusterCount * bitsPerLetter - bitLength;\n for (let k = 1; k <= bitClusterCount; k++) {\n const offset = (bitClusterCount - k) * bitsPerLetter;\n str += alphabetByValue[(bits & maxLetterValue << offset) >> offset];\n }\n str += \"==\".slice(0, 4 - bitClusterCount);\n }\n return str;\n}\n\n// src/index.ts\nvar stringToBuffer = (value) => {\n return new TextEncoder().encode(value);\n};\nvar bufferToString = (value) => {\n return new TextDecoder().decode(value);\n};\nvar base64urlEncode = (value) => toBase64(typeof value === \"string\" ? stringToBuffer(value) : value).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\nvar base64urlDecode = (value) => fromBase64(\n value.replace(/-/g, \"+\").replace(/_/g, \"/\") + Array((4 - value.length % 4) % 4 + 1).join(\"=\")\n);\nvar defaults = {\n encryption: { saltBits: 256, algorithm: \"aes-256-cbc\", iterations: 1, minPasswordlength: 32 },\n integrity: { saltBits: 256, algorithm: \"sha256\", iterations: 1, minPasswordlength: 32 },\n ttl: 0,\n timestampSkewSec: 60,\n localtimeOffsetMsec: 0\n};\nvar clone = (options) => ({\n ...options,\n encryption: { ...options.encryption },\n integrity: { ...options.integrity }\n});\nvar algorithms = {\n \"aes-128-ctr\": { keyBits: 128, ivBits: 128, name: \"AES-CTR\" },\n \"aes-256-cbc\": { keyBits: 256, ivBits: 128, name: \"AES-CBC\" },\n sha256: { keyBits: 256, name: \"SHA-256\" }\n};\nvar macFormatVersion = \"2\";\nvar macPrefix = `Fe26.${macFormatVersion}`;\nvar randomBytes = (_crypto, size) => {\n const bytes = new Uint8Array(size);\n _crypto.getRandomValues(bytes);\n return bytes;\n};\nvar randomBits = (_crypto, bits) => {\n if (bits < 1)\n throw Error(\"Invalid random bits count\");\n const bytes = Math.ceil(bits / 8);\n return randomBytes(_crypto, bytes);\n};\nvar pbkdf2 = async (_crypto, password, salt, iterations, keyLength, hash) => {\n const passwordBuffer = stringToBuffer(password);\n const importedKey = await _crypto.subtle.importKey(\"raw\", passwordBuffer, \"PBKDF2\", false, [\n \"deriveBits\"\n ]);\n const saltBuffer = stringToBuffer(salt);\n const params = { name: \"PBKDF2\", hash, salt: saltBuffer, iterations };\n const derivation = await _crypto.subtle.deriveBits(params, importedKey, keyLength * 8);\n return derivation;\n};\nvar generateKey = async (_crypto, password, options) => {\n var _a;\n if (!(password == null ? void 0 : password.length))\n throw new Error(\"Empty password\");\n if (options == null || typeof options !== \"object\")\n throw new Error(\"Bad options\");\n if (!(options.algorithm in algorithms))\n throw new Error(`Unknown algorithm: ${options.algorithm}`);\n const algorithm = algorithms[options.algorithm];\n const result = {};\n const hmac = (_a = options.hmac) != null ? _a : false;\n const id = hmac ? { name: \"HMAC\", hash: algorithm.name } : { name: algorithm.name };\n const usage = hmac ? [\"sign\", \"verify\"] : [\"encrypt\", \"decrypt\"];\n if (typeof password === \"string\") {\n if (password.length < options.minPasswordlength)\n throw new Error(\n `Password string too short (min ${options.minPasswordlength} characters required)`\n );\n let { salt = \"\" } = options;\n if (!salt) {\n const { saltBits = 0 } = options;\n if (!saltBits)\n throw new Error(\"Missing salt and saltBits options\");\n const randomSalt = randomBits(_crypto, saltBits);\n salt = [...new Uint8Array(randomSalt)].map((x) => x.toString(16).padStart(2, \"0\")).join(\"\");\n }\n const derivedKey = await pbkdf2(\n _crypto,\n password,\n salt,\n options.iterations,\n algorithm.keyBits / 8,\n \"SHA-1\"\n );\n const importedEncryptionKey = await _crypto.subtle.importKey(\n \"raw\",\n derivedKey,\n id,\n false,\n usage\n );\n result.key = importedEncryptionKey;\n result.salt = salt;\n } else {\n if (password.length < algorithm.keyBits / 8)\n throw new Error(\"Key buffer (password) too small\");\n result.key = await _crypto.subtle.importKey(\"raw\", password, id, false, usage);\n result.salt = \"\";\n }\n if (options.iv)\n result.iv = options.iv;\n else if (\"ivBits\" in algorithm)\n result.iv = randomBits(_crypto, algorithm.ivBits);\n return result;\n};\nvar encrypt = async (_crypto, password, options, data) => {\n const key = await generateKey(_crypto, password, options);\n const textBuffer = stringToBuffer(data);\n const encrypted = await _crypto.subtle.encrypt(\n { name: algorithms[options.algorithm].name, iv: key.iv },\n key.key,\n textBuffer\n );\n return { encrypted: new Uint8Array(encrypted), key };\n};\nvar decrypt = async (_crypto, password, options, data) => {\n const key = await generateKey(_crypto, password, options);\n const decrypted = await _crypto.subtle.decrypt(\n { name: algorithms[options.algorithm].name, iv: key.iv },\n key.key,\n typeof data === \"string\" ? stringToBuffer(data) : data\n );\n return bufferToString(new Uint8Array(decrypted));\n};\nvar hmacWithPassword = async (_crypto, password, options, data) => {\n const key = await generateKey(_crypto, password, { ...options, hmac: true });\n const textBuffer = stringToBuffer(data);\n const signed = await _crypto.subtle.sign({ name: \"HMAC\" }, key.key, textBuffer);\n const digest = base64urlEncode(new Uint8Array(signed));\n return { digest, salt: key.salt };\n};\nvar normalizePassword = (password) => {\n if (typeof password === \"string\" || password instanceof Uint8Array)\n return { encryption: password, integrity: password };\n if (\"secret\" in password)\n return { id: password.id, encryption: password.secret, integrity: password.secret };\n return { id: password.id, encryption: password.encryption, integrity: password.integrity };\n};\nvar seal = async (_crypto, object, password, options) => {\n if (!password)\n throw Error(\"Empty password\");\n const opts = clone(options);\n const now = Date.now() + (opts.localtimeOffsetMsec || 0);\n const objectString = JSON.stringify(object);\n const pass = normalizePassword(password);\n const { id = \"\" } = pass;\n if (id && !/^\\w+$/.test(id))\n throw new Error(\"Invalid password id\");\n const { encrypted, key } = await encrypt(_crypto, pass.encryption, opts.encryption, objectString);\n const encryptedB64 = base64urlEncode(new Uint8Array(encrypted));\n const iv = base64urlEncode(key.iv);\n const expiration = opts.ttl ? now + opts.ttl : \"\";\n const macBaseString = `${macPrefix}*${id}*${key.salt}*${iv}*${encryptedB64}*${expiration}`;\n const mac = await hmacWithPassword(_crypto, pass.integrity, opts.integrity, macBaseString);\n const sealed = `${macBaseString}*${mac.salt}*${mac.digest}`;\n return sealed;\n};\nvar fixedTimeComparison = (a, b) => {\n let mismatch = a.length === b.length ? 0 : 1;\n if (mismatch)\n b = a;\n for (let i = 0; i < a.length; i += 1)\n mismatch |= a.charCodeAt(i) ^ b.charCodeAt(i);\n return mismatch === 0;\n};\nvar unseal = async (_crypto, sealed, password, options) => {\n if (!password)\n throw Error(\"Empty password\");\n const opts = clone(options);\n const now = Date.now() + (opts.localtimeOffsetMsec || 0);\n const parts = sealed.split(\"*\");\n if (parts.length !== 8)\n throw new Error(\"Incorrect number of sealed components\");\n const prefix = parts[0];\n let passwordId = parts[1];\n const encryptionSalt = parts[2];\n const encryptionIv = parts[3];\n const encryptedB64 = parts[4];\n const expiration = parts[5];\n const hmacSalt = parts[6];\n const hmac = parts[7];\n const macBaseString = `${prefix}*${passwordId}*${encryptionSalt}*${encryptionIv}*${encryptedB64}*${expiration}`;\n if (macPrefix !== prefix)\n throw new Error(\"Wrong mac prefix\");\n if (expiration) {\n if (!/^\\d+$/.exec(expiration))\n throw new Error(\"Invalid expiration\");\n const exp = parseInt(expiration, 10);\n if (exp <= now - opts.timestampSkewSec * 1e3)\n throw new Error(\"Expired seal\");\n }\n if (typeof password === \"undefined\" || typeof password === \"string\" && password.length === 0)\n throw new Error(\"Empty password\");\n let pass = \"\";\n passwordId = passwordId || \"default\";\n if (typeof password === \"string\" || password instanceof Uint8Array)\n pass = password;\n else if (!(passwordId in password))\n throw new Error(`Cannot find password: ${passwordId}`);\n else\n pass = password[passwordId];\n pass = normalizePassword(pass);\n const macOptions = opts.integrity;\n macOptions.salt = hmacSalt;\n const mac = await hmacWithPassword(_crypto, pass.integrity, macOptions, macBaseString);\n if (!fixedTimeComparison(mac.digest, hmac))\n throw new Error(\"Bad hmac value\");\n const encrypted = base64urlDecode(encryptedB64);\n const decryptOptions = opts.encryption;\n decryptOptions.salt = encryptionSalt;\n decryptOptions.iv = base64urlDecode(encryptionIv);\n const decrypted = await decrypt(_crypto, pass.encryption, decryptOptions, encrypted);\n if (decrypted)\n return JSON.parse(decrypted);\n return null;\n};\n\nexport { algorithms, base64urlDecode, base64urlEncode, bufferToString, clone, decrypt, defaults, encrypt, generateKey, hmacWithPassword, macFormatVersion, macPrefix, randomBits, seal, stringToBuffer, unseal };\n","import {\n createGetIronSession,\n createGetServerActionIronSession,\n createSealData,\n createUnsealData,\n} from \"./core.js\";\n\nexport * from \"./core.js\";\nexport const sealData = createSealData();\nexport const unsealData = createUnsealData();\nexport const getIronSession = createGetIronSession(sealData, unsealData);\nexport const getServerActionIronSession = createGetServerActionIronSession(\n sealData,\n unsealData,\n);\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iron-session",
3
- "version": "8.0.0-beta.2",
3
+ "version": "8.0.0-beta.4",
4
4
  "description": "A runtime-agnostic library for stateless session management through secure, signed, and encrypted cookies.",
5
5
  "keywords": [
6
6
  "session",
@@ -25,11 +25,10 @@
25
25
  "sideEffects": false,
26
26
  "type": "module",
27
27
  "exports": {
28
- ".": {
29
- "import": "./dist/index.js",
30
- "require": "./dist/index.cjs"
31
- }
28
+ "import": "./dist/index.js",
29
+ "require": "./dist/index.cjs"
32
30
  },
31
+ "main": "./dist/index.cjs",
33
32
  "files": [
34
33
  "dist/*"
35
34
  ],