@xylex-group/athena 2.12.1 → 2.13.0
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/LICENSE +21 -21
- package/README.md +1190 -1184
- package/bin/athena-js.js +104 -76
- package/dist/admin.cjs +45 -0
- package/dist/admin.cjs.map +1 -0
- package/dist/admin.d.cts +64 -0
- package/dist/admin.d.ts +64 -0
- package/dist/admin.js +41 -0
- package/dist/admin.js.map +1 -0
- package/dist/athena-auth-url-oLux_57a.d.cts +377 -0
- package/dist/athena-auth-url-oLux_57a.d.ts +377 -0
- package/dist/browser.cjs +33 -49
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.cts +12 -10
- package/dist/browser.d.ts +12 -10
- package/dist/browser.js +33 -49
- package/dist/browser.js.map +1 -1
- package/dist/cli/index.cjs +150 -51
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.cts +14 -5
- package/dist/cli/index.d.ts +14 -5
- package/dist/cli/index.js +150 -52
- package/dist/cli/index.js.map +1 -1
- package/dist/{client-CMtx5P4D.d.cts → client-BJjUwDSg.d.cts} +109 -1448
- package/dist/{client-Dre8H24u.d.ts → client-DVOKSYDI.d.ts} +109 -1448
- package/dist/cookies.cjs +18 -0
- package/dist/cookies.cjs.map +1 -1
- package/dist/cookies.d.cts +2 -1
- package/dist/cookies.d.ts +2 -1
- package/dist/cookies.js +17 -1
- package/dist/cookies.js.map +1 -1
- package/dist/{index-CVcQCGyG.d.ts → index-CFL9xbFR.d.cts} +2 -0
- package/dist/{index-CVcQCGyG.d.cts → index-UKJpunc6.d.ts} +2 -0
- package/dist/index.cjs +101 -49
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +13 -10
- package/dist/index.d.ts +13 -10
- package/dist/index.js +101 -50
- package/dist/index.js.map +1 -1
- package/dist/{model-form-DfTi8-D1.d.cts → model-form-Dw4zEL5a.d.cts} +2 -2
- package/dist/{model-form-CU0mWrF9.d.ts → model-form-yRg71q3H.d.ts} +2 -2
- package/dist/{module-DBGmbIuh.d.ts → module-DBteUIob.d.ts} +12 -9
- package/dist/{module-GoijrBXV.d.cts → module-yoX49uQC.d.cts} +12 -9
- package/dist/next/client.cjs +452 -49
- package/dist/next/client.cjs.map +1 -1
- package/dist/next/client.d.cts +7 -4
- package/dist/next/client.d.ts +7 -4
- package/dist/next/client.js +430 -50
- package/dist/next/client.js.map +1 -1
- package/dist/next/server.cjs +292 -49
- package/dist/next/server.cjs.map +1 -1
- package/dist/next/server.d.cts +81 -5
- package/dist/next/server.d.ts +81 -5
- package/dist/next/server.js +280 -50
- package/dist/next/server.js.map +1 -1
- package/dist/organization.cjs +72 -0
- package/dist/organization.cjs.map +1 -0
- package/dist/organization.d.cts +43 -0
- package/dist/organization.d.ts +43 -0
- package/dist/organization.js +70 -0
- package/dist/organization.js.map +1 -0
- package/dist/payload-BzVbUgY_.d.cts +219 -0
- package/dist/payload-DEOWN_oo.d.ts +219 -0
- package/dist/{pipeline-DrjU2vNA.d.ts → pipeline-Bj6RWt1A.d.ts} +1 -1
- package/dist/{pipeline-c7Gdm0qv.d.cts → pipeline-Dwck-wZO.d.cts} +1 -1
- package/dist/react.cjs +2 -13
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +26 -7
- package/dist/react.d.ts +26 -7
- package/dist/react.js +2 -13
- package/dist/react.js.map +1 -1
- package/dist/session-cookie-detection-BqOp9mO6.d.cts +46 -0
- package/dist/session-cookie-detection-BqOp9mO6.d.ts +46 -0
- package/dist/social-providers.cjs +4189 -0
- package/dist/social-providers.cjs.map +1 -0
- package/dist/social-providers.d.cts +4948 -0
- package/dist/social-providers.d.ts +4948 -0
- package/dist/social-providers.js +4117 -0
- package/dist/social-providers.js.map +1 -0
- package/dist/{types-Bez4HSbI.d.cts → types-BRP7sfSF.d.ts} +50 -2
- package/dist/{types-kPaHUqUa.d.ts → types-BU8uJH_b.d.cts} +50 -2
- package/dist/{types-BRUHGXo2.d.ts → types-CH78O90i.d.cts} +2 -2
- package/dist/{types-BRUHGXo2.d.cts → types-CH78O90i.d.ts} +2 -2
- package/dist/{types-BLizCLd1.d.cts → types-CjC9_5ZQ.d.cts} +3 -3
- package/dist/{types-DRRb0Fd0.d.ts → types-DPgejxYC.d.ts} +3 -3
- package/dist/types-eAKAh71s.d.cts +1476 -0
- package/dist/types-eAKAh71s.d.ts +1476 -0
- package/dist/utils.cjs +438 -15
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +76 -11
- package/dist/utils.d.ts +76 -11
- package/dist/utils.js +390 -16
- package/dist/utils.js.map +1 -1
- package/package.json +49 -22
- package/dist/shared-DZSGAmXs.d.cts +0 -35
- package/dist/shared-MMnVBBfy.d.ts +0 -35
package/dist/cookies.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cookies/base64.ts","../src/cookies/cookie-utils.ts","../src/cookies/crypto.ts","../src/cookies/session-store.ts","../src/cookies/index.ts"],"names":[],"mappings":"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","file":"cookies.js","sourcesContent":["function getAtob(): ((input: string) => string) | undefined {\n const candidate = (globalThis as { atob?: unknown }).atob\n return typeof candidate === 'function' ? (candidate as (input: string) => string) : undefined\n}\n\nfunction getBtoa(): ((input: string) => string) | undefined {\n const candidate = (globalThis as { btoa?: unknown }).btoa\n return typeof candidate === 'function' ? (candidate as (input: string) => string) : undefined\n}\n\nfunction bytesToBinaryString(bytes: Uint8Array): string {\n let result = ''\n for (const byte of bytes) {\n result += String.fromCharCode(byte)\n }\n return result\n}\n\nfunction binaryStringToBytes(binary: string): Uint8Array {\n const bytes = new Uint8Array(binary.length)\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i)\n }\n return bytes\n}\n\nfunction encodeBase64(bytes: Uint8Array): string {\n const btoaFn = getBtoa()\n if (btoaFn) {\n return btoaFn(bytesToBinaryString(bytes))\n }\n return Buffer.from(bytes).toString('base64')\n}\n\nfunction decodeBase64(base64: string): Uint8Array {\n const atobFn = getAtob()\n if (atobFn) {\n return binaryStringToBytes(atobFn(base64))\n }\n return new Uint8Array(Buffer.from(base64, 'base64'))\n}\n\nexport function encodeBytesToBase64Url(bytes: Uint8Array): string {\n return encodeBase64(bytes).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/g, '')\n}\n\nexport function encodeStringToBase64Url(value: string): string {\n const bytes = new TextEncoder().encode(value)\n return encodeBytesToBase64Url(bytes)\n}\n\nexport function decodeBase64UrlToBytes(value: string): Uint8Array {\n const normalized = value.replace(/-/g, '+').replace(/_/g, '/')\n const paddingLength = normalized.length % 4\n const padded = paddingLength === 0 ? normalized : `${normalized}${'='.repeat(4 - paddingLength)}`\n return decodeBase64(padded)\n}\n\nexport function decodeBase64UrlToString(value: string): string {\n return new TextDecoder().decode(decodeBase64UrlToBytes(value))\n}\n","import type { AthenaCookieOptions } from './types.ts'\n\nfunction tryDecode(str: string): string {\n if (str.indexOf('%') === -1) {\n return str\n }\n try {\n return decodeURIComponent(str)\n } catch {\n return str\n }\n}\n\nexport interface CookieAttributes {\n value: string\n 'max-age'?: number\n expires?: Date\n domain?: string\n path?: string\n secure?: boolean\n httponly?: boolean\n partitioned?: boolean\n samesite?: 'strict' | 'lax' | 'none'\n [key: string]: unknown\n}\n\nexport const SECURE_COOKIE_PREFIX = '__Secure-'\nexport const HOST_COOKIE_PREFIX = '__Host-'\n\n/**\n * Remove __Secure- or __Host- prefix from cookie name.\n */\nexport function stripSecureCookiePrefix(cookieName: string): string {\n if (cookieName.startsWith(SECURE_COOKIE_PREFIX)) {\n return cookieName.slice(SECURE_COOKIE_PREFIX.length)\n }\n if (cookieName.startsWith(HOST_COOKIE_PREFIX)) {\n return cookieName.slice(HOST_COOKIE_PREFIX.length)\n }\n return cookieName\n}\n\n/**\n * Split a comma-joined `Set-Cookie` header string into individual cookies.\n */\nexport function splitSetCookieHeader(setCookie: string): string[] {\n if (!setCookie) {\n return []\n }\n\n const result: string[] = []\n let start = 0\n let i = 0\n\n while (i < setCookie.length) {\n if (setCookie[i] === ',') {\n let j = i + 1\n while (j < setCookie.length && setCookie[j] === ' ') {\n j++\n }\n while (j < setCookie.length && setCookie[j] !== '=' && setCookie[j] !== ';' && setCookie[j] !== ',') {\n j++\n }\n\n if (j < setCookie.length && setCookie[j] === '=') {\n const part = setCookie.slice(start, i).trim()\n if (part) {\n result.push(part)\n }\n start = i + 1\n while (start < setCookie.length && setCookie[start] === ' ') {\n start++\n }\n i = start\n continue\n }\n }\n i++\n }\n\n const last = setCookie.slice(start).trim()\n if (last) {\n result.push(last)\n }\n\n return result\n}\n\nexport function parseSetCookieHeader(setCookie: string): Map<string, CookieAttributes> {\n const cookies = new Map<string, CookieAttributes>()\n const cookieArray = splitSetCookieHeader(setCookie)\n\n for (const cookieString of cookieArray) {\n const parts = cookieString.split(';').map((part) => part.trim())\n const [nameValue, ...attributes] = parts\n const [name, ...valueParts] = (nameValue || '').split('=')\n if (!name) {\n continue\n }\n\n const value = unquoteCookieValue(valueParts.join('='))\n const decodedValue = tryDecode(value)\n const attrObj: CookieAttributes = { value: decodedValue }\n\n for (const attribute of attributes) {\n const [attrName, ...attrValueParts] = attribute.split('=')\n const attrValue = attrValueParts.join('=')\n const normalizedAttrName = attrName.trim().toLowerCase()\n switch (normalizedAttrName) {\n case 'max-age':\n attrObj['max-age'] = attrValue ? parseInt(attrValue.trim(), 10) : undefined\n break\n case 'expires':\n attrObj.expires = attrValue ? new Date(attrValue.trim()) : undefined\n break\n case 'domain':\n attrObj.domain = attrValue ? attrValue.trim() : undefined\n break\n case 'path':\n attrObj.path = attrValue ? attrValue.trim() : undefined\n break\n case 'secure':\n attrObj.secure = true\n break\n case 'httponly':\n attrObj.httponly = true\n break\n case 'samesite':\n attrObj.samesite = attrValue ? (attrValue.trim().toLowerCase() as 'strict' | 'lax' | 'none') : undefined\n break\n case 'partitioned':\n attrObj.partitioned = true\n break\n default:\n attrObj[normalizedAttrName] = attrValue ? attrValue.trim() : true\n break\n }\n }\n\n cookies.set(name, attrObj)\n }\n\n return cookies\n}\n\nexport function toCookieOptions(attributes: CookieAttributes): AthenaCookieOptions {\n return {\n maxAge: attributes['max-age'],\n expires: attributes.expires,\n domain: attributes.domain,\n path: attributes.path,\n secure: attributes.secure,\n httpOnly: attributes.httponly,\n sameSite: attributes.samesite,\n partitioned: attributes.partitioned,\n }\n}\n\n/**\n * Cookie-name token char set per RFC 7230 §3.2.6.\n */\nexport const cookieNameRegex = /^[\\w!#$%&'*.^`|~+-]+$/\n\nfunction unquoteCookieValue(value: string): string {\n if (value.length < 2 || !value.startsWith('\"') || !value.endsWith('\"')) {\n return value\n }\n return value.slice(1, -1)\n}\n\n/**\n * Parse a `Cookie` header into a key/value map.\n */\nexport function parseCookies(cookieHeader: string): Map<string, string> {\n const cookies = cookieHeader.split('; ')\n const cookieMap = new Map<string, string>()\n cookies.forEach((cookie) => {\n const [name, value] = cookie.split(/=(.*)/s)\n cookieMap.set(name as string, value as string)\n })\n return cookieMap\n}\n\n/**\n * Add or replace a cookie in the request `Cookie` header.\n */\nexport function setRequestCookie(headers: Headers, name: string, value: string): void {\n const cookieMap = parseCookies(headers.get('cookie') || '')\n if (cookieNameRegex.test(name)) {\n cookieMap.set(name, value)\n }\n headers.set(\n 'cookie',\n Array.from(cookieMap, ([key, currentValue]) => `${key}=${encodeURIComponent(currentValue)}`).join('; '),\n )\n}\n\n/**\n * Merge `Set-Cookie` values into a `Cookie` header.\n */\nexport function applySetCookies(target: Headers, setCookieValues: Iterable<string>): void {\n const cookieMap = parseCookies(target.get('cookie') || '')\n for (const setCookie of setCookieValues) {\n for (const [name, attr] of parseSetCookieHeader(setCookie)) {\n if (cookieNameRegex.test(name)) {\n cookieMap.set(name, attr.value)\n }\n }\n }\n target.set(\n 'cookie',\n Array.from(cookieMap, ([key, currentValue]) => `${key}=${encodeURIComponent(currentValue)}`).join('; '),\n )\n}\n\nexport function setCookieToHeader(headers: Headers) {\n return (context: { response: Response }) => {\n const setCookieHeader = context.response.headers.get('set-cookie')\n if (!setCookieHeader) {\n return\n }\n applySetCookies(headers, [setCookieHeader])\n }\n}\n","import { decodeBase64UrlToString, encodeBytesToBase64Url, encodeStringToBase64Url } from './base64.ts'\n\ntype JwtPayload = Record<string, unknown>\n\nconst HS256_ALG = 'HS256'\n\ninterface SubtleCryptoLike {\n importKey: (\n format: 'raw',\n keyData: Uint8Array,\n algorithm: { name: 'HMAC'; hash: 'SHA-256' },\n extractable: boolean,\n keyUsages: Array<'sign' | 'verify'>,\n ) => Promise<unknown>\n sign: (algorithm: 'HMAC', key: unknown, data: Uint8Array) => Promise<ArrayBuffer>\n}\n\ninterface WebCryptoLike {\n subtle?: SubtleCryptoLike\n}\n\nasync function getSubtleCrypto(): Promise<SubtleCryptoLike> {\n const globalCrypto = (globalThis as { crypto?: WebCryptoLike }).crypto\n if (globalCrypto?.subtle) {\n return globalCrypto.subtle\n }\n const { webcrypto } = await import('node:crypto')\n const subtle = (webcrypto as unknown as WebCryptoLike).subtle\n if (!subtle) {\n throw new Error('Web Crypto subtle API is unavailable.')\n }\n return subtle\n}\n\nasync function importHmacKey(secret: string, usage: 'sign' | 'verify'): Promise<unknown> {\n const subtle = await getSubtleCrypto()\n return subtle.importKey(\n 'raw',\n new TextEncoder().encode(secret),\n {\n name: 'HMAC',\n hash: 'SHA-256',\n },\n false,\n [usage] as Array<'sign' | 'verify'>,\n )\n}\n\nfunction bufferToBytes(buffer: ArrayBuffer): Uint8Array {\n return new Uint8Array(buffer)\n}\n\nfunction parseJwtPayload(payloadSegment: string): JwtPayload | null {\n try {\n const decoded = decodeBase64UrlToString(payloadSegment)\n const payload = JSON.parse(decoded) as unknown\n if (!payload || typeof payload !== 'object') {\n return null\n }\n return payload as JwtPayload\n } catch {\n return null\n }\n}\n\nfunction isJwtExpired(payload: JwtPayload): boolean {\n const exp = payload.exp\n if (typeof exp !== 'number') {\n return false\n }\n return exp < Math.floor(Date.now() / 1000)\n}\n\nexport async function signHmacBase64Url(secret: string, value: string): Promise<string> {\n const subtle = await getSubtleCrypto()\n const key = await importHmacKey(secret, 'sign')\n const signature = await subtle.sign('HMAC', key, new TextEncoder().encode(value))\n return encodeBytesToBase64Url(bufferToBytes(signature))\n}\n\nexport async function signJwtHS256(\n payload: JwtPayload,\n secret: string,\n expiresIn = 60 * 5,\n): Promise<string> {\n const now = Math.floor(Date.now() / 1000)\n const header = { alg: HS256_ALG, typ: 'JWT' }\n const fullPayload = {\n ...payload,\n iat: now,\n exp: now + expiresIn,\n }\n const headerPart = encodeStringToBase64Url(JSON.stringify(header))\n const payloadPart = encodeStringToBase64Url(JSON.stringify(fullPayload))\n const message = `${headerPart}.${payloadPart}`\n const signature = await signHmacBase64Url(secret, message)\n return `${message}.${signature}`\n}\n\nexport async function verifyJwtHS256<TPayload extends JwtPayload = JwtPayload>(\n token: string,\n secret: string,\n): Promise<TPayload | null> {\n const parts = token.split('.')\n if (parts.length !== 3) {\n return null\n }\n\n const [headerPart, payloadPart, signaturePart] = parts\n if (!headerPart || !payloadPart || !signaturePart) {\n return null\n }\n\n let header: { alg?: string } | null = null\n try {\n header = JSON.parse(decodeBase64UrlToString(headerPart)) as { alg?: string }\n } catch {\n return null\n }\n\n if (!header || header.alg !== HS256_ALG) {\n return null\n }\n\n const payload = parseJwtPayload(payloadPart)\n if (!payload) {\n return null\n }\n\n const expectedSignature = await signHmacBase64Url(secret, `${headerPart}.${payloadPart}`)\n if (expectedSignature !== signaturePart) {\n return null\n }\n\n if (isJwtExpired(payload)) {\n return null\n }\n\n return payload as TPayload\n}\n","import { decodeBase64UrlToString } from './base64.ts'\nimport { parseCookies } from './cookie-utils.ts'\nimport type { AthenaCookieContextRuntime, AthenaCookieOptions } from './types.ts'\n\nconst ALLOWED_COOKIE_SIZE = 4096\nconst ESTIMATED_EMPTY_COOKIE_SIZE = 200\nconst CHUNK_SIZE = ALLOWED_COOKIE_SIZE - ESTIMATED_EMPTY_COOKIE_SIZE\n\ninterface StoreCookie {\n name: string\n value: string\n attributes: AthenaCookieOptions\n}\n\ntype Chunks = Record<string, string>\n\nfunction getChunkIndex(cookieName: string): number {\n const parts = cookieName.split('.')\n const lastPart = parts[parts.length - 1]\n const index = parseInt(lastPart || '0', 10)\n return Number.isNaN(index) ? 0 : index\n}\n\nfunction readExistingChunks(cookieName: string, ctx: AthenaCookieContextRuntime): Chunks {\n const chunks: Chunks = {}\n const cookies = parseCookies(ctx.headers?.get('cookie') || '')\n for (const [name, value] of cookies) {\n if (name.startsWith(cookieName)) {\n chunks[name] = value\n }\n }\n return chunks\n}\n\nfunction joinChunks(chunks: Chunks): string {\n const sortedKeys = Object.keys(chunks).sort((left, right) => getChunkIndex(left) - getChunkIndex(right))\n return sortedKeys.map((key) => chunks[key]).join('')\n}\n\nfunction chunkCookie(storeName: string, cookie: StoreCookie, chunks: Chunks, ctx: AthenaCookieContextRuntime): StoreCookie[] {\n const chunkCount = Math.ceil(cookie.value.length / CHUNK_SIZE)\n if (chunkCount === 1) {\n chunks[cookie.name] = cookie.value\n return [cookie]\n }\n\n const cookies: StoreCookie[] = []\n for (let index = 0; index < chunkCount; index++) {\n const name = `${cookie.name}.${index}`\n const start = index * CHUNK_SIZE\n const value = cookie.value.substring(start, start + CHUNK_SIZE)\n cookies.push({\n ...cookie,\n name,\n value,\n })\n chunks[name] = value\n }\n\n ctx.logger?.debug?.(`CHUNKING_${storeName.toUpperCase()}_COOKIE`, {\n message: `${storeName} cookie exceeds allowed ${ALLOWED_COOKIE_SIZE} bytes.`,\n emptyCookieSize: ESTIMATED_EMPTY_COOKIE_SIZE,\n valueSize: cookie.value.length,\n chunkCount,\n chunks: cookies.map((entry) => entry.value.length + ESTIMATED_EMPTY_COOKIE_SIZE),\n })\n\n return cookies\n}\n\nfunction getCleanCookies(chunks: Chunks, cookieOptions: AthenaCookieOptions): Record<string, StoreCookie> {\n const cleanedChunks: Record<string, StoreCookie> = {}\n for (const name in chunks) {\n cleanedChunks[name] = {\n name,\n value: '',\n attributes: {\n ...cookieOptions,\n maxAge: 0,\n },\n }\n }\n return cleanedChunks\n}\n\nconst storeFactory =\n (storeName: string) =>\n (cookieName: string, cookieOptions: AthenaCookieOptions, ctx: AthenaCookieContextRuntime) => {\n const chunks = readExistingChunks(cookieName, ctx)\n\n return {\n getValue(): string {\n return joinChunks(chunks)\n },\n hasChunks(): boolean {\n return Object.keys(chunks).length > 0\n },\n chunk(value: string, options?: Partial<AthenaCookieOptions>): StoreCookie[] {\n const cleanedChunks = getCleanCookies(chunks, cookieOptions)\n for (const name in chunks) {\n delete chunks[name]\n }\n\n const cookies: Record<string, StoreCookie> = cleanedChunks\n const chunked = chunkCookie(\n storeName,\n {\n name: cookieName,\n value,\n attributes: {\n ...cookieOptions,\n ...options,\n },\n },\n chunks,\n ctx,\n )\n for (const chunk of chunked) {\n cookies[chunk.name] = chunk\n }\n return Object.values(cookies)\n },\n clean(): StoreCookie[] {\n const cleanedChunks = getCleanCookies(chunks, cookieOptions)\n for (const name in chunks) {\n delete chunks[name]\n }\n return Object.values(cleanedChunks)\n },\n setCookies(cookies: StoreCookie[]): void {\n for (const cookie of cookies) {\n ctx.setCookie(cookie.name, cookie.value, cookie.attributes)\n }\n },\n }\n }\n\nexport const createSessionStore = storeFactory('Session')\nexport const createAccountStore = storeFactory('Account')\n\nexport function getChunkedCookie(ctx: AthenaCookieContextRuntime, cookieName: string): string | null {\n const value = ctx.getCookie?.(cookieName)\n if (value) {\n return value\n }\n\n const chunks: Array<{ index: number; value: string }> = []\n const cookieHeader = ctx.headers?.get('cookie')\n if (!cookieHeader) {\n return null\n }\n\n for (const [name, parsedValue] of parseCookies(cookieHeader)) {\n if (!name.startsWith(`${cookieName}.`)) {\n continue\n }\n const parts = name.split('.')\n const indexStr = parts.at(-1)\n const index = parseInt(indexStr || '0', 10)\n if (!Number.isNaN(index)) {\n chunks.push({ index, value: parsedValue })\n }\n }\n\n if (chunks.length === 0) {\n return null\n }\n\n chunks.sort((left, right) => left.index - right.index)\n return chunks.map((entry) => entry.value).join('')\n}\n\n/**\n * SDK helper to read an account cookie value.\n * - If plain JSON: returns parsed value.\n * - If base64url-encoded JSON: returns parsed value.\n * - Otherwise: returns the raw cookie string.\n */\nexport async function getAccountCookie(\n ctx: AthenaCookieContextRuntime,\n cookieName = ctx.context.authCookies.accountData.name,\n): Promise<unknown | null> {\n const value = getChunkedCookie(ctx, cookieName)\n if (!value) {\n return null\n }\n\n try {\n return JSON.parse(value) as unknown\n } catch {\n // Fall through and try base64url payload parsing.\n }\n\n try {\n return JSON.parse(decodeBase64UrlToString(value)) as unknown\n } catch {\n return value\n }\n}\n","import { decodeBase64UrlToString, encodeStringToBase64Url } from './base64.ts'\r\nimport {\r\n HOST_COOKIE_PREFIX,\r\n SECURE_COOKIE_PREFIX,\r\n parseCookies,\r\n parseSetCookieHeader,\r\n setCookieToHeader,\r\n setRequestCookie,\r\n splitSetCookieHeader,\r\n stripSecureCookiePrefix,\r\n toCookieOptions,\r\n} from './cookie-utils.ts'\r\nimport { signHmacBase64Url, signJwtHS256, verifyJwtHS256 } from './crypto.ts'\r\nimport { createAccountStore, createSessionStore, getAccountCookie, getChunkedCookie } from './session-store.ts'\r\nimport type {\r\n AthenaAuthCookie,\r\n AthenaAuthCookies,\r\n AthenaCookieContextRuntime,\r\n AthenaCookieOptions,\r\n AthenaCookiesOptions,\r\n AthenaCookieVersionResolver,\r\n AthenaGetCookieCacheConfig,\r\n AthenaSessionPair,\r\n} from './types.ts'\r\n\r\nconst DEFAULT_COOKIE_PREFIX = 'athena-auth'\r\nconst LEGACY_COOKIE_PREFIX = 'better-auth'\r\nconst DEFAULT_SESSION_MAX_AGE = 7 * 24 * 60 * 60\r\nconst DEFAULT_CACHE_MAX_AGE = 60 * 5\r\n\r\nfunction isProductionRuntime(): boolean {\r\n return typeof process !== 'undefined' && process.env?.NODE_ENV === 'production'\r\n}\r\n\r\nfunction getEnvironmentSecret(): string | undefined {\r\n if (typeof process === 'undefined') {\r\n return undefined\r\n }\r\n return process.env?.ATHENA_AUTH_SECRET || process.env?.BETTER_AUTH_SECRET || process.env?.AUTH_SECRET\r\n}\r\n\r\nfunction isDynamicBaseURLConfig(baseURL: AthenaCookiesOptions['baseURL']): boolean {\r\n return (\r\n typeof baseURL === 'object' &&\r\n baseURL !== null &&\r\n 'allowedHosts' in baseURL &&\r\n Array.isArray((baseURL as { allowedHosts?: unknown }).allowedHosts)\r\n )\r\n}\r\n\r\nfunction resolveCookiePrefixes(primaryPrefix: string): string[] {\r\n const prefixes = [primaryPrefix]\r\n if (!prefixes.includes(DEFAULT_COOKIE_PREFIX)) {\r\n prefixes.push(DEFAULT_COOKIE_PREFIX)\r\n }\r\n if (!prefixes.includes(LEGACY_COOKIE_PREFIX)) {\r\n prefixes.push(LEGACY_COOKIE_PREFIX)\r\n }\r\n return prefixes\r\n}\r\n\r\nfunction createError(message: string): Error {\r\n return new Error(`@xylex-group/athena/cookies: ${message}`)\r\n}\r\n\r\nfunction getSecretOrThrow(secret?: string): string {\r\n const resolved = secret || getEnvironmentSecret()\r\n if (!resolved) {\r\n throw createError(\r\n 'getCookieCache requires a secret. Pass `secret` or set ATHENA_AUTH_SECRET/BETTER_AUTH_SECRET/AUTH_SECRET.',\r\n )\r\n }\r\n return resolved\r\n}\r\n\r\nfunction asObject(value: unknown): Record<string, unknown> | null {\r\n if (!value || typeof value !== 'object') {\r\n return null\r\n }\r\n return value as Record<string, unknown>\r\n}\r\n\r\nfunction getSessionTokenFromPair(session: AthenaSessionPair): string {\r\n const token = session.session?.token\r\n if (typeof token !== 'string' || token.length === 0) {\r\n throw createError('setSessionCookie requires `session.session.token` to be a non-empty string.')\r\n }\r\n return token\r\n}\r\n\r\nasync function resolveCookieVersion(\r\n versionConfig: AthenaCookieVersionResolver | undefined,\r\n session: Record<string, unknown>,\r\n user: Record<string, unknown>,\r\n): Promise<string> {\r\n if (!versionConfig) {\r\n return '1'\r\n }\r\n if (typeof versionConfig === 'string') {\r\n return versionConfig\r\n }\r\n return versionConfig(session, user)\r\n}\r\n\r\nfunction getSessionCookieCacheName(cookiePrefix: string, cookieName: string, isSecure: boolean): string {\r\n return isSecure ? `${SECURE_COOKIE_PREFIX}${cookiePrefix}.${cookieName}` : `${cookiePrefix}.${cookieName}`\r\n}\r\n\r\nasync function setCookieValue(\r\n ctx: AthenaCookieContextRuntime,\r\n name: string,\r\n value: string,\r\n attributes: AthenaCookieOptions,\r\n): Promise<void> {\r\n const secret = ctx.context.secret\r\n if (secret && typeof ctx.setSignedCookie === 'function') {\r\n await ctx.setSignedCookie(name, value, secret, attributes)\r\n return\r\n }\r\n ctx.setCookie(name, value, attributes)\r\n}\r\n\r\nfunction parseJsonSafely<T>(value: string): T | null {\r\n try {\r\n return JSON.parse(value) as T\r\n } catch {\r\n return null\r\n }\r\n}\r\n\r\nfunction getIsSecureCookie(config: { isSecure?: boolean } | undefined): boolean {\r\n if (config?.isSecure !== undefined) {\r\n return config.isSecure\r\n }\r\n return isProductionRuntime()\r\n}\r\n\r\nexport function createCookieGetter(options: AthenaCookiesOptions) {\r\n const baseURLString = typeof options.baseURL === 'string' ? options.baseURL : undefined\r\n const dynamicProtocol =\r\n typeof options.baseURL === 'object' && options.baseURL !== null ? options.baseURL.protocol : undefined\r\n\r\n const secure =\r\n options.advanced?.useSecureCookies !== undefined\r\n ? options.advanced.useSecureCookies\r\n : dynamicProtocol === 'https'\r\n ? true\r\n : dynamicProtocol === 'http'\r\n ? false\r\n : baseURLString\r\n ? baseURLString.startsWith('https://')\r\n : isProductionRuntime()\r\n\r\n const secureCookiePrefix = secure ? SECURE_COOKIE_PREFIX : ''\r\n const crossSubdomainEnabled = !!options.advanced?.crossSubDomainCookies?.enabled\r\n const domain = crossSubdomainEnabled\r\n ? options.advanced?.crossSubDomainCookies?.domain || (baseURLString ? new URL(baseURLString).hostname : undefined)\r\n : undefined\r\n\r\n if (crossSubdomainEnabled && !domain && !isDynamicBaseURLConfig(options.baseURL)) {\r\n throw createError('baseURL is required when `crossSubDomainCookies.enabled` is true.')\r\n }\r\n\r\n function createCookie(cookieName: string, overrideAttributes: Partial<AthenaCookieOptions> = {}): AthenaAuthCookie {\r\n const prefix = options.advanced?.cookiePrefix || DEFAULT_COOKIE_PREFIX\r\n const name = options.advanced?.cookies?.[cookieName]?.name || `${prefix}.${cookieName}`\r\n const attributes = options.advanced?.cookies?.[cookieName]?.attributes || {}\r\n\r\n return {\r\n name: `${secureCookiePrefix}${name}`,\r\n attributes: {\r\n secure: !!secureCookiePrefix,\r\n sameSite: 'lax',\r\n path: '/',\r\n httpOnly: true,\r\n ...(crossSubdomainEnabled ? { domain } : {}),\r\n ...options.advanced?.defaultCookieAttributes,\r\n ...overrideAttributes,\r\n ...attributes,\r\n },\r\n }\r\n }\r\n\r\n return createCookie\r\n}\r\n\r\nexport function getCookies(options: AthenaCookiesOptions): AthenaAuthCookies {\r\n const createCookie = createCookieGetter(options)\r\n const sessionToken = createCookie('session_token', { maxAge: options.session?.expiresIn || DEFAULT_SESSION_MAX_AGE })\r\n const sessionData = createCookie('session_data', { maxAge: options.session?.cookieCache?.maxAge || DEFAULT_CACHE_MAX_AGE })\r\n const accountData = createCookie('account_data', { maxAge: options.session?.cookieCache?.maxAge || DEFAULT_CACHE_MAX_AGE })\r\n const dontRememberToken = createCookie('dont_remember')\r\n\r\n return {\r\n sessionToken: {\r\n name: sessionToken.name,\r\n attributes: sessionToken.attributes,\r\n },\r\n sessionData: {\r\n name: sessionData.name,\r\n attributes: sessionData.attributes,\r\n },\r\n dontRememberToken: {\r\n name: dontRememberToken.name,\r\n attributes: dontRememberToken.attributes,\r\n },\r\n accountData: {\r\n name: accountData.name,\r\n attributes: accountData.attributes,\r\n },\r\n }\r\n}\r\n\r\nexport async function setCookieCache(\r\n ctx: AthenaCookieContextRuntime,\r\n session: AthenaSessionPair,\r\n dontRememberMe: boolean,\r\n): Promise<void> {\r\n const cookieCacheConfig = ctx.context.options?.session?.cookieCache\r\n if (!cookieCacheConfig?.enabled) {\r\n return\r\n }\r\n\r\n const version = await resolveCookieVersion(\r\n cookieCacheConfig.version,\r\n session.session as Record<string, unknown>,\r\n session.user as Record<string, unknown>,\r\n )\r\n\r\n const sessionData = {\r\n session: session.session,\r\n user: session.user,\r\n updatedAt: Date.now(),\r\n version,\r\n }\r\n\r\n const baseAttributes = ctx.context.authCookies.sessionData.attributes\r\n const maxAge = dontRememberMe ? undefined : baseAttributes.maxAge\r\n const options: AthenaCookieOptions = {\r\n ...baseAttributes,\r\n maxAge,\r\n }\r\n const expiresAt = Date.now() + ((options.maxAge || 60) * 1000)\r\n const strategy = cookieCacheConfig.strategy || 'compact'\r\n const secret = getSecretOrThrow(ctx.context.secret)\r\n\r\n let encoded: string\r\n if (strategy === 'jwt') {\r\n encoded = await signJwtHS256(sessionData, secret, options.maxAge || DEFAULT_CACHE_MAX_AGE)\r\n } else if (strategy === 'jwe') {\r\n throw createError('`jwe` strategy is not supported by the SDK cookie helper.')\r\n } else {\r\n const signature = await signHmacBase64Url(\r\n secret,\r\n JSON.stringify({\r\n ...sessionData,\r\n expiresAt,\r\n }),\r\n )\r\n encoded = encodeStringToBase64Url(\r\n JSON.stringify({\r\n session: sessionData,\r\n expiresAt,\r\n signature,\r\n }),\r\n )\r\n }\r\n\r\n if (encoded.length > 4093) {\r\n const store = createSessionStore(ctx.context.authCookies.sessionData.name, options, ctx)\r\n const cookies = store.chunk(encoded, options)\r\n store.setCookies(cookies)\r\n } else {\r\n const store = createSessionStore(ctx.context.authCookies.sessionData.name, options, ctx)\r\n if (store.hasChunks()) {\r\n store.setCookies(store.clean())\r\n }\r\n ctx.setCookie(ctx.context.authCookies.sessionData.name, encoded, options)\r\n }\r\n}\r\n\r\nexport async function setSessionCookie(\r\n ctx: AthenaCookieContextRuntime,\r\n session: AthenaSessionPair,\r\n dontRememberMe?: boolean,\r\n overrides?: Partial<AthenaCookieOptions>,\r\n): Promise<void> {\r\n if (dontRememberMe === undefined && typeof ctx.getSignedCookie === 'function' && ctx.context.secret) {\r\n const existingFlag = await ctx.getSignedCookie(ctx.context.authCookies.dontRememberToken.name, ctx.context.secret)\r\n dontRememberMe = !!existingFlag\r\n }\r\n\r\n const resolvedDontRememberMe = dontRememberMe ?? false\r\n const token = getSessionTokenFromPair(session)\r\n const options = ctx.context.authCookies.sessionToken.attributes\r\n const maxAge = resolvedDontRememberMe ? undefined : ctx.context.sessionConfig?.expiresIn\r\n await setCookieValue(ctx, ctx.context.authCookies.sessionToken.name, token, {\r\n ...options,\r\n maxAge,\r\n ...overrides,\r\n })\r\n\r\n if (resolvedDontRememberMe) {\r\n await setCookieValue(\r\n ctx,\r\n ctx.context.authCookies.dontRememberToken.name,\r\n 'true',\r\n ctx.context.authCookies.dontRememberToken.attributes,\r\n )\r\n }\r\n\r\n await setCookieCache(ctx, session, resolvedDontRememberMe)\r\n ctx.context.setNewSession?.(session)\r\n}\r\n\r\n/**\r\n * Expires a cookie by setting `maxAge: 0` while preserving attributes.\r\n */\r\nexport function expireCookie(ctx: AthenaCookieContextRuntime, cookie: AthenaAuthCookie): void {\r\n ctx.setCookie(cookie.name, '', {\r\n ...cookie.attributes,\r\n maxAge: 0,\r\n })\r\n}\r\n\r\nexport function deleteSessionCookie(ctx: AthenaCookieContextRuntime, skipDontRememberMe?: boolean): void {\r\n expireCookie(ctx, ctx.context.authCookies.sessionToken)\r\n expireCookie(ctx, ctx.context.authCookies.sessionData)\r\n\r\n if (ctx.context.options?.account?.storeAccountCookie) {\r\n expireCookie(ctx, ctx.context.authCookies.accountData)\r\n const accountStore = createAccountStore(\r\n ctx.context.authCookies.accountData.name,\r\n ctx.context.authCookies.accountData.attributes,\r\n ctx,\r\n )\r\n accountStore.setCookies(accountStore.clean())\r\n }\r\n\r\n const sessionStore = createSessionStore(\r\n ctx.context.authCookies.sessionData.name,\r\n ctx.context.authCookies.sessionData.attributes,\r\n ctx,\r\n )\r\n sessionStore.setCookies(sessionStore.clean())\r\n\r\n if (!skipDontRememberMe) {\r\n expireCookie(ctx, ctx.context.authCookies.dontRememberToken)\r\n }\r\n}\r\n\r\nexport const getSessionCookie = (\r\n request: Request | Headers,\r\n config?:\r\n | {\r\n cookiePrefix?: string\r\n cookieName?: string\r\n path?: string\r\n }\r\n | undefined,\r\n): string | null => {\r\n const cookies = (request instanceof Headers || !('headers' in request) ? request : request.headers).get('cookie')\r\n if (!cookies) {\r\n return null\r\n }\r\n\r\n const { cookieName = 'session_token', cookiePrefix = 'athena-auth' } = config || {}\r\n const parsedCookie = parseCookies(cookies)\r\n const getCookie = (name: string): string | undefined =>\r\n parsedCookie.get(name) || parsedCookie.get(`${SECURE_COOKIE_PREFIX}${name}`)\r\n const candidateCookieNames = Array.from(new Set([\r\n cookieName,\r\n cookieName.replace(/_/g, '-'),\r\n cookieName.replace(/-/g, '_'),\r\n ])).filter(Boolean)\r\n for (const candidateName of candidateCookieNames) {\r\n const sessionToken =\r\n getCookie(`${cookiePrefix}.${candidateName}`) || getCookie(`${cookiePrefix}-${candidateName}`)\r\n if (sessionToken) {\r\n return sessionToken\r\n }\r\n }\r\n return null\r\n}\r\n\r\nexport const getCookieCache = async <\r\n SessionShape extends Record<string, unknown> = Record<string, unknown>,\r\n UserShape extends Record<string, unknown> = Record<string, unknown>,\r\n>(\r\n request: Request | Headers,\r\n config?: AthenaGetCookieCacheConfig<SessionShape, UserShape>,\r\n): Promise<{\r\n session: SessionShape\r\n user: UserShape\r\n updatedAt: number\r\n version?: string\r\n} | null> => {\r\n const headers = request instanceof Headers || !('headers' in request) ? request : request.headers\r\n const cookieHeader = headers.get('cookie')\r\n if (!cookieHeader) {\r\n return null\r\n }\r\n\r\n const parsedCookie = parseCookies(cookieHeader)\r\n const cookieName = config?.cookieName || 'session_data'\r\n const requestedPrefix = config?.cookiePrefix || DEFAULT_COOKIE_PREFIX\r\n const strategy = config?.strategy || 'compact'\r\n const cookiePrefixes = resolveCookiePrefixes(requestedPrefix)\r\n const isSecure = getIsSecureCookie(config)\r\n const secret = getSecretOrThrow(config?.secret)\r\n\r\n let sessionData: string | undefined\r\n\r\n for (const prefix of cookiePrefixes) {\r\n const candidate = getSessionCookieCacheName(prefix, cookieName, isSecure)\r\n const cookieValue = parsedCookie.get(candidate)\r\n if (cookieValue) {\r\n sessionData = cookieValue\r\n break\r\n }\r\n }\r\n\r\n if (!sessionData) {\r\n const reconstructedChunks: Array<{ index: number; value: string }> = []\r\n for (const prefix of cookiePrefixes) {\r\n const candidate = getSessionCookieCacheName(prefix, cookieName, isSecure)\r\n for (const [name, value] of parsedCookie.entries()) {\r\n if (!name.startsWith(`${candidate}.`)) {\r\n continue\r\n }\r\n const parts = name.split('.')\r\n const indexStr = parts[parts.length - 1]\r\n const index = parseInt(indexStr || '0', 10)\r\n if (!Number.isNaN(index)) {\r\n reconstructedChunks.push({ index, value })\r\n }\r\n }\r\n if (reconstructedChunks.length > 0) {\r\n break\r\n }\r\n }\r\n\r\n if (reconstructedChunks.length > 0) {\r\n reconstructedChunks.sort((left, right) => left.index - right.index)\r\n sessionData = reconstructedChunks.map((chunk) => chunk.value).join('')\r\n }\r\n }\r\n\r\n if (!sessionData) {\r\n return null\r\n }\r\n\r\n if (strategy === 'jwe') {\r\n throw createError(\r\n '`jwe` strategy is not supported by the SDK cookie helper. Use compact/jwt or pass cookie data through the auth server.',\r\n )\r\n }\r\n\r\n if (strategy === 'jwt') {\r\n const payload = await verifyJwtHS256<Record<string, unknown>>(sessionData, secret)\r\n if (!payload) {\r\n return null\r\n }\r\n const sessionRecord = asObject(payload.session)\r\n const userRecord = asObject(payload.user)\r\n const updatedAt = payload.updatedAt\r\n if (!sessionRecord || !userRecord || typeof updatedAt !== 'number') {\r\n return null\r\n }\r\n\r\n if (config?.version) {\r\n const cookieVersion = typeof payload.version === 'string' ? payload.version : '1'\r\n const expectedVersion =\r\n typeof config.version === 'string'\r\n ? config.version\r\n : await config.version(sessionRecord as SessionShape, userRecord as UserShape)\r\n if (cookieVersion !== expectedVersion) {\r\n return null\r\n }\r\n }\r\n\r\n return {\r\n session: sessionRecord as SessionShape,\r\n user: userRecord as UserShape,\r\n updatedAt,\r\n version: typeof payload.version === 'string' ? payload.version : undefined,\r\n }\r\n }\r\n\r\n const compactPayload = parseJsonSafely<{\r\n session: {\r\n session: SessionShape\r\n user: UserShape\r\n updatedAt: number\r\n version?: string\r\n }\r\n expiresAt: number\r\n signature: string\r\n }>(decodeBase64UrlToString(sessionData))\r\n\r\n if (!compactPayload) {\r\n return null\r\n }\r\n\r\n const expectedSignature = await signHmacBase64Url(\r\n secret,\r\n JSON.stringify({\r\n ...compactPayload.session,\r\n expiresAt: compactPayload.expiresAt,\r\n }),\r\n )\r\n\r\n if (expectedSignature !== compactPayload.signature) {\r\n return null\r\n }\r\n\r\n if (compactPayload.expiresAt <= Date.now()) {\r\n return null\r\n }\r\n\r\n const resolvedSession = compactPayload.session\r\n if (config?.version) {\r\n const cookieVersion = resolvedSession.version || '1'\r\n const expectedVersion =\r\n typeof config.version === 'string'\r\n ? config.version\r\n : await config.version(resolvedSession.session, resolvedSession.user)\r\n if (cookieVersion !== expectedVersion) {\r\n return null\r\n }\r\n }\r\n\r\n const sessionObject = asObject(resolvedSession.session)\r\n const userObject = asObject(resolvedSession.user)\r\n if (!sessionObject || !userObject) {\r\n return null\r\n }\r\n\r\n return {\r\n session: sessionObject as SessionShape,\r\n user: userObject as UserShape,\r\n updatedAt: resolvedSession.updatedAt,\r\n version: resolvedSession.version,\r\n }\r\n}\r\n\r\nexport {\r\n HOST_COOKIE_PREFIX,\r\n SECURE_COOKIE_PREFIX,\r\n createSessionStore,\r\n getAccountCookie,\r\n getChunkedCookie,\r\n parseCookies,\r\n parseSetCookieHeader,\r\n setCookieToHeader,\r\n setRequestCookie,\r\n splitSetCookieHeader,\r\n stripSecureCookiePrefix,\r\n toCookieOptions,\r\n}\r\n\r\nexport type {\r\n AthenaAuthCookie,\r\n AthenaAuthCookies,\r\n AthenaCookieContextRuntime,\r\n AthenaCookieOptions,\r\n AthenaCookiesOptions,\r\n AthenaGetCookieCacheConfig,\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/cookies/base64.ts","../src/cookies/cookie-utils.ts","../src/cookies/crypto.ts","../src/cookies/session-store.ts","../src/cookies/session-cookie-detection.ts","../src/cookies/index.ts"],"names":[],"mappings":"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","file":"cookies.js","sourcesContent":["function getAtob(): ((input: string) => string) | undefined {\n const candidate = (globalThis as { atob?: unknown }).atob\n return typeof candidate === 'function' ? (candidate as (input: string) => string) : undefined\n}\n\nfunction getBtoa(): ((input: string) => string) | undefined {\n const candidate = (globalThis as { btoa?: unknown }).btoa\n return typeof candidate === 'function' ? (candidate as (input: string) => string) : undefined\n}\n\nfunction bytesToBinaryString(bytes: Uint8Array): string {\n let result = ''\n for (const byte of bytes) {\n result += String.fromCharCode(byte)\n }\n return result\n}\n\nfunction binaryStringToBytes(binary: string): Uint8Array {\n const bytes = new Uint8Array(binary.length)\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i)\n }\n return bytes\n}\n\nfunction encodeBase64(bytes: Uint8Array): string {\n const btoaFn = getBtoa()\n if (btoaFn) {\n return btoaFn(bytesToBinaryString(bytes))\n }\n return Buffer.from(bytes).toString('base64')\n}\n\nfunction decodeBase64(base64: string): Uint8Array {\n const atobFn = getAtob()\n if (atobFn) {\n return binaryStringToBytes(atobFn(base64))\n }\n return new Uint8Array(Buffer.from(base64, 'base64'))\n}\n\nexport function encodeBytesToBase64Url(bytes: Uint8Array): string {\n return encodeBase64(bytes).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/g, '')\n}\n\nexport function encodeStringToBase64Url(value: string): string {\n const bytes = new TextEncoder().encode(value)\n return encodeBytesToBase64Url(bytes)\n}\n\nexport function decodeBase64UrlToBytes(value: string): Uint8Array {\n const normalized = value.replace(/-/g, '+').replace(/_/g, '/')\n const paddingLength = normalized.length % 4\n const padded = paddingLength === 0 ? normalized : `${normalized}${'='.repeat(4 - paddingLength)}`\n return decodeBase64(padded)\n}\n\nexport function decodeBase64UrlToString(value: string): string {\n return new TextDecoder().decode(decodeBase64UrlToBytes(value))\n}\n","import type { AthenaCookieOptions } from './types.ts'\n\nfunction tryDecode(str: string): string {\n if (str.indexOf('%') === -1) {\n return str\n }\n try {\n return decodeURIComponent(str)\n } catch {\n return str\n }\n}\n\nexport interface CookieAttributes {\n value: string\n 'max-age'?: number\n expires?: Date\n domain?: string\n path?: string\n secure?: boolean\n httponly?: boolean\n partitioned?: boolean\n samesite?: 'strict' | 'lax' | 'none'\n [key: string]: unknown\n}\n\nexport const SECURE_COOKIE_PREFIX = '__Secure-'\nexport const HOST_COOKIE_PREFIX = '__Host-'\n\n/**\n * Remove __Secure- or __Host- prefix from cookie name.\n */\nexport function stripSecureCookiePrefix(cookieName: string): string {\n if (cookieName.startsWith(SECURE_COOKIE_PREFIX)) {\n return cookieName.slice(SECURE_COOKIE_PREFIX.length)\n }\n if (cookieName.startsWith(HOST_COOKIE_PREFIX)) {\n return cookieName.slice(HOST_COOKIE_PREFIX.length)\n }\n return cookieName\n}\n\n/**\n * Split a comma-joined `Set-Cookie` header string into individual cookies.\n */\nexport function splitSetCookieHeader(setCookie: string): string[] {\n if (!setCookie) {\n return []\n }\n\n const result: string[] = []\n let start = 0\n let i = 0\n\n while (i < setCookie.length) {\n if (setCookie[i] === ',') {\n let j = i + 1\n while (j < setCookie.length && setCookie[j] === ' ') {\n j++\n }\n while (j < setCookie.length && setCookie[j] !== '=' && setCookie[j] !== ';' && setCookie[j] !== ',') {\n j++\n }\n\n if (j < setCookie.length && setCookie[j] === '=') {\n const part = setCookie.slice(start, i).trim()\n if (part) {\n result.push(part)\n }\n start = i + 1\n while (start < setCookie.length && setCookie[start] === ' ') {\n start++\n }\n i = start\n continue\n }\n }\n i++\n }\n\n const last = setCookie.slice(start).trim()\n if (last) {\n result.push(last)\n }\n\n return result\n}\n\nexport function parseSetCookieHeader(setCookie: string): Map<string, CookieAttributes> {\n const cookies = new Map<string, CookieAttributes>()\n const cookieArray = splitSetCookieHeader(setCookie)\n\n for (const cookieString of cookieArray) {\n const parts = cookieString.split(';').map((part) => part.trim())\n const [nameValue, ...attributes] = parts\n const [name, ...valueParts] = (nameValue || '').split('=')\n if (!name) {\n continue\n }\n\n const value = unquoteCookieValue(valueParts.join('='))\n const decodedValue = tryDecode(value)\n const attrObj: CookieAttributes = { value: decodedValue }\n\n for (const attribute of attributes) {\n const [attrName, ...attrValueParts] = attribute.split('=')\n const attrValue = attrValueParts.join('=')\n const normalizedAttrName = attrName.trim().toLowerCase()\n switch (normalizedAttrName) {\n case 'max-age':\n attrObj['max-age'] = attrValue ? parseInt(attrValue.trim(), 10) : undefined\n break\n case 'expires':\n attrObj.expires = attrValue ? new Date(attrValue.trim()) : undefined\n break\n case 'domain':\n attrObj.domain = attrValue ? attrValue.trim() : undefined\n break\n case 'path':\n attrObj.path = attrValue ? attrValue.trim() : undefined\n break\n case 'secure':\n attrObj.secure = true\n break\n case 'httponly':\n attrObj.httponly = true\n break\n case 'samesite':\n attrObj.samesite = attrValue ? (attrValue.trim().toLowerCase() as 'strict' | 'lax' | 'none') : undefined\n break\n case 'partitioned':\n attrObj.partitioned = true\n break\n default:\n attrObj[normalizedAttrName] = attrValue ? attrValue.trim() : true\n break\n }\n }\n\n cookies.set(name, attrObj)\n }\n\n return cookies\n}\n\nexport function toCookieOptions(attributes: CookieAttributes): AthenaCookieOptions {\n return {\n maxAge: attributes['max-age'],\n expires: attributes.expires,\n domain: attributes.domain,\n path: attributes.path,\n secure: attributes.secure,\n httpOnly: attributes.httponly,\n sameSite: attributes.samesite,\n partitioned: attributes.partitioned,\n }\n}\n\n/**\n * Cookie-name token char set per RFC 7230 §3.2.6.\n */\nexport const cookieNameRegex = /^[\\w!#$%&'*.^`|~+-]+$/\n\nfunction unquoteCookieValue(value: string): string {\n if (value.length < 2 || !value.startsWith('\"') || !value.endsWith('\"')) {\n return value\n }\n return value.slice(1, -1)\n}\n\n/**\n * Parse a `Cookie` header into a key/value map.\n */\nexport function parseCookies(cookieHeader: string): Map<string, string> {\n const cookies = cookieHeader.split('; ')\n const cookieMap = new Map<string, string>()\n cookies.forEach((cookie) => {\n const [name, value] = cookie.split(/=(.*)/s)\n cookieMap.set(name as string, value as string)\n })\n return cookieMap\n}\n\n/**\n * Add or replace a cookie in the request `Cookie` header.\n */\nexport function setRequestCookie(headers: Headers, name: string, value: string): void {\n const cookieMap = parseCookies(headers.get('cookie') || '')\n if (cookieNameRegex.test(name)) {\n cookieMap.set(name, value)\n }\n headers.set(\n 'cookie',\n Array.from(cookieMap, ([key, currentValue]) => `${key}=${encodeURIComponent(currentValue)}`).join('; '),\n )\n}\n\n/**\n * Merge `Set-Cookie` values into a `Cookie` header.\n */\nexport function applySetCookies(target: Headers, setCookieValues: Iterable<string>): void {\n const cookieMap = parseCookies(target.get('cookie') || '')\n for (const setCookie of setCookieValues) {\n for (const [name, attr] of parseSetCookieHeader(setCookie)) {\n if (cookieNameRegex.test(name)) {\n cookieMap.set(name, attr.value)\n }\n }\n }\n target.set(\n 'cookie',\n Array.from(cookieMap, ([key, currentValue]) => `${key}=${encodeURIComponent(currentValue)}`).join('; '),\n )\n}\n\nexport function setCookieToHeader(headers: Headers) {\n return (context: { response: Response }) => {\n const setCookieHeader = context.response.headers.get('set-cookie')\n if (!setCookieHeader) {\n return\n }\n applySetCookies(headers, [setCookieHeader])\n }\n}\n","import { decodeBase64UrlToString, encodeBytesToBase64Url, encodeStringToBase64Url } from './base64.ts'\n\ntype JwtPayload = Record<string, unknown>\n\nconst HS256_ALG = 'HS256'\n\ninterface SubtleCryptoLike {\n importKey: (\n format: 'raw',\n keyData: Uint8Array,\n algorithm: { name: 'HMAC'; hash: 'SHA-256' },\n extractable: boolean,\n keyUsages: Array<'sign' | 'verify'>,\n ) => Promise<unknown>\n sign: (algorithm: 'HMAC', key: unknown, data: Uint8Array) => Promise<ArrayBuffer>\n}\n\ninterface WebCryptoLike {\n subtle?: SubtleCryptoLike\n}\n\nasync function getSubtleCrypto(): Promise<SubtleCryptoLike> {\n const globalCrypto = (globalThis as { crypto?: WebCryptoLike }).crypto\n if (globalCrypto?.subtle) {\n return globalCrypto.subtle\n }\n const { webcrypto } = await import('node:crypto')\n const subtle = (webcrypto as unknown as WebCryptoLike).subtle\n if (!subtle) {\n throw new Error('Web Crypto subtle API is unavailable.')\n }\n return subtle\n}\n\nasync function importHmacKey(secret: string, usage: 'sign' | 'verify'): Promise<unknown> {\n const subtle = await getSubtleCrypto()\n return subtle.importKey(\n 'raw',\n new TextEncoder().encode(secret),\n {\n name: 'HMAC',\n hash: 'SHA-256',\n },\n false,\n [usage] as Array<'sign' | 'verify'>,\n )\n}\n\nfunction bufferToBytes(buffer: ArrayBuffer): Uint8Array {\n return new Uint8Array(buffer)\n}\n\nfunction parseJwtPayload(payloadSegment: string): JwtPayload | null {\n try {\n const decoded = decodeBase64UrlToString(payloadSegment)\n const payload = JSON.parse(decoded) as unknown\n if (!payload || typeof payload !== 'object') {\n return null\n }\n return payload as JwtPayload\n } catch {\n return null\n }\n}\n\nfunction isJwtExpired(payload: JwtPayload): boolean {\n const exp = payload.exp\n if (typeof exp !== 'number') {\n return false\n }\n return exp < Math.floor(Date.now() / 1000)\n}\n\nexport async function signHmacBase64Url(secret: string, value: string): Promise<string> {\n const subtle = await getSubtleCrypto()\n const key = await importHmacKey(secret, 'sign')\n const signature = await subtle.sign('HMAC', key, new TextEncoder().encode(value))\n return encodeBytesToBase64Url(bufferToBytes(signature))\n}\n\nexport async function signJwtHS256(\n payload: JwtPayload,\n secret: string,\n expiresIn = 60 * 5,\n): Promise<string> {\n const now = Math.floor(Date.now() / 1000)\n const header = { alg: HS256_ALG, typ: 'JWT' }\n const fullPayload = {\n ...payload,\n iat: now,\n exp: now + expiresIn,\n }\n const headerPart = encodeStringToBase64Url(JSON.stringify(header))\n const payloadPart = encodeStringToBase64Url(JSON.stringify(fullPayload))\n const message = `${headerPart}.${payloadPart}`\n const signature = await signHmacBase64Url(secret, message)\n return `${message}.${signature}`\n}\n\nexport async function verifyJwtHS256<TPayload extends JwtPayload = JwtPayload>(\n token: string,\n secret: string,\n): Promise<TPayload | null> {\n const parts = token.split('.')\n if (parts.length !== 3) {\n return null\n }\n\n const [headerPart, payloadPart, signaturePart] = parts\n if (!headerPart || !payloadPart || !signaturePart) {\n return null\n }\n\n let header: { alg?: string } | null = null\n try {\n header = JSON.parse(decodeBase64UrlToString(headerPart)) as { alg?: string }\n } catch {\n return null\n }\n\n if (!header || header.alg !== HS256_ALG) {\n return null\n }\n\n const payload = parseJwtPayload(payloadPart)\n if (!payload) {\n return null\n }\n\n const expectedSignature = await signHmacBase64Url(secret, `${headerPart}.${payloadPart}`)\n if (expectedSignature !== signaturePart) {\n return null\n }\n\n if (isJwtExpired(payload)) {\n return null\n }\n\n return payload as TPayload\n}\n","import { decodeBase64UrlToString } from './base64.ts'\nimport { parseCookies } from './cookie-utils.ts'\nimport type { AthenaCookieContextRuntime, AthenaCookieOptions } from './types.ts'\n\nconst ALLOWED_COOKIE_SIZE = 4096\nconst ESTIMATED_EMPTY_COOKIE_SIZE = 200\nconst CHUNK_SIZE = ALLOWED_COOKIE_SIZE - ESTIMATED_EMPTY_COOKIE_SIZE\n\ninterface StoreCookie {\n name: string\n value: string\n attributes: AthenaCookieOptions\n}\n\ntype Chunks = Record<string, string>\n\nfunction getChunkIndex(cookieName: string): number {\n const parts = cookieName.split('.')\n const lastPart = parts[parts.length - 1]\n const index = parseInt(lastPart || '0', 10)\n return Number.isNaN(index) ? 0 : index\n}\n\nfunction readExistingChunks(cookieName: string, ctx: AthenaCookieContextRuntime): Chunks {\n const chunks: Chunks = {}\n const cookies = parseCookies(ctx.headers?.get('cookie') || '')\n for (const [name, value] of cookies) {\n if (name.startsWith(cookieName)) {\n chunks[name] = value\n }\n }\n return chunks\n}\n\nfunction joinChunks(chunks: Chunks): string {\n const sortedKeys = Object.keys(chunks).sort((left, right) => getChunkIndex(left) - getChunkIndex(right))\n return sortedKeys.map((key) => chunks[key]).join('')\n}\n\nfunction chunkCookie(storeName: string, cookie: StoreCookie, chunks: Chunks, ctx: AthenaCookieContextRuntime): StoreCookie[] {\n const chunkCount = Math.ceil(cookie.value.length / CHUNK_SIZE)\n if (chunkCount === 1) {\n chunks[cookie.name] = cookie.value\n return [cookie]\n }\n\n const cookies: StoreCookie[] = []\n for (let index = 0; index < chunkCount; index++) {\n const name = `${cookie.name}.${index}`\n const start = index * CHUNK_SIZE\n const value = cookie.value.substring(start, start + CHUNK_SIZE)\n cookies.push({\n ...cookie,\n name,\n value,\n })\n chunks[name] = value\n }\n\n ctx.logger?.debug?.(`CHUNKING_${storeName.toUpperCase()}_COOKIE`, {\n message: `${storeName} cookie exceeds allowed ${ALLOWED_COOKIE_SIZE} bytes.`,\n emptyCookieSize: ESTIMATED_EMPTY_COOKIE_SIZE,\n valueSize: cookie.value.length,\n chunkCount,\n chunks: cookies.map((entry) => entry.value.length + ESTIMATED_EMPTY_COOKIE_SIZE),\n })\n\n return cookies\n}\n\nfunction getCleanCookies(chunks: Chunks, cookieOptions: AthenaCookieOptions): Record<string, StoreCookie> {\n const cleanedChunks: Record<string, StoreCookie> = {}\n for (const name in chunks) {\n cleanedChunks[name] = {\n name,\n value: '',\n attributes: {\n ...cookieOptions,\n maxAge: 0,\n },\n }\n }\n return cleanedChunks\n}\n\nconst storeFactory =\n (storeName: string) =>\n (cookieName: string, cookieOptions: AthenaCookieOptions, ctx: AthenaCookieContextRuntime) => {\n const chunks = readExistingChunks(cookieName, ctx)\n\n return {\n getValue(): string {\n return joinChunks(chunks)\n },\n hasChunks(): boolean {\n return Object.keys(chunks).length > 0\n },\n chunk(value: string, options?: Partial<AthenaCookieOptions>): StoreCookie[] {\n const cleanedChunks = getCleanCookies(chunks, cookieOptions)\n for (const name in chunks) {\n delete chunks[name]\n }\n\n const cookies: Record<string, StoreCookie> = cleanedChunks\n const chunked = chunkCookie(\n storeName,\n {\n name: cookieName,\n value,\n attributes: {\n ...cookieOptions,\n ...options,\n },\n },\n chunks,\n ctx,\n )\n for (const chunk of chunked) {\n cookies[chunk.name] = chunk\n }\n return Object.values(cookies)\n },\n clean(): StoreCookie[] {\n const cleanedChunks = getCleanCookies(chunks, cookieOptions)\n for (const name in chunks) {\n delete chunks[name]\n }\n return Object.values(cleanedChunks)\n },\n setCookies(cookies: StoreCookie[]): void {\n for (const cookie of cookies) {\n ctx.setCookie(cookie.name, cookie.value, cookie.attributes)\n }\n },\n }\n }\n\nexport const createSessionStore = storeFactory('Session')\nexport const createAccountStore = storeFactory('Account')\n\nexport function getChunkedCookie(ctx: AthenaCookieContextRuntime, cookieName: string): string | null {\n const value = ctx.getCookie?.(cookieName)\n if (value) {\n return value\n }\n\n const chunks: Array<{ index: number; value: string }> = []\n const cookieHeader = ctx.headers?.get('cookie')\n if (!cookieHeader) {\n return null\n }\n\n for (const [name, parsedValue] of parseCookies(cookieHeader)) {\n if (!name.startsWith(`${cookieName}.`)) {\n continue\n }\n const parts = name.split('.')\n const indexStr = parts.at(-1)\n const index = parseInt(indexStr || '0', 10)\n if (!Number.isNaN(index)) {\n chunks.push({ index, value: parsedValue })\n }\n }\n\n if (chunks.length === 0) {\n return null\n }\n\n chunks.sort((left, right) => left.index - right.index)\n return chunks.map((entry) => entry.value).join('')\n}\n\n/**\n * SDK helper to read an account cookie value.\n * - If plain JSON: returns parsed value.\n * - If base64url-encoded JSON: returns parsed value.\n * - Otherwise: returns the raw cookie string.\n */\nexport async function getAccountCookie(\n ctx: AthenaCookieContextRuntime,\n cookieName = ctx.context.authCookies.accountData.name,\n): Promise<unknown | null> {\n const value = getChunkedCookie(ctx, cookieName)\n if (!value) {\n return null\n }\n\n try {\n return JSON.parse(value) as unknown\n } catch {\n // Fall through and try base64url payload parsing.\n }\n\n try {\n return JSON.parse(decodeBase64UrlToString(value)) as unknown\n } catch {\n return value\n }\n}\n","/**\n * Cookie-header detection for Athena Auth / Better Auth session cookies.\n *\n * Used by Next.js middleware and edge guards to decide whether a request\n * already carries a session token **without** parsing the full cookie map.\n */\n\n/**\n * Patterns that match a non-empty session token cookie assignment in a raw\n * `Cookie` request header.\n *\n * Covers:\n * - Better Auth: `better-auth.session_token`, `better-auth-session_token`\n * - Athena Auth (hyphen form): `athena-auth.session-token`, `athena-auth-session-token`\n * - Athena Auth (underscore form / default cookie helper): `athena-auth.session_token`,\n * `athena-auth-session_token`\n * - Optional `__Secure-` prefix (HTTPS cookie prefixing)\n *\n * Each pattern requires a leading start-of-string or `; ` boundary and a\n * trailing `=` so bare name fragments do not false-positive.\n */\nexport const SESSION_COOKIE_PATTERNS = [\n /(?:^|;\\s*)(?:__Secure-)?better-auth\\.session_token=/,\n /(?:^|;\\s*)(?:__Secure-)?better-auth-session_token=/,\n /(?:^|;\\s*)(?:__Secure-)?athena-auth\\.session-token=/,\n /(?:^|;\\s*)(?:__Secure-)?athena-auth-session-token=/,\n /(?:^|;\\s*)(?:__Secure-)?athena-auth\\.session_token=/,\n /(?:^|;\\s*)(?:__Secure-)?athena-auth-session_token=/,\n] as const\n\n/**\n * Returns whether a raw `Cookie` header appears to include an auth session\n * token cookie (Athena Auth or Better Auth naming).\n *\n * This is a **presence** check only — it does not validate the token value,\n * signature, or expiry. Prefer {@link getSessionCookie} when you need the\n * actual token string.\n *\n * @param cookieHeader - Value of the `Cookie` request header, or `null`/`undefined`\n * @returns `true` if any {@link SESSION_COOKIE_PATTERNS} matches\n *\n * @example\n * ```ts\n * import { hasAuthSessionCookie } from '@xylex-group/athena/cookies'\n *\n * export function middleware(request: Request) {\n * if (!hasAuthSessionCookie(request.headers.get('cookie'))) {\n * return Response.redirect(new URL('/sign-in', request.url))\n * }\n * }\n * ```\n */\nexport function hasAuthSessionCookie(\n cookieHeader: string | null | undefined,\n): boolean {\n if (!cookieHeader) {\n return false\n }\n\n return SESSION_COOKIE_PATTERNS.some((pattern) => pattern.test(cookieHeader))\n}\n","import { decodeBase64UrlToString, encodeStringToBase64Url } from './base64.ts'\nimport {\n HOST_COOKIE_PREFIX,\n SECURE_COOKIE_PREFIX,\n parseCookies,\n parseSetCookieHeader,\n setCookieToHeader,\n setRequestCookie,\n splitSetCookieHeader,\n stripSecureCookiePrefix,\n toCookieOptions,\n} from './cookie-utils.ts'\nimport { signHmacBase64Url, signJwtHS256, verifyJwtHS256 } from './crypto.ts'\nimport { createAccountStore, createSessionStore, getAccountCookie, getChunkedCookie } from './session-store.ts'\nimport type {\n AthenaAuthCookie,\n AthenaAuthCookies,\n AthenaCookieContextRuntime,\n AthenaCookieOptions,\n AthenaCookiesOptions,\n AthenaCookieVersionResolver,\n AthenaGetCookieCacheConfig,\n AthenaSessionPair,\n} from './types.ts'\n\nconst DEFAULT_COOKIE_PREFIX = 'athena-auth'\nconst LEGACY_COOKIE_PREFIX = 'better-auth'\nconst DEFAULT_SESSION_MAX_AGE = 7 * 24 * 60 * 60\nconst DEFAULT_CACHE_MAX_AGE = 60 * 5\n\nfunction isProductionRuntime(): boolean {\n return typeof process !== 'undefined' && process.env?.NODE_ENV === 'production'\n}\n\nfunction getEnvironmentSecret(): string | undefined {\n if (typeof process === 'undefined') {\n return undefined\n }\n return process.env?.ATHENA_AUTH_SECRET || process.env?.BETTER_AUTH_SECRET || process.env?.AUTH_SECRET\n}\n\nfunction isDynamicBaseURLConfig(baseURL: AthenaCookiesOptions['baseURL']): boolean {\n return (\n typeof baseURL === 'object' &&\n baseURL !== null &&\n 'allowedHosts' in baseURL &&\n Array.isArray((baseURL as { allowedHosts?: unknown }).allowedHosts)\n )\n}\n\nfunction resolveCookiePrefixes(primaryPrefix: string): string[] {\n const prefixes = [primaryPrefix]\n if (!prefixes.includes(DEFAULT_COOKIE_PREFIX)) {\n prefixes.push(DEFAULT_COOKIE_PREFIX)\n }\n if (!prefixes.includes(LEGACY_COOKIE_PREFIX)) {\n prefixes.push(LEGACY_COOKIE_PREFIX)\n }\n return prefixes\n}\n\nfunction createError(message: string): Error {\n return new Error(`@xylex-group/athena/cookies: ${message}`)\n}\n\nfunction getSecretOrThrow(secret?: string): string {\n const resolved = secret || getEnvironmentSecret()\n if (!resolved) {\n throw createError(\n 'getCookieCache requires a secret. Pass `secret` or set ATHENA_AUTH_SECRET/BETTER_AUTH_SECRET/AUTH_SECRET.',\n )\n }\n return resolved\n}\n\nfunction asObject(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== 'object') {\n return null\n }\n return value as Record<string, unknown>\n}\n\nfunction getSessionTokenFromPair(session: AthenaSessionPair): string {\n const token = session.session?.token\n if (typeof token !== 'string' || token.length === 0) {\n throw createError('setSessionCookie requires `session.session.token` to be a non-empty string.')\n }\n return token\n}\n\nasync function resolveCookieVersion(\n versionConfig: AthenaCookieVersionResolver | undefined,\n session: Record<string, unknown>,\n user: Record<string, unknown>,\n): Promise<string> {\n if (!versionConfig) {\n return '1'\n }\n if (typeof versionConfig === 'string') {\n return versionConfig\n }\n return versionConfig(session, user)\n}\n\nfunction getSessionCookieCacheName(cookiePrefix: string, cookieName: string, isSecure: boolean): string {\n return isSecure ? `${SECURE_COOKIE_PREFIX}${cookiePrefix}.${cookieName}` : `${cookiePrefix}.${cookieName}`\n}\n\nasync function setCookieValue(\n ctx: AthenaCookieContextRuntime,\n name: string,\n value: string,\n attributes: AthenaCookieOptions,\n): Promise<void> {\n const secret = ctx.context.secret\n if (secret && typeof ctx.setSignedCookie === 'function') {\n await ctx.setSignedCookie(name, value, secret, attributes)\n return\n }\n ctx.setCookie(name, value, attributes)\n}\n\nfunction parseJsonSafely<T>(value: string): T | null {\n try {\n return JSON.parse(value) as T\n } catch {\n return null\n }\n}\n\nfunction getIsSecureCookie(config: { isSecure?: boolean } | undefined): boolean {\n if (config?.isSecure !== undefined) {\n return config.isSecure\n }\n return isProductionRuntime()\n}\n\nexport function createCookieGetter(options: AthenaCookiesOptions) {\n const baseURLString = typeof options.baseURL === 'string' ? options.baseURL : undefined\n const dynamicProtocol =\n typeof options.baseURL === 'object' && options.baseURL !== null ? options.baseURL.protocol : undefined\n\n const secure =\n options.advanced?.useSecureCookies !== undefined\n ? options.advanced.useSecureCookies\n : dynamicProtocol === 'https'\n ? true\n : dynamicProtocol === 'http'\n ? false\n : baseURLString\n ? baseURLString.startsWith('https://')\n : isProductionRuntime()\n\n const secureCookiePrefix = secure ? SECURE_COOKIE_PREFIX : ''\n const crossSubdomainEnabled = !!options.advanced?.crossSubDomainCookies?.enabled\n const domain = crossSubdomainEnabled\n ? options.advanced?.crossSubDomainCookies?.domain || (baseURLString ? new URL(baseURLString).hostname : undefined)\n : undefined\n\n if (crossSubdomainEnabled && !domain && !isDynamicBaseURLConfig(options.baseURL)) {\n throw createError('baseURL is required when `crossSubDomainCookies.enabled` is true.')\n }\n\n function createCookie(cookieName: string, overrideAttributes: Partial<AthenaCookieOptions> = {}): AthenaAuthCookie {\n const prefix = options.advanced?.cookiePrefix || DEFAULT_COOKIE_PREFIX\n const name = options.advanced?.cookies?.[cookieName]?.name || `${prefix}.${cookieName}`\n const attributes = options.advanced?.cookies?.[cookieName]?.attributes || {}\n\n return {\n name: `${secureCookiePrefix}${name}`,\n attributes: {\n secure: !!secureCookiePrefix,\n sameSite: 'lax',\n path: '/',\n httpOnly: true,\n ...(crossSubdomainEnabled ? { domain } : {}),\n ...options.advanced?.defaultCookieAttributes,\n ...overrideAttributes,\n ...attributes,\n },\n }\n }\n\n return createCookie\n}\n\nexport function getCookies(options: AthenaCookiesOptions): AthenaAuthCookies {\n const createCookie = createCookieGetter(options)\n const sessionToken = createCookie('session_token', { maxAge: options.session?.expiresIn || DEFAULT_SESSION_MAX_AGE })\n const sessionData = createCookie('session_data', { maxAge: options.session?.cookieCache?.maxAge || DEFAULT_CACHE_MAX_AGE })\n const accountData = createCookie('account_data', { maxAge: options.session?.cookieCache?.maxAge || DEFAULT_CACHE_MAX_AGE })\n const dontRememberToken = createCookie('dont_remember')\n\n return {\n sessionToken: {\n name: sessionToken.name,\n attributes: sessionToken.attributes,\n },\n sessionData: {\n name: sessionData.name,\n attributes: sessionData.attributes,\n },\n dontRememberToken: {\n name: dontRememberToken.name,\n attributes: dontRememberToken.attributes,\n },\n accountData: {\n name: accountData.name,\n attributes: accountData.attributes,\n },\n }\n}\n\nexport async function setCookieCache(\n ctx: AthenaCookieContextRuntime,\n session: AthenaSessionPair,\n dontRememberMe: boolean,\n): Promise<void> {\n const cookieCacheConfig = ctx.context.options?.session?.cookieCache\n if (!cookieCacheConfig?.enabled) {\n return\n }\n\n const version = await resolveCookieVersion(\n cookieCacheConfig.version,\n session.session as Record<string, unknown>,\n session.user as Record<string, unknown>,\n )\n\n const sessionData = {\n session: session.session,\n user: session.user,\n updatedAt: Date.now(),\n version,\n }\n\n const baseAttributes = ctx.context.authCookies.sessionData.attributes\n const maxAge = dontRememberMe ? undefined : baseAttributes.maxAge\n const options: AthenaCookieOptions = {\n ...baseAttributes,\n maxAge,\n }\n const expiresAt = Date.now() + ((options.maxAge || 60) * 1000)\n const strategy = cookieCacheConfig.strategy || 'compact'\n const secret = getSecretOrThrow(ctx.context.secret)\n\n let encoded: string\n if (strategy === 'jwt') {\n encoded = await signJwtHS256(sessionData, secret, options.maxAge || DEFAULT_CACHE_MAX_AGE)\n } else if (strategy === 'jwe') {\n throw createError('`jwe` strategy is not supported by the SDK cookie helper.')\n } else {\n const signature = await signHmacBase64Url(\n secret,\n JSON.stringify({\n ...sessionData,\n expiresAt,\n }),\n )\n encoded = encodeStringToBase64Url(\n JSON.stringify({\n session: sessionData,\n expiresAt,\n signature,\n }),\n )\n }\n\n if (encoded.length > 4093) {\n const store = createSessionStore(ctx.context.authCookies.sessionData.name, options, ctx)\n const cookies = store.chunk(encoded, options)\n store.setCookies(cookies)\n } else {\n const store = createSessionStore(ctx.context.authCookies.sessionData.name, options, ctx)\n if (store.hasChunks()) {\n store.setCookies(store.clean())\n }\n ctx.setCookie(ctx.context.authCookies.sessionData.name, encoded, options)\n }\n}\n\nexport async function setSessionCookie(\n ctx: AthenaCookieContextRuntime,\n session: AthenaSessionPair,\n dontRememberMe?: boolean,\n overrides?: Partial<AthenaCookieOptions>,\n): Promise<void> {\n if (dontRememberMe === undefined && typeof ctx.getSignedCookie === 'function' && ctx.context.secret) {\n const existingFlag = await ctx.getSignedCookie(ctx.context.authCookies.dontRememberToken.name, ctx.context.secret)\n dontRememberMe = !!existingFlag\n }\n\n const resolvedDontRememberMe = dontRememberMe ?? false\n const token = getSessionTokenFromPair(session)\n const options = ctx.context.authCookies.sessionToken.attributes\n const maxAge = resolvedDontRememberMe ? undefined : ctx.context.sessionConfig?.expiresIn\n await setCookieValue(ctx, ctx.context.authCookies.sessionToken.name, token, {\n ...options,\n maxAge,\n ...overrides,\n })\n\n if (resolvedDontRememberMe) {\n await setCookieValue(\n ctx,\n ctx.context.authCookies.dontRememberToken.name,\n 'true',\n ctx.context.authCookies.dontRememberToken.attributes,\n )\n }\n\n await setCookieCache(ctx, session, resolvedDontRememberMe)\n ctx.context.setNewSession?.(session)\n}\n\n/**\n * Expires a cookie by setting `maxAge: 0` while preserving attributes.\n */\nexport function expireCookie(ctx: AthenaCookieContextRuntime, cookie: AthenaAuthCookie): void {\n ctx.setCookie(cookie.name, '', {\n ...cookie.attributes,\n maxAge: 0,\n })\n}\n\nexport function deleteSessionCookie(ctx: AthenaCookieContextRuntime, skipDontRememberMe?: boolean): void {\n expireCookie(ctx, ctx.context.authCookies.sessionToken)\n expireCookie(ctx, ctx.context.authCookies.sessionData)\n\n if (ctx.context.options?.account?.storeAccountCookie) {\n expireCookie(ctx, ctx.context.authCookies.accountData)\n const accountStore = createAccountStore(\n ctx.context.authCookies.accountData.name,\n ctx.context.authCookies.accountData.attributes,\n ctx,\n )\n accountStore.setCookies(accountStore.clean())\n }\n\n const sessionStore = createSessionStore(\n ctx.context.authCookies.sessionData.name,\n ctx.context.authCookies.sessionData.attributes,\n ctx,\n )\n sessionStore.setCookies(sessionStore.clean())\n\n if (!skipDontRememberMe) {\n expireCookie(ctx, ctx.context.authCookies.dontRememberToken)\n }\n}\n\nexport const getSessionCookie = (\n request: Request | Headers,\n config?:\n | {\n cookiePrefix?: string\n cookieName?: string\n path?: string\n }\n | undefined,\n): string | null => {\n const cookies = (request instanceof Headers || !('headers' in request) ? request : request.headers).get('cookie')\n if (!cookies) {\n return null\n }\n\n const { cookieName = 'session_token', cookiePrefix = 'athena-auth' } = config || {}\n const parsedCookie = parseCookies(cookies)\n const getCookie = (name: string): string | undefined =>\n parsedCookie.get(name) || parsedCookie.get(`${SECURE_COOKIE_PREFIX}${name}`)\n const candidateCookieNames = Array.from(new Set([\n cookieName,\n cookieName.replace(/_/g, '-'),\n cookieName.replace(/-/g, '_'),\n ])).filter(Boolean)\n for (const candidateName of candidateCookieNames) {\n const sessionToken =\n getCookie(`${cookiePrefix}.${candidateName}`) || getCookie(`${cookiePrefix}-${candidateName}`)\n if (sessionToken) {\n return sessionToken\n }\n }\n return null\n}\n\nexport const getCookieCache = async <\n SessionShape extends Record<string, unknown> = Record<string, unknown>,\n UserShape extends Record<string, unknown> = Record<string, unknown>,\n>(\n request: Request | Headers,\n config?: AthenaGetCookieCacheConfig<SessionShape, UserShape>,\n): Promise<{\n session: SessionShape\n user: UserShape\n updatedAt: number\n version?: string\n} | null> => {\n const headers = request instanceof Headers || !('headers' in request) ? request : request.headers\n const cookieHeader = headers.get('cookie')\n if (!cookieHeader) {\n return null\n }\n\n const parsedCookie = parseCookies(cookieHeader)\n const cookieName = config?.cookieName || 'session_data'\n const requestedPrefix = config?.cookiePrefix || DEFAULT_COOKIE_PREFIX\n const strategy = config?.strategy || 'compact'\n const cookiePrefixes = resolveCookiePrefixes(requestedPrefix)\n const isSecure = getIsSecureCookie(config)\n const secret = getSecretOrThrow(config?.secret)\n\n let sessionData: string | undefined\n\n for (const prefix of cookiePrefixes) {\n const candidate = getSessionCookieCacheName(prefix, cookieName, isSecure)\n const cookieValue = parsedCookie.get(candidate)\n if (cookieValue) {\n sessionData = cookieValue\n break\n }\n }\n\n if (!sessionData) {\n const reconstructedChunks: Array<{ index: number; value: string }> = []\n for (const prefix of cookiePrefixes) {\n const candidate = getSessionCookieCacheName(prefix, cookieName, isSecure)\n for (const [name, value] of parsedCookie.entries()) {\n if (!name.startsWith(`${candidate}.`)) {\n continue\n }\n const parts = name.split('.')\n const indexStr = parts[parts.length - 1]\n const index = parseInt(indexStr || '0', 10)\n if (!Number.isNaN(index)) {\n reconstructedChunks.push({ index, value })\n }\n }\n if (reconstructedChunks.length > 0) {\n break\n }\n }\n\n if (reconstructedChunks.length > 0) {\n reconstructedChunks.sort((left, right) => left.index - right.index)\n sessionData = reconstructedChunks.map((chunk) => chunk.value).join('')\n }\n }\n\n if (!sessionData) {\n return null\n }\n\n if (strategy === 'jwe') {\n throw createError(\n '`jwe` strategy is not supported by the SDK cookie helper. Use compact/jwt or pass cookie data through the auth server.',\n )\n }\n\n if (strategy === 'jwt') {\n const payload = await verifyJwtHS256<Record<string, unknown>>(sessionData, secret)\n if (!payload) {\n return null\n }\n const sessionRecord = asObject(payload.session)\n const userRecord = asObject(payload.user)\n const updatedAt = payload.updatedAt\n if (!sessionRecord || !userRecord || typeof updatedAt !== 'number') {\n return null\n }\n\n if (config?.version) {\n const cookieVersion = typeof payload.version === 'string' ? payload.version : '1'\n const expectedVersion =\n typeof config.version === 'string'\n ? config.version\n : await config.version(sessionRecord as SessionShape, userRecord as UserShape)\n if (cookieVersion !== expectedVersion) {\n return null\n }\n }\n\n return {\n session: sessionRecord as SessionShape,\n user: userRecord as UserShape,\n updatedAt,\n version: typeof payload.version === 'string' ? payload.version : undefined,\n }\n }\n\n const compactPayload = parseJsonSafely<{\n session: {\n session: SessionShape\n user: UserShape\n updatedAt: number\n version?: string\n }\n expiresAt: number\n signature: string\n }>(decodeBase64UrlToString(sessionData))\n\n if (!compactPayload) {\n return null\n }\n\n const expectedSignature = await signHmacBase64Url(\n secret,\n JSON.stringify({\n ...compactPayload.session,\n expiresAt: compactPayload.expiresAt,\n }),\n )\n\n if (expectedSignature !== compactPayload.signature) {\n return null\n }\n\n if (compactPayload.expiresAt <= Date.now()) {\n return null\n }\n\n const resolvedSession = compactPayload.session\n if (config?.version) {\n const cookieVersion = resolvedSession.version || '1'\n const expectedVersion =\n typeof config.version === 'string'\n ? config.version\n : await config.version(resolvedSession.session, resolvedSession.user)\n if (cookieVersion !== expectedVersion) {\n return null\n }\n }\n\n const sessionObject = asObject(resolvedSession.session)\n const userObject = asObject(resolvedSession.user)\n if (!sessionObject || !userObject) {\n return null\n }\n\n return {\n session: sessionObject as SessionShape,\n user: userObject as UserShape,\n updatedAt: resolvedSession.updatedAt,\n version: resolvedSession.version,\n }\n}\n\nexport {\n SESSION_COOKIE_PATTERNS,\n hasAuthSessionCookie,\n} from './session-cookie-detection.ts'\n\nexport {\n HOST_COOKIE_PREFIX,\n SECURE_COOKIE_PREFIX,\n createSessionStore,\n getAccountCookie,\n getChunkedCookie,\n parseCookies,\n parseSetCookieHeader,\n setCookieToHeader,\n setRequestCookie,\n splitSetCookieHeader,\n stripSecureCookiePrefix,\n toCookieOptions,\n}\n\nexport type {\n AthenaAuthCookie,\n AthenaAuthCookies,\n AthenaCookieContextRuntime,\n AthenaCookieOptions,\n AthenaCookiesOptions,\n AthenaGetCookieCacheConfig,\n}\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -806,7 +806,7 @@ var getCookieCache = async (request2, config) => {
|
|
|
806
806
|
|
|
807
807
|
// src/utils/athena-request-headers.ts
|
|
808
808
|
var NO_CACHE_HEADER_VALUE = "no-cache";
|
|
809
|
-
var API_KEY_HEADER_CANDIDATES = ["X-Api-Key", "x-api-key", "apikey"];
|
|
809
|
+
var API_KEY_HEADER_CANDIDATES = ["X-Athena-Key", "x-athena-key", "X-Api-Key", "x-api-key", "apikey"];
|
|
810
810
|
var ATHENA_KEY_HEADER_CANDIDATES = ["X-Athena-Key", "x-athena-key"];
|
|
811
811
|
var SESSION_TOKEN_HEADER_CANDIDATES = ["X-Athena-Auth-Session-Token"];
|
|
812
812
|
var BEARER_MIRROR_HEADER_CANDIDATES = ["X-Athena-Auth-Bearer-Token"];
|
|
@@ -908,17 +908,6 @@ function buildServiceRequestHeaders(profile, sdkHeaderValue, config, options, ex
|
|
|
908
908
|
});
|
|
909
909
|
}
|
|
910
910
|
function applyAthenaApiKeyHeaders(headers, apiKey, athenaKey) {
|
|
911
|
-
if (apiKey) {
|
|
912
|
-
if (!hasHeaderIgnoreCase(headers, "apikey")) {
|
|
913
|
-
headers.apikey = apiKey;
|
|
914
|
-
}
|
|
915
|
-
if (!Object.hasOwn(headers, "x-api-key")) {
|
|
916
|
-
headers["x-api-key"] = apiKey;
|
|
917
|
-
}
|
|
918
|
-
if (!Object.hasOwn(headers, "X-Api-Key")) {
|
|
919
|
-
headers["X-Api-Key"] = apiKey;
|
|
920
|
-
}
|
|
921
|
-
}
|
|
922
911
|
const resolvedAthenaKey = normalizeHeaderValue(athenaKey) ?? normalizeHeaderValue(apiKey);
|
|
923
912
|
if (resolvedAthenaKey && !hasHeaderIgnoreCase(headers, "X-Athena-Key")) {
|
|
924
913
|
headers["X-Athena-Key"] = resolvedAthenaKey;
|
|
@@ -1044,7 +1033,7 @@ function buildAthenaRequestHeaders(input) {
|
|
|
1044
1033
|
|
|
1045
1034
|
// package.json
|
|
1046
1035
|
var package_default = {
|
|
1047
|
-
version: "2.
|
|
1036
|
+
version: "2.13.0"
|
|
1048
1037
|
};
|
|
1049
1038
|
|
|
1050
1039
|
// src/sdk-version.ts
|
|
@@ -3747,38 +3736,6 @@ async function withRetry(config, fn) {
|
|
|
3747
3736
|
throw new Error("withRetry reached an unexpected state");
|
|
3748
3737
|
}
|
|
3749
3738
|
|
|
3750
|
-
// src/db/module.ts
|
|
3751
|
-
function createDbModule(input) {
|
|
3752
|
-
const db = {
|
|
3753
|
-
from: input.from,
|
|
3754
|
-
select(table2, first, second) {
|
|
3755
|
-
if (first && typeof first === "object" && !Array.isArray(first)) {
|
|
3756
|
-
return input.from(table2).select(void 0, first);
|
|
3757
|
-
}
|
|
3758
|
-
return input.from(table2).select(first, second);
|
|
3759
|
-
},
|
|
3760
|
-
insert(table2, values, options) {
|
|
3761
|
-
return Array.isArray(values) ? input.from(table2).insert(values, options) : input.from(table2).insert(values, options);
|
|
3762
|
-
},
|
|
3763
|
-
upsert(table2, values, options) {
|
|
3764
|
-
return Array.isArray(values) ? input.from(table2).upsert(values, options) : input.from(table2).upsert(values, options);
|
|
3765
|
-
},
|
|
3766
|
-
update(table2, values, options) {
|
|
3767
|
-
return input.from(table2).update(values, options);
|
|
3768
|
-
},
|
|
3769
|
-
delete(table2, options) {
|
|
3770
|
-
return input.from(table2).delete(options);
|
|
3771
|
-
},
|
|
3772
|
-
rpc(fn, args, options) {
|
|
3773
|
-
return input.rpc(fn, args, options);
|
|
3774
|
-
},
|
|
3775
|
-
query(query, options) {
|
|
3776
|
-
return input.query(query, options);
|
|
3777
|
-
}
|
|
3778
|
-
};
|
|
3779
|
-
return db;
|
|
3780
|
-
}
|
|
3781
|
-
|
|
3782
3739
|
// src/storage/file.ts
|
|
3783
3740
|
function createStorageFileModule(base, config = {}) {
|
|
3784
3741
|
const upload = async (input, options) => {
|
|
@@ -9410,7 +9367,30 @@ function createClientFromConfig(config, sourceConfig) {
|
|
|
9410
9367
|
config.experimental,
|
|
9411
9368
|
queryTracer
|
|
9412
9369
|
);
|
|
9413
|
-
const
|
|
9370
|
+
const untypedDbFrom = from;
|
|
9371
|
+
const db = {
|
|
9372
|
+
from,
|
|
9373
|
+
select(table2, first, second) {
|
|
9374
|
+
if (first && typeof first === "object" && !Array.isArray(first)) {
|
|
9375
|
+
return untypedDbFrom(table2).select(void 0, first);
|
|
9376
|
+
}
|
|
9377
|
+
return untypedDbFrom(table2).select(first, second);
|
|
9378
|
+
},
|
|
9379
|
+
insert(table2, values, options) {
|
|
9380
|
+
return Array.isArray(values) ? untypedDbFrom(table2).insert(values, options) : untypedDbFrom(table2).insert(values, options);
|
|
9381
|
+
},
|
|
9382
|
+
upsert(table2, values, options) {
|
|
9383
|
+
return Array.isArray(values) ? untypedDbFrom(table2).upsert(values, options) : untypedDbFrom(table2).upsert(values, options);
|
|
9384
|
+
},
|
|
9385
|
+
update(table2, values, options) {
|
|
9386
|
+
return untypedDbFrom(table2).update(values, options);
|
|
9387
|
+
},
|
|
9388
|
+
delete(table2, options) {
|
|
9389
|
+
return untypedDbFrom(table2).delete(options);
|
|
9390
|
+
},
|
|
9391
|
+
rpc,
|
|
9392
|
+
query
|
|
9393
|
+
};
|
|
9414
9394
|
const chat = createChatModule({
|
|
9415
9395
|
baseUrl: config.chatUrl,
|
|
9416
9396
|
apiKey: config.apiKey,
|
|
@@ -9561,7 +9541,9 @@ function createClientFromConfig(config, sourceConfig) {
|
|
|
9561
9541
|
var AthenaClient = class {
|
|
9562
9542
|
/** Create a fluent builder for a strongly-typed Athena SDK client. */
|
|
9563
9543
|
static builder() {
|
|
9564
|
-
return createAthenaClientBuilder(
|
|
9544
|
+
return createAthenaClientBuilder(
|
|
9545
|
+
(config) => createClientFromInput(config)
|
|
9546
|
+
);
|
|
9565
9547
|
}
|
|
9566
9548
|
static fromEnvironment(options = {}) {
|
|
9567
9549
|
const env = options.env ?? process.env;
|
|
@@ -9592,7 +9574,8 @@ var AthenaClient = class {
|
|
|
9592
9574
|
});
|
|
9593
9575
|
}
|
|
9594
9576
|
};
|
|
9595
|
-
function createClient(
|
|
9577
|
+
function createClient(...args) {
|
|
9578
|
+
const [configOrUrl, apiKey, options] = args;
|
|
9596
9579
|
if (typeof configOrUrl === "string" || configOrUrl === null || configOrUrl === void 0) {
|
|
9597
9580
|
return createClientFromInput({
|
|
9598
9581
|
url: configOrUrl,
|
|
@@ -10213,7 +10196,8 @@ var TypedAthenaClientImpl = class _TypedAthenaClientImpl {
|
|
|
10213
10196
|
fromModel(database, schema, model) {
|
|
10214
10197
|
const modelDef = this.registryNavigator.resolveModel(database, schema, model);
|
|
10215
10198
|
const tableName = this.registryNavigator.resolveTableName(schema, model, modelDef);
|
|
10216
|
-
|
|
10199
|
+
const from = this.baseClient.from;
|
|
10200
|
+
return from(tableName);
|
|
10217
10201
|
}
|
|
10218
10202
|
};
|
|
10219
10203
|
function createTypedClient(registry, url, apiKey, options) {
|
|
@@ -12815,6 +12799,73 @@ function athenaAuth(config) {
|
|
|
12815
12799
|
return auth;
|
|
12816
12800
|
}
|
|
12817
12801
|
|
|
12802
|
+
// src/organization/ensure-active-organization.ts
|
|
12803
|
+
function normalizeOrganizationId(value) {
|
|
12804
|
+
if (typeof value !== "string") {
|
|
12805
|
+
return null;
|
|
12806
|
+
}
|
|
12807
|
+
const normalized = value.trim();
|
|
12808
|
+
return normalized.length > 0 ? normalized : null;
|
|
12809
|
+
}
|
|
12810
|
+
function defaultSelectOrganizationId(organizations) {
|
|
12811
|
+
for (const organization of organizations) {
|
|
12812
|
+
const id = normalizeOrganizationId(organization.id);
|
|
12813
|
+
if (id) {
|
|
12814
|
+
return id;
|
|
12815
|
+
}
|
|
12816
|
+
}
|
|
12817
|
+
return null;
|
|
12818
|
+
}
|
|
12819
|
+
async function ensureActiveOrganization(options) {
|
|
12820
|
+
const currentActiveOrganizationId = normalizeOrganizationId(
|
|
12821
|
+
options.session?.session?.activeOrganizationId
|
|
12822
|
+
);
|
|
12823
|
+
if (currentActiveOrganizationId) {
|
|
12824
|
+
return {
|
|
12825
|
+
activeOrganizationId: currentActiveOrganizationId,
|
|
12826
|
+
didSetActiveOrganization: false
|
|
12827
|
+
};
|
|
12828
|
+
}
|
|
12829
|
+
let organizations;
|
|
12830
|
+
try {
|
|
12831
|
+
organizations = await options.listOrganizations();
|
|
12832
|
+
} catch (error) {
|
|
12833
|
+
options.onError?.(error);
|
|
12834
|
+
return {
|
|
12835
|
+
activeOrganizationId: null,
|
|
12836
|
+
didSetActiveOrganization: false
|
|
12837
|
+
};
|
|
12838
|
+
}
|
|
12839
|
+
if (organizations.length === 0) {
|
|
12840
|
+
return {
|
|
12841
|
+
activeOrganizationId: null,
|
|
12842
|
+
didSetActiveOrganization: false
|
|
12843
|
+
};
|
|
12844
|
+
}
|
|
12845
|
+
const selectedOrganizationId = normalizeOrganizationId(
|
|
12846
|
+
(options.selectOrganizationId ?? defaultSelectOrganizationId)(organizations)
|
|
12847
|
+
);
|
|
12848
|
+
if (!selectedOrganizationId) {
|
|
12849
|
+
return {
|
|
12850
|
+
activeOrganizationId: null,
|
|
12851
|
+
didSetActiveOrganization: false
|
|
12852
|
+
};
|
|
12853
|
+
}
|
|
12854
|
+
try {
|
|
12855
|
+
await options.setActiveOrganization(selectedOrganizationId);
|
|
12856
|
+
return {
|
|
12857
|
+
activeOrganizationId: selectedOrganizationId,
|
|
12858
|
+
didSetActiveOrganization: true
|
|
12859
|
+
};
|
|
12860
|
+
} catch (error) {
|
|
12861
|
+
options.onError?.(error);
|
|
12862
|
+
return {
|
|
12863
|
+
activeOrganizationId: null,
|
|
12864
|
+
didSetActiveOrganization: false
|
|
12865
|
+
};
|
|
12866
|
+
}
|
|
12867
|
+
}
|
|
12868
|
+
|
|
12818
12869
|
exports.ATHENA_AUTH_ADMIN_LIMITS = ATHENA_AUTH_ADMIN_LIMITS;
|
|
12819
12870
|
exports.ATHENA_AUTH_BASE_ERROR_CODES = ATHENA_AUTH_BASE_ERROR_CODES;
|
|
12820
12871
|
exports.ATHENA_AUTH_MAX_ADMIN_JSON_BYTES = ATHENA_AUTH_MAX_ADMIN_JSON_BYTES;
|
|
@@ -12851,6 +12902,7 @@ exports.defineGeneratorConfig = defineGeneratorConfig;
|
|
|
12851
12902
|
exports.defineModel = defineModel;
|
|
12852
12903
|
exports.defineRegistry = defineRegistry;
|
|
12853
12904
|
exports.defineSchema = defineSchema;
|
|
12905
|
+
exports.ensureActiveOrganization = ensureActiveOrganization;
|
|
12854
12906
|
exports.enumeration = enumeration;
|
|
12855
12907
|
exports.filterIntrospectionSnapshot = filterIntrospectionSnapshot;
|
|
12856
12908
|
exports.findGeneratorConfigPath = findGeneratorConfigPath;
|