@xylex-group/athena 3.0.2 → 3.0.3
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/README.md +1 -1
- package/dist/billing.cjs +1 -1
- package/dist/billing.cjs.map +1 -1
- package/dist/billing.js +1 -1
- package/dist/billing.js.map +1 -1
- package/dist/browser.cjs +1 -1
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.cts +4 -4
- package/dist/browser.d.ts +4 -4
- package/dist/browser.js +1 -1
- package/dist/browser.js.map +1 -1
- package/dist/cli/index.cjs +909 -13
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.cts +2 -2
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.js +910 -14
- package/dist/cli/index.js.map +1 -1
- package/dist/index.cjs +840 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +841 -11
- package/dist/index.js.map +1 -1
- package/dist/{module-CkUM6v58.d.ts → module-BruTcxe0.d.ts} +1 -1
- package/dist/{module-CB25egcO.d.cts → module-CPG3ULxQ.d.cts} +1 -1
- package/dist/next/client.cjs +1 -1
- package/dist/next/client.cjs.map +1 -1
- package/dist/next/client.js +1 -1
- package/dist/next/client.js.map +1 -1
- package/dist/next/server.cjs +1 -1
- package/dist/next/server.cjs.map +1 -1
- package/dist/next/server.js +1 -1
- package/dist/next/server.js.map +1 -1
- package/dist/{pipeline-D4W-Cc-A.d.cts → pipeline-CIzV9f7b.d.cts} +1 -1
- package/dist/{pipeline-B8aN2EHe.d.ts → pipeline-DNlc8Ayn.d.ts} +1 -1
- package/dist/react.cjs +1 -1
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +1 -1
- package/dist/react.js.map +1 -1
- package/dist/{types-BaAMXCqK.d.ts → types-D6tZ9aoq.d.ts} +34 -1
- package/dist/{types-BBm-kEBL.d.cts → types-DFr2cL1N.d.cts} +34 -1
- package/package.json +1 -1
package/dist/billing.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../package.json","../src/sdk-version.ts","../src/cookies/cookie-utils.ts","../src/cookies/index.ts","../src/utils/athena-request-headers.ts","../src/gateway/errors.ts","../src/gateway/url.ts","../src/billing/module.ts","../src/billing/live-http-routes.json"],"names":[],"mappings":"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","file":"billing.cjs","sourcesContent":["{\n \"author\": \"floris@xylex.group\",\n \"bin\": {\n \"athena-js\": \"bin/athena-js.js\"\n },\n \"dependencies\": {\n \"blessed\": \"^0.1.81\",\n \"chalk\": \"^4.1.2\",\n \"cron-parser\": \"^4.9.0\",\n \"jose\": \"^6.2.3\",\n \"pg\": \"^8.16.0\",\n \"server-only\": \"^0.0.1\",\n \"use-sync-external-store\": \"^1.5.0\",\n \"uuid\": \"^9.0.1\",\n \"zod\": \"^4.0.1\"\n },\n \"description\": \"Athena JS SDK\",\n \"devDependencies\": {\n \"@react-email/components\": \"^1.0.12\",\n \"@react-email/render\": \"^2.0.8\",\n \"@types/blessed\": \"^0.1.25\",\n \"@types/node\": \"^20.10.5\",\n \"@types/pg\": \"^8.15.1\",\n \"@types/react\": \"^18.3.12\",\n \"@types/react-test-renderer\": \"^18.3.1\",\n \"@types/uuid\": \"^9.0.7\",\n \"@typescript-eslint/eslint-plugin\": \"^8.57.0\",\n \"@typescript-eslint/parser\": \"^8.57.0\",\n \"eslint\": \"^8.57.1\",\n \"express\": \"^4.22.2\",\n \"react\": \"^18.3.1\",\n \"react-dom\": \"^18.3.1\",\n \"react-test-renderer\": \"^18.3.1\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.7.0\",\n \"typescript\": \"^5.3.3\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"exports\": {\n \".\": {\n \"browser\": {\n \"default\": \"./dist/browser.js\",\n \"import\": \"./dist/browser.js\",\n \"require\": \"./dist/browser.cjs\",\n \"types\": \"./dist/browser.d.ts\"\n },\n \"default\": \"./dist/index.js\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\",\n \"types\": \"./dist/index.d.ts\"\n },\n \"./admin\": {\n \"default\": \"./dist/admin.js\",\n \"import\": \"./dist/admin.js\",\n \"require\": \"./dist/admin.cjs\",\n \"types\": \"./dist/admin.d.ts\"\n },\n \"./billing\": {\n \"default\": \"./dist/billing.js\",\n \"import\": \"./dist/billing.js\",\n \"require\": \"./dist/billing.cjs\",\n \"types\": \"./dist/billing.d.ts\"\n },\n \"./browser\": {\n \"default\": \"./dist/browser.js\",\n \"import\": \"./dist/browser.js\",\n \"require\": \"./dist/browser.cjs\",\n \"types\": \"./dist/browser.d.ts\"\n },\n \"./cookies\": {\n \"default\": \"./dist/cookies.js\",\n \"import\": \"./dist/cookies.js\",\n \"require\": \"./dist/cookies.cjs\",\n \"types\": \"./dist/cookies.d.ts\"\n },\n \"./next/client\": {\n \"default\": \"./dist/next/client.js\",\n \"import\": \"./dist/next/client.js\",\n \"require\": \"./dist/next/client.cjs\",\n \"types\": \"./dist/next/client.d.ts\"\n },\n \"./next/server\": {\n \"default\": \"./dist/next/server.js\",\n \"import\": \"./dist/next/server.js\",\n \"require\": \"./dist/next/server.cjs\",\n \"types\": \"./dist/next/server.d.ts\"\n },\n \"./organization\": {\n \"default\": \"./dist/organization.js\",\n \"import\": \"./dist/organization.js\",\n \"require\": \"./dist/organization.cjs\",\n \"types\": \"./dist/organization.d.ts\"\n },\n \"./package.json\": \"./package.json\",\n \"./react\": {\n \"default\": \"./dist/react.js\",\n \"import\": \"./dist/react.js\",\n \"require\": \"./dist/react.cjs\",\n \"types\": \"./dist/react.d.ts\"\n },\n \"./social-providers\": {\n \"default\": \"./dist/social-providers.js\",\n \"import\": \"./dist/social-providers.js\",\n \"require\": \"./dist/social-providers.cjs\",\n \"types\": \"./dist/social-providers.d.ts\"\n },\n \"./utils\": {\n \"default\": \"./dist/utils.js\",\n \"import\": \"./dist/utils.js\",\n \"require\": \"./dist/utils.cjs\",\n \"types\": \"./dist/utils.d.ts\"\n }\n },\n \"files\": [\n \"dist\",\n \"bin\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"keywords\": [\n \"database\",\n \"driver\",\n \"api-gateway\",\n \"sdk\",\n \"react\",\n \"hooks\",\n \"http\",\n \"postgres\",\n \"query-builder\"\n ],\n \"license\": \"MIT\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"name\": \"@xylex-group/athena\",\n \"peerDependencies\": {\n \"@react-email/components\": \">=1.0.0\",\n \"@react-email/render\": \">=2.0.0\",\n \"react\": \">=17.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"@react-email/components\": {\n \"optional\": true\n },\n \"@react-email/render\": {\n \"optional\": true\n },\n \"react\": {\n \"optional\": true\n }\n },\n \"publisher\": \"XYLEX Group\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/xylex-group/athena-js.git\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"check:all\": \"pnpm lint && pnpm typecheck && pnpm test && pnpm build\",\n \"dev\": \"tsup --watch\",\n \"docs:methods\": \"node scripts/generate-sdk-method-reference.mjs\",\n \"docs:site:check\": \"pnpm --dir ../../apps/docs docs:sync-athena-js:check\",\n \"docs:site:sync\": \"pnpm --dir ../../apps/docs docs:sync-athena-js\",\n \"example:api-call\": \"cd examples/api-call && bun run start\",\n \"example:email-resend\": \"cd examples/email-resend && bun run start\",\n \"example:express-api\": \"cd examples/express-api && bun run start\",\n \"example:order-saga\": \"cd examples/order-saga && bun run start\",\n \"example:postgres-connection\": \"cd examples/postgres-connection && bun run start\",\n \"example:recurring-invoice\": \"cd examples/recurring-invoice && bun run start\",\n \"example:retry-patterns\": \"cd examples/retry-patterns && bun run start\",\n \"lint\": \"eslint \\\"src/**/*.ts\\\" \\\"test/**/*.ts\\\"\",\n \"lint:fix\": \"pnpm lint -- --fix\",\n \"prepublishOnly\": \"pnpm typecheck && pnpm build\",\n \"publish:token\": \"node scripts/publish.js\",\n \"test\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/*.test.ts\",\n \"test:integration:postgres\": \"node scripts/run-postgres-introspection-test.mjs\",\n \"test:watch\": \"node --import ./test/register-server-only.mjs --import tsx --test --watch test/*.test.ts\",\n \"typecheck\": \"tsc -p tsconfig.typecheck.json\"\n },\n \"sideEffects\": false,\n \"type\": \"module\",\n \"types\": \"./dist/index.d.ts\",\n \"typesVersions\": {\n \"*\": {\n \"*\": [\n \"dist/index.d.ts\"\n ],\n \"admin\": [\n \"dist/admin.d.ts\"\n ],\n \"billing\": [\n \"dist/billing.d.ts\"\n ],\n \"browser\": [\n \"dist/browser.d.ts\"\n ],\n \"cookies\": [\n \"dist/cookies.d.ts\"\n ],\n \"next/client\": [\n \"dist/next/client.d.ts\"\n ],\n \"next/server\": [\n \"dist/next/server.d.ts\"\n ],\n \"organization\": [\n \"dist/organization.d.ts\"\n ],\n \"react\": [\n \"dist/react.d.ts\"\n ],\n \"social-providers\": [\n \"dist/social-providers.d.ts\"\n ],\n \"utils\": [\n \"dist/utils.d.ts\"\n ]\n }\n },\n \"version\": \"3.0.2\"\n}","import packageJson from '../package.json' with { type: 'json' }\n\nexport const PACKAGE_VERSION = packageJson.version\n\nexport function buildSdkHeaderValue(sdkName: string): string {\n return `${sdkName} ${PACKAGE_VERSION}`\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, 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","import { getSessionCookie } from '../cookies/index.ts'\nimport type { BackendOption } from '../gateway/types.ts'\n\nexport type AthenaRequestHeaderProfile = 'gateway' | 'auth' | 'chat' | 'storage' | 'minimal'\n\nconst NO_CACHE_HEADER_VALUE = 'no-cache'\n\nconst API_KEY_HEADER_CANDIDATES = ['X-Athena-Key', 'x-athena-key', 'X-Api-Key', 'x-api-key', 'apikey'] as const\nconst ATHENA_KEY_HEADER_CANDIDATES = ['X-Athena-Key', 'x-athena-key'] as const\nconst SESSION_TOKEN_HEADER_CANDIDATES = ['X-Athena-Auth-Session-Token'] as const\nconst BEARER_MIRROR_HEADER_CANDIDATES = ['X-Athena-Auth-Bearer-Token'] as const\nconst CLIENT_HEADER_CANDIDATES = ['X-Athena-Client', 'x-athena-client'] as const\nconst PG_URI_HEADER_CANDIDATES = ['x-pg-uri'] as const\nconst JDBC_URI_HEADER_CANDIDATES = ['x-athena-jdbc-url', 'x-jdbc-url'] as const\n\ninterface AthenaRequestHeaderProfileRules {\n apiKeys: boolean\n routing: boolean\n authMirror: boolean\n authBearer: boolean\n contentType?: boolean\n accept?: boolean\n stripNullsDefault?: boolean\n}\n\nconst PROFILE_RULES: Record<AthenaRequestHeaderProfile, AthenaRequestHeaderProfileRules> = {\n gateway: { apiKeys: true, routing: true, authMirror: true, authBearer: false, contentType: true, stripNullsDefault: true },\n chat: { apiKeys: true, routing: true, authMirror: true, authBearer: true, accept: true },\n storage: { apiKeys: true, routing: true, authMirror: true, authBearer: false, contentType: true },\n auth: { apiKeys: true, routing: true, authMirror: false, authBearer: true, contentType: true },\n minimal: { apiKeys: false, routing: false, authMirror: false, authBearer: false },\n}\n\nexport interface BuildAthenaRequestHeadersInput {\n profile: AthenaRequestHeaderProfile\n sdkHeaderValue: string\n apiKey?: string | null\n client?: string | null\n userId?: string | null\n organizationId?: string | null\n backend?: BackendOption\n publishEvent?: string | null\n stripNulls?: boolean\n bearerToken?: string | null\n cookie?: string | null\n sessionToken?: string | null\n pgUri?: string | null\n jdbcUrl?: string | null\n forceNoCache?: boolean\n configHeaders?: Record<string, string>\n callHeaders?: Record<string, string>\n contentType?: string | null\n accept?: string | null\n}\n\n/** Shared config/call fields consumed by gateway, chat, auth, and `client.request(...)`. */\nexport interface AthenaRequestHeaderOverrideFields {\n apiKey?: string | null\n client?: string | null\n userId?: string | null\n organizationId?: string | null\n backend?: BackendOption\n publishEvent?: string | null\n stripNulls?: boolean\n bearerToken?: string | null\n cookie?: string | null\n sessionToken?: string | null\n pgUri?: string | null\n jdbcUrl?: string | null\n forceNoCache?: boolean\n headers?: Record<string, string>\n}\n\nexport type ResolvedRequestHeaderOverrides = Omit<\n BuildAthenaRequestHeadersInput,\n 'profile' | 'sdkHeaderValue' | 'contentType' | 'accept'\n>\n\nfunction normalizeHeaderValue(value?: string | null): string | undefined {\n return value ? value : undefined\n}\n\nfunction mergeExtraHeaders(\n configHeaders?: Record<string, string>,\n callHeaders?: Record<string, string>,\n): Record<string, string> {\n return { ...(configHeaders ?? {}), ...(callHeaders ?? {}) }\n}\n\nexport function hasHeaderIgnoreCase(\n headers: Record<string, string>,\n targetKey: string,\n): boolean {\n const normalizedTargetKey = targetKey.toLowerCase()\n return Object.keys(headers).some(key => key.toLowerCase() === normalizedTargetKey)\n}\n\nexport function resolveHeaderValue(\n headers: Record<string, string>,\n candidates: readonly string[],\n): string | undefined {\n for (const candidate of candidates) {\n const direct = normalizeHeaderValue(headers[candidate])\n if (direct) return direct\n }\n\n const loweredCandidates = new Set(candidates.map(candidate => candidate.toLowerCase()))\n for (const [key, value] of Object.entries(headers)) {\n if (!loweredCandidates.has(key.toLowerCase())) {\n continue\n }\n const normalized = normalizeHeaderValue(value)\n if (normalized) return normalized\n }\n\n return undefined\n}\n\nfunction isCacheControlHeaderName(name: string): boolean {\n return name.toLowerCase() === 'cache-control'\n}\n\nfunction normalizeBearerToken(value: string): string {\n const trimmed = value.trim()\n const match = trimmed.match(/^Bearer\\s+(.+)$/i)\n return match?.[1]?.trim() ?? trimmed\n}\n\nfunction resolveBearerTokenFromAuthorizationHeader(\n headers: Record<string, string>,\n): string | undefined {\n const authorization = resolveHeaderValue(headers, ['Authorization'])\n if (!authorization) {\n return undefined\n }\n\n const token = normalizeBearerToken(authorization)\n return token ? token : undefined\n}\n\nfunction resolveSessionTokenFromCookieHeader(\n headers: Record<string, string>,\n): string | undefined {\n const cookie = resolveHeaderValue(headers, ['Cookie'])\n if (!cookie) {\n return undefined\n }\n\n return getSessionCookie(new Headers({ cookie })) ?? undefined\n}\n\nfunction resolveBackendType(backend?: BackendOption): string | undefined {\n if (!backend) {\n return undefined\n }\n return typeof backend === 'string' ? backend : backend.type\n}\n\nexport function resolveRequestHeaderOverrides(\n config: AthenaRequestHeaderOverrideFields,\n options?: AthenaRequestHeaderOverrideFields,\n defaults?: Pick<AthenaRequestHeaderOverrideFields, 'client' | 'stripNulls'>,\n): ResolvedRequestHeaderOverrides {\n return {\n apiKey: options?.apiKey ?? config.apiKey,\n client: options?.client ?? config.client ?? defaults?.client,\n userId: options?.userId ?? config.userId,\n organizationId: options?.organizationId ?? config.organizationId,\n backend: options?.backend ?? config.backend,\n publishEvent: options?.publishEvent ?? config.publishEvent,\n stripNulls: options?.stripNulls ?? config.stripNulls ?? defaults?.stripNulls,\n bearerToken: options?.bearerToken ?? config.bearerToken,\n cookie: options?.cookie ?? config.cookie,\n sessionToken: options?.sessionToken ?? config.sessionToken,\n pgUri: options?.pgUri ?? config.pgUri,\n jdbcUrl: options?.jdbcUrl ?? config.jdbcUrl,\n forceNoCache: Boolean(config.forceNoCache || options?.forceNoCache),\n configHeaders: config.headers,\n callHeaders: options?.headers,\n }\n}\n\nexport function buildServiceRequestHeaders(\n profile: Exclude<AthenaRequestHeaderProfile, 'minimal'>,\n sdkHeaderValue: string,\n config: AthenaRequestHeaderOverrideFields,\n options?: AthenaRequestHeaderOverrideFields,\n extras?: Pick<BuildAthenaRequestHeadersInput, 'contentType' | 'accept'> & {\n client?: string | null\n stripNulls?: boolean\n },\n): Record<string, string> {\n const rules = PROFILE_RULES[profile]\n return buildAthenaRequestHeaders({\n profile,\n sdkHeaderValue,\n ...resolveRequestHeaderOverrides(config, options, {\n client: extras?.client ?? undefined,\n stripNulls: extras?.stripNulls ?? (rules.stripNullsDefault ? true : undefined),\n }),\n contentType: extras?.contentType ?? (rules.contentType ? 'application/json' : undefined),\n accept: extras?.accept ?? (rules.accept ? 'application/json' : undefined),\n })\n}\n\nexport function applyAthenaApiKeyHeaders(\n headers: Record<string, string>,\n apiKey?: string | null,\n): void {\n const resolvedApiKey = normalizeHeaderValue(apiKey)\n if (resolvedApiKey && !hasHeaderIgnoreCase(headers, 'X-Athena-Key')) {\n headers['X-Athena-Key'] = resolvedApiKey\n }\n}\n\nexport function applyAthenaAuthContextHeaders(\n headers: Record<string, string>,\n input: Pick<\n BuildAthenaRequestHeadersInput,\n 'bearerToken' | 'cookie' | 'sessionToken' | 'profile' | 'configHeaders' | 'callHeaders'\n >,\n): void {\n const mergedExtraHeaders = mergeExtraHeaders(input.configHeaders, input.callHeaders)\n const rules = PROFILE_RULES[input.profile]\n const explicitCookie = normalizeHeaderValue(input.cookie)\n if (explicitCookie) {\n mergedExtraHeaders.Cookie = explicitCookie\n }\n\n const explicitSessionToken =\n normalizeHeaderValue(input.sessionToken) ??\n resolveHeaderValue(mergedExtraHeaders, SESSION_TOKEN_HEADER_CANDIDATES)\n const derivedSessionToken =\n explicitSessionToken ?? resolveSessionTokenFromCookieHeader(mergedExtraHeaders)\n const cookieFromHeaders = resolveHeaderValue(mergedExtraHeaders, ['Cookie'])\n\n if (explicitCookie && !hasHeaderIgnoreCase(headers, 'Cookie')) {\n headers.Cookie = explicitCookie\n } else if (cookieFromHeaders && !hasHeaderIgnoreCase(headers, 'Cookie')) {\n headers.Cookie = cookieFromHeaders\n }\n\n const explicitBearerToken = (() => {\n const configured = normalizeHeaderValue(input.bearerToken)\n if (configured) {\n return normalizeBearerToken(configured)\n }\n const mirrored = resolveHeaderValue(mergedExtraHeaders, BEARER_MIRROR_HEADER_CANDIDATES)\n return mirrored ? normalizeBearerToken(mirrored) : undefined\n })()\n const derivedBearerToken =\n explicitBearerToken ?? resolveBearerTokenFromAuthorizationHeader(mergedExtraHeaders)\n\n if (rules.authBearer && derivedBearerToken && !hasHeaderIgnoreCase(headers, 'Authorization')) {\n headers.Authorization = `Bearer ${derivedBearerToken}`\n }\n\n if (rules.authMirror) {\n if (derivedSessionToken && !hasHeaderIgnoreCase(headers, 'X-Athena-Auth-Session-Token')) {\n headers['X-Athena-Auth-Session-Token'] = derivedSessionToken\n }\n if (derivedBearerToken && !hasHeaderIgnoreCase(headers, 'X-Athena-Auth-Bearer-Token')) {\n headers['X-Athena-Auth-Bearer-Token'] = derivedBearerToken\n }\n } else if (derivedSessionToken && !hasHeaderIgnoreCase(headers, 'X-Athena-Auth-Session-Token')) {\n headers['X-Athena-Auth-Session-Token'] = derivedSessionToken\n }\n}\n\nexport function applyAthenaPgUriHeaders(\n headers: Record<string, string>,\n input: Pick<BuildAthenaRequestHeadersInput, 'pgUri' | 'jdbcUrl' | 'configHeaders' | 'callHeaders'>,\n): void {\n const mergedExtraHeaders = mergeExtraHeaders(input.configHeaders, input.callHeaders)\n\n const pgUri =\n normalizeHeaderValue(input.pgUri) ??\n resolveHeaderValue(mergedExtraHeaders, PG_URI_HEADER_CANDIDATES)\n if (pgUri && !hasHeaderIgnoreCase(headers, 'x-pg-uri')) {\n headers['x-pg-uri'] = pgUri\n }\n\n const jdbcUrl =\n normalizeHeaderValue(input.jdbcUrl) ??\n resolveHeaderValue(mergedExtraHeaders, JDBC_URI_HEADER_CANDIDATES)\n if (jdbcUrl) {\n if (!hasHeaderIgnoreCase(headers, 'x-athena-jdbc-url')) {\n headers['x-athena-jdbc-url'] = jdbcUrl\n }\n if (!hasHeaderIgnoreCase(headers, 'x-jdbc-url')) {\n headers['x-jdbc-url'] = jdbcUrl\n }\n }\n}\n\n/**\n * Minimal gateway/data request headers used by many apps before they adopt\n * the full {@link buildAthenaRequestHeaders} profile model.\n *\n * Additive convenience — does not replace client-built headers. Prefer\n * `createClient({ client, key })` so the SDK sets these on every call.\n */\nexport function buildAthenaGatewayHeaders(input: {\n clientName?: string | null\n gatewayKey?: string | null\n headers?: Record<string, string | null | undefined>\n}): Record<string, string> {\n const trimmedClientName = input.clientName?.trim()\n const trimmedGatewayKey = input.gatewayKey?.trim()\n const merged: Record<string, string | null | undefined> = {\n ...(trimmedClientName\n ? {\n 'X-Athena-Client': trimmedClientName,\n }\n : {}),\n ...(trimmedGatewayKey\n ? {\n 'X-Api-Key': trimmedGatewayKey,\n 'X-Athena-Key': trimmedGatewayKey,\n }\n : {}),\n ...input.headers,\n }\n\n return Object.fromEntries(\n Object.entries(merged).flatMap(([key, value]) =>\n typeof value === 'string' && value.trim()\n ? ([[key, value.trim()]] as const)\n : [],\n ),\n )\n}\n\nexport function buildAthenaRequestHeaders(\n input: BuildAthenaRequestHeadersInput,\n): Record<string, string> {\n const forceNoCache = Boolean(input.forceNoCache)\n const mergedExtraHeaders = mergeExtraHeaders(input.configHeaders, input.callHeaders)\n const rules = PROFILE_RULES[input.profile]\n\n const headerClient = resolveHeaderValue(mergedExtraHeaders, CLIENT_HEADER_CANDIDATES)\n const finalClient = normalizeHeaderValue(input.client) ?? headerClient\n const finalApiKey =\n normalizeHeaderValue(input.apiKey) ??\n resolveHeaderValue(mergedExtraHeaders, API_KEY_HEADER_CANDIDATES)\n const finalAthenaKey =\n resolveHeaderValue(mergedExtraHeaders, ATHENA_KEY_HEADER_CANDIDATES) ?? finalApiKey\n\n const headers: Record<string, string> = {\n 'X-Athena-Sdk': input.sdkHeaderValue,\n }\n\n if (rules.contentType) {\n headers['Content-Type'] = input.contentType ?? 'application/json'\n }\n\n if (input.accept ?? rules.accept) {\n headers.Accept = input.accept ?? 'application/json'\n }\n\n if (rules.routing) {\n if (normalizeHeaderValue(input.userId)) {\n headers['X-User-Id'] = input.userId ?? ''\n }\n if (normalizeHeaderValue(input.organizationId)) {\n headers['X-Organization-Id'] = input.organizationId ?? ''\n }\n if (finalClient) {\n headers['X-Athena-Client'] = finalClient\n }\n\n const backendType = resolveBackendType(input.backend)\n if (backendType) {\n headers['X-Backend-Type'] = backendType\n }\n\n if (typeof input.stripNulls === 'boolean') {\n headers['X-Strip-Nulls'] = input.stripNulls ? 'true' : 'false'\n } else if (rules.stripNullsDefault) {\n headers['X-Strip-Nulls'] = 'true'\n }\n\n if (normalizeHeaderValue(input.publishEvent)) {\n headers['X-Publish-Event'] = input.publishEvent ?? ''\n }\n }\n\n if (rules.apiKeys && (finalApiKey || finalAthenaKey)) {\n applyAthenaApiKeyHeaders(headers, finalAthenaKey)\n }\n\n applyAthenaAuthContextHeaders(headers, input)\n applyAthenaPgUriHeaders(headers, input)\n\n const reservedClientHeaderKeys = new Set(CLIENT_HEADER_CANDIDATES.map(key => key.toLowerCase()))\n Object.entries(mergedExtraHeaders).forEach(([key, value]) => {\n if (reservedClientHeaderKeys.has(key.toLowerCase())) {\n return\n }\n if (forceNoCache && isCacheControlHeaderName(key)) {\n return\n }\n const normalized = normalizeHeaderValue(value)\n if (normalized) {\n headers[key] = normalized\n }\n })\n\n if (forceNoCache) {\n headers['Cache-Control'] = NO_CACHE_HEADER_VALUE\n }\n\n return headers\n}\n","import type {\n AthenaGatewayEndpointPath,\n AthenaGatewayErrorCode,\n AthenaGatewayErrorDetails,\n AthenaGatewayMethod,\n AthenaGatewayResponse,\n} from './types.js'\n\nexport interface AthenaGatewayErrorInput {\n code: AthenaGatewayErrorCode\n message: string\n status?: number\n endpoint?: AthenaGatewayEndpointPath\n method?: AthenaGatewayMethod\n requestId?: string\n hint?: string\n cause?: string\n}\n\n/**\n * Canonical error for gateway failures.\n * Holds request context and machine-readable classification.\n */\nexport class AthenaGatewayError extends Error {\n readonly code: AthenaGatewayErrorCode\n readonly status: number\n readonly endpoint?: AthenaGatewayEndpointPath\n readonly method?: AthenaGatewayMethod\n readonly requestId?: string\n readonly hint?: string\n readonly causeDetail?: string\n\n constructor(input: AthenaGatewayErrorInput) {\n super(input.message)\n this.name = 'AthenaGatewayError'\n this.code = input.code\n this.status = input.status ?? 0\n this.endpoint = input.endpoint\n this.method = input.method\n this.requestId = input.requestId\n this.hint = input.hint\n this.causeDetail = input.cause\n }\n\n toDetails(): AthenaGatewayErrorDetails {\n return {\n code: this.code,\n message: this.message,\n status: this.status,\n endpoint: this.endpoint,\n method: this.method,\n requestId: this.requestId,\n hint: this.hint,\n cause: this.causeDetail,\n }\n }\n\n static fromResponse<T>(\n response: AthenaGatewayResponse<T>,\n fallback: Omit<AthenaGatewayErrorInput, 'code' | 'message' | 'status'>,\n ) {\n const details = response.errorDetails\n if (details) {\n return new AthenaGatewayError({\n code: details.code,\n message: details.message,\n status: details.status,\n endpoint: details.endpoint ?? fallback.endpoint,\n method: details.method ?? fallback.method,\n requestId: details.requestId ?? fallback.requestId,\n hint: details.hint,\n cause: details.cause,\n })\n }\n\n return new AthenaGatewayError({\n code: 'HTTP_ERROR',\n message: response.error ?? 'Gateway request failed',\n status: response.status,\n endpoint: fallback.endpoint,\n method: fallback.method,\n requestId: fallback.requestId,\n })\n }\n}\n\nexport function isAthenaGatewayError(error: unknown): error is AthenaGatewayError {\n return error instanceof AthenaGatewayError\n}\n","import { AthenaGatewayError } from './errors.ts'\n\nexport const ATHENA_DEFAULT_BASE_URL = 'https://mirror2.athena-cluster.com'\n\nfunction describeReceivedValue(value: unknown): string {\n if (value === undefined) return 'undefined'\n if (value === null) return 'null'\n if (typeof value === 'string') {\n return value.trim().length > 0 ? JSON.stringify(value) : 'an empty string'\n }\n return `${typeof value} ${JSON.stringify(value)}`\n}\n\nfunction invalidBaseUrlError(message: string, hint: string): AthenaGatewayError {\n return new AthenaGatewayError({\n code: 'INVALID_URL',\n message,\n status: 0,\n hint,\n })\n}\n\nexport interface NormalizeAthenaGatewayBaseUrlOptions {\n defaultBaseUrl?: string\n label?: string\n}\n\nexport function normalizeAthenaGatewayBaseUrl(\n input: string | null | undefined,\n options: NormalizeAthenaGatewayBaseUrlOptions = {},\n): string {\n const label = options.label ?? 'Athena gateway base URL'\n const candidate = input ?? options.defaultBaseUrl\n\n if (candidate === undefined || candidate === null) {\n throw invalidBaseUrlError(\n `${label} must be a non-empty absolute http(s) URL. Received ${describeReceivedValue(input)}.`,\n 'Set ATHENA_URL in the explicit env object (or pass createClient({ url, key })) to a full URL such as \"https://mirror2.athena-cluster.com\".',\n )\n }\n\n const trimmed = candidate.trim()\n if (!trimmed) {\n throw invalidBaseUrlError(\n `${label} must be a non-empty absolute http(s) URL. Received ${describeReceivedValue(candidate)}.`,\n 'Set ATHENA_URL in the explicit env object (or pass createClient({ url, key })) to a full URL such as \"https://mirror2.athena-cluster.com\".',\n )\n }\n\n let parsed: URL\n try {\n parsed = new URL(trimmed)\n } catch {\n throw invalidBaseUrlError(\n `${label} must be a valid absolute http(s) URL. Received ${describeReceivedValue(candidate)}.`,\n 'Use a full URL including the protocol, for example \"https://mirror2.athena-cluster.com\".',\n )\n }\n\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw invalidBaseUrlError(\n `${label} must use http or https. Received ${JSON.stringify(trimmed)}.`,\n 'Use an Athena gateway URL such as \"https://mirror2.athena-cluster.com\".',\n )\n }\n\n if (parsed.search || parsed.hash) {\n throw invalidBaseUrlError(\n `${label} must not include query parameters or hash fragments. Received ${JSON.stringify(trimmed)}.`,\n 'Pass only the base URL. Endpoint paths such as \"/gateway/fetch\" are appended by the SDK.',\n )\n }\n\n return parsed.toString().replace(/\\/+$/, '')\n}\n\nexport function buildAthenaGatewayUrl(baseUrl: string, path: string): string {\n if (!path.startsWith('/')) {\n throw invalidBaseUrlError(\n `Athena gateway path must start with \"/\". Received ${JSON.stringify(path)}.`,\n 'Use a leading slash such as \"/gateway/fetch\" or \"/\".',\n )\n }\n\n return `${baseUrl}${path}`\n}\n","/**\n * Athena billing HTTP client for live `/billing/v1/*`, `/admin/billing/*`,\n * provider webhook, and `/debug/billing` routes.\n *\n * Methods map 1:1 onto the registered Actix handlers. Auth uses the static\n * Athena admin key (`X-Athena-Key` / configured API key) matching the server\n * `authorize_static_admin_key` gate.\n *\n * Contract spine: `billingSdkManifest` METHOD+path entries must match the\n * permanent Rust inventory `athena_billing::LIVE_HTTP_ROUTES`\n * (exported as `./live-http-routes.json`). Export with\n * `cargo run -p athena-billing --bin billing-contract-spine -- --write`.\n */\n\nimport { buildSdkHeaderValue } from '../sdk-version.ts'\nimport {\n buildAthenaRequestHeaders,\n hasHeaderIgnoreCase,\n} from '../utils/athena-request-headers.ts'\nimport { normalizeAthenaGatewayBaseUrl } from '../gateway/url.ts'\n\nconst SDK_NAME = 'xylex-group/athena-billing'\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME)\n\nexport type AthenaBillingHttpMethod = 'GET' | 'POST' | 'PATCH' | 'DELETE'\n\nexport type AthenaBillingJson =\n | null\n | boolean\n | number\n | string\n | AthenaBillingJson[]\n | { [key: string]: AthenaBillingJson }\n\nexport interface AthenaBillingCallOptions {\n headers?: Record<string, string>\n signal?: AbortSignal\n apiKey?: string | null\n}\n\nexport interface AthenaBillingClientConfig {\n baseUrl: string\n apiKey: string\n client?: string | null\n headers?: Record<string, string>\n fetchImpl?: typeof fetch\n}\n\nexport interface AthenaBillingEnvelope<T = unknown> {\n status?: string\n message?: string\n data: T\n}\n\nexport class AthenaBillingError extends Error {\n status: number\n endpoint: string\n method: string\n body: unknown\n\n constructor(input: {\n message: string\n status: number\n endpoint: string\n method: string\n body: unknown\n }) {\n super(input.message)\n this.name = 'AthenaBillingError'\n this.status = input.status\n this.endpoint = input.endpoint\n this.method = input.method\n this.body = input.body\n }\n}\n\nexport interface BillingConnectionRefInput {\n connectionId: string\n clientName?: string\n}\n\nexport interface BillingListQuery extends BillingConnectionRefInput {\n cursor?: string\n source?: 'provider' | 'persistence' | string\n limit?: number\n offset?: number\n}\n\nexport interface BillingEnsureCustomerInput extends BillingConnectionRefInput {\n email?: string | null\n name?: string | null\n metadata?: Record<string, AthenaBillingJson>\n idempotencyKey: string\n}\n\nexport interface BillingUpdateCustomerInput extends BillingConnectionRefInput {\n email?: string | null\n name?: string | null\n}\n\nexport interface BillingCreateConnectionInput {\n ownerKind: string\n ownerId: string\n provider: string\n mode?: string\n status?: string\n credentialKind?: string\n providerAccountId: string\n providerProfileId?: string | null\n scopes?: string[]\n config?: Record<string, AthenaBillingJson>\n metadata?: Record<string, AthenaBillingJson>\n}\n\nexport interface BillingUpdateConnectionInput {\n status?: string\n mode?: string\n credentialKind?: string\n providerAccountId?: string\n providerProfileId?: string | null\n scopes?: string[]\n config?: Record<string, AthenaBillingJson>\n metadata?: Record<string, AthenaBillingJson>\n}\n\nexport interface BillingReconcileInput {\n resourceKind: string\n resourceId: string\n customerId?: string | null\n}\n\nexport interface BillingProvisionSinksInput {\n targetSchema?: string\n instance?: string\n}\n\nexport const billingSdkManifest = {\n namespace: 'billing',\n envelopeKind: 'athena',\n methods: [\n { name: 'getCapabilities', method: 'GET', path: '/billing/v1/capabilities' },\n { name: 'createCheckout', method: 'POST', path: '/billing/v1/checkouts' },\n { name: 'listProducts', method: 'GET', path: '/billing/v1/products' },\n { name: 'listPrices', method: 'GET', path: '/billing/v1/prices' },\n { name: 'listCustomers', method: 'GET', path: '/billing/v1/customers' },\n { name: 'createCustomer', method: 'POST', path: '/billing/v1/customers' },\n { name: 'getCustomer', method: 'GET', path: '/billing/v1/customers/{id}' },\n { name: 'updateCustomer', method: 'PATCH', path: '/billing/v1/customers/{id}' },\n { name: 'deleteCustomer', method: 'DELETE', path: '/billing/v1/customers/{id}' },\n { name: 'listPayments', method: 'GET', path: '/billing/v1/payments' },\n { name: 'createPayment', method: 'POST', path: '/billing/v1/payments' },\n { name: 'getPayment', method: 'GET', path: '/billing/v1/payments/{id}' },\n { name: 'cancelPayment', method: 'POST', path: '/billing/v1/payments/{id}/cancel' },\n { name: 'listPaymentLinks', method: 'GET', path: '/billing/v1/payment-links' },\n { name: 'createPaymentLink', method: 'POST', path: '/billing/v1/payment-links' },\n { name: 'getPaymentLink', method: 'GET', path: '/billing/v1/payment-links/{id}' },\n { name: 'updatePaymentLink', method: 'PATCH', path: '/billing/v1/payment-links/{id}' },\n { name: 'deletePaymentLink', method: 'DELETE', path: '/billing/v1/payment-links/{id}' },\n { name: 'listRefunds', method: 'GET', path: '/billing/v1/refunds' },\n { name: 'createRefund', method: 'POST', path: '/billing/v1/refunds' },\n { name: 'getRefund', method: 'GET', path: '/billing/v1/refunds/{id}' },\n { name: 'cancelRefund', method: 'POST', path: '/billing/v1/refunds/{id}/cancel' },\n { name: 'listSubscriptions', method: 'GET', path: '/billing/v1/subscriptions' },\n { name: 'createSubscription', method: 'POST', path: '/billing/v1/subscriptions' },\n { name: 'getSubscription', method: 'GET', path: '/billing/v1/subscriptions/{id}' },\n { name: 'updateSubscription', method: 'PATCH', path: '/billing/v1/subscriptions/{id}' },\n { name: 'cancelSubscription', method: 'POST', path: '/billing/v1/subscriptions/{id}/cancel' },\n { name: 'listInvoices', method: 'GET', path: '/billing/v1/invoices' },\n { name: 'getInvoice', method: 'GET', path: '/billing/v1/invoices/{id}' },\n { name: 'listWebhooks', method: 'GET', path: '/billing/v1/webhooks' },\n { name: 'createWebhook', method: 'POST', path: '/billing/v1/webhooks' },\n { name: 'getWebhook', method: 'GET', path: '/billing/v1/webhooks/{id}' },\n { name: 'updateWebhook', method: 'PATCH', path: '/billing/v1/webhooks/{id}' },\n { name: 'deleteWebhook', method: 'DELETE', path: '/billing/v1/webhooks/{id}' },\n { name: 'testWebhook', method: 'POST', path: '/billing/v1/webhooks/{id}/test' },\n {\n name: 'listConnections',\n method: 'GET',\n path: '/admin/billing/clients/{client_name}/connections',\n },\n {\n name: 'createConnection',\n method: 'POST',\n path: '/admin/billing/clients/{client_name}/connections',\n },\n {\n name: 'getConnection',\n method: 'GET',\n path: '/admin/billing/clients/{client_name}/connections/{connection_id}',\n },\n {\n name: 'updateConnection',\n method: 'PATCH',\n path: '/admin/billing/clients/{client_name}/connections/{connection_id}',\n },\n {\n name: 'deleteConnection',\n method: 'DELETE',\n path: '/admin/billing/clients/{client_name}/connections/{connection_id}',\n },\n {\n name: 'reconcileDocument',\n method: 'POST',\n path: '/admin/billing/clients/{client_name}/connections/{connection_id}/reconcile',\n },\n {\n name: 'listWebhookEvents',\n method: 'GET',\n path: '/admin/billing/clients/{client_name}/webhook-events',\n },\n {\n name: 'provisionWebhookSinks',\n method: 'POST',\n path: '/admin/billing/clients/{client_name}/webhook-sinks/provision',\n },\n { name: 'listGrants', method: 'GET', path: '/admin/billing/grants' },\n { name: 'listProviders', method: 'GET', path: '/admin/billing/providers' },\n {\n name: 'listSinkHelpers',\n method: 'GET',\n path: '/admin/webhook-sinks/helpers/billing',\n },\n {\n name: 'ingestProviderWebhook',\n method: 'POST',\n path: '/billing/providers/{provider}/clients/{client_name}/connections/{connection_id}/webhook',\n },\n { name: 'getDebugBilling', method: 'GET', path: '/debug/billing' },\n ],\n} as const\n\nfunction withPathParam(path: string, name: string, value: string): string {\n return path.replace(`{${name}}`, encodeURIComponent(value))\n}\n\nfunction appendQuery(\n path: string,\n query?: Record<string, string | number | boolean | null | undefined>,\n): string {\n if (!query) return path\n const params = new URLSearchParams()\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) continue\n params.set(key, String(value))\n }\n const serialized = params.toString()\n return serialized ? `${path}?${serialized}` : path\n}\n\nfunction connectionQuery(input: BillingListQuery | BillingConnectionRefInput): Record<string, string> {\n const query: Record<string, string> = {\n connectionId: input.connectionId,\n }\n if (input.clientName) query.clientName = input.clientName\n if ('cursor' in input && input.cursor) query.cursor = input.cursor\n if ('source' in input && input.source) query.source = input.source\n if ('limit' in input && input.limit !== undefined) query.limit = String(input.limit)\n if ('offset' in input && input.offset !== undefined) query.offset = String(input.offset)\n return query\n}\n\nfunction parseEnvelopeData<T>(body: unknown): T {\n if (body && typeof body === 'object' && 'data' in body) {\n return (body as AthenaBillingEnvelope<T>).data\n }\n return body as T\n}\n\nexport interface AthenaBillingModule {\n getCapabilities(input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n createCheckout(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n listProducts(input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n listPrices(\n input: BillingConnectionRefInput & { productId?: string },\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n listCustomers(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n createCustomer(input: BillingEnsureCustomerInput, options?: AthenaBillingCallOptions): Promise<unknown>\n getCustomer(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n updateCustomer(\n id: string,\n input: BillingUpdateCustomerInput,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n deleteCustomer(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n listPayments(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n createPayment(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n getPayment(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n cancelPayment(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n listPaymentLinks(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n createPaymentLink(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n getPaymentLink(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n updatePaymentLink(\n id: string,\n body: Record<string, unknown>,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n deletePaymentLink(\n id: string,\n input: BillingConnectionRefInput,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n listRefunds(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n createRefund(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n getRefund(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n cancelRefund(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n listSubscriptions(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n createSubscription(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n getSubscription(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n updateSubscription(\n id: string,\n body: Record<string, unknown>,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n cancelSubscription(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n listInvoices(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n getInvoice(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n listWebhooks(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n createWebhook(\n input: BillingConnectionRefInput,\n body: Record<string, unknown>,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n getWebhook(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n updateWebhook(\n id: string,\n input: BillingConnectionRefInput,\n body: Record<string, unknown>,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n deleteWebhook(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n testWebhook(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n listConnections(clientName: string, options?: AthenaBillingCallOptions): Promise<unknown>\n createConnection(\n clientName: string,\n input: BillingCreateConnectionInput,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n getConnection(\n clientName: string,\n connectionId: string,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n updateConnection(\n clientName: string,\n connectionId: string,\n input: BillingUpdateConnectionInput,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n deleteConnection(\n clientName: string,\n connectionId: string,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n reconcileDocument(\n clientName: string,\n connectionId: string,\n input: BillingReconcileInput,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n listWebhookEvents(clientName: string, options?: AthenaBillingCallOptions): Promise<unknown>\n provisionWebhookSinks(\n clientName: string,\n input?: BillingProvisionSinksInput,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n listGrants(options?: AthenaBillingCallOptions): Promise<unknown>\n listProviders(options?: AthenaBillingCallOptions): Promise<unknown>\n listSinkHelpers(\n query?: { targetSchema?: string; instance?: string },\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n ingestProviderWebhook(\n input: {\n provider: string\n clientName: string\n connectionId: string\n body: BodyInit | Record<string, unknown> | string\n signatureHeaders?: Record<string, string>\n },\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n getDebugBilling(jwtSecret: string, options?: AthenaBillingCallOptions): Promise<string>\n}\n\nexport function createBillingModule(config: AthenaBillingClientConfig): AthenaBillingModule {\n const baseUrl = normalizeAthenaGatewayBaseUrl(config.baseUrl, {\n label: 'Athena billing base URL',\n })\n const fetchImpl = config.fetchImpl ?? globalThis.fetch.bind(globalThis)\n\n async function call<T>(\n method: AthenaBillingHttpMethod,\n path: string,\n body?: unknown,\n options?: AthenaBillingCallOptions,\n responseType: 'json' | 'text' = 'json',\n ): Promise<T> {\n const headers = buildAthenaRequestHeaders({\n profile: 'gateway',\n sdkHeaderValue: SDK_HEADER_VALUE,\n apiKey: options?.apiKey ?? config.apiKey,\n client: config.client,\n configHeaders: {\n ...(config.headers ?? {}),\n },\n callHeaders: options?.headers,\n contentType: 'application/json',\n })\n\n let requestBody: BodyInit | undefined\n if (body !== undefined && body !== null) {\n if (\n typeof body === 'string' ||\n body instanceof Blob ||\n body instanceof ArrayBuffer ||\n ArrayBuffer.isView(body) ||\n body instanceof FormData ||\n body instanceof URLSearchParams\n ) {\n requestBody = body as BodyInit\n } else {\n requestBody = JSON.stringify(body)\n if (!hasHeaderIgnoreCase(headers, 'Content-Type')) {\n headers['Content-Type'] = 'application/json'\n }\n }\n }\n\n const targetUrl = `${baseUrl}${path.startsWith('/') ? path : `/${path}`}`\n const response = await fetchImpl(targetUrl, {\n method,\n headers,\n body: requestBody,\n signal: options?.signal,\n })\n\n if (responseType === 'text') {\n const text = await response.text()\n if (!response.ok) {\n throw new AthenaBillingError({\n message: `Billing request failed (${response.status})`,\n status: response.status,\n endpoint: path,\n method,\n body: text,\n })\n }\n return text as T\n }\n\n const rawText = await response.text()\n let parsed: unknown = rawText\n if (rawText) {\n try {\n parsed = JSON.parse(rawText)\n } catch {\n parsed = rawText\n }\n } else {\n parsed = null\n }\n\n if (!response.ok) {\n const message =\n parsed &&\n typeof parsed === 'object' &&\n 'message' in parsed &&\n typeof (parsed as { message: unknown }).message === 'string'\n ? (parsed as { message: string }).message\n : `Billing request failed (${response.status})`\n throw new AthenaBillingError({\n message,\n status: response.status,\n endpoint: path,\n method,\n body: parsed,\n })\n }\n\n return parseEnvelopeData<T>(parsed)\n }\n\n return {\n getCapabilities(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/capabilities', connectionQuery(input)),\n undefined,\n options,\n )\n },\n createCheckout(body, options) {\n return call('POST', '/billing/v1/checkouts', body, options)\n },\n listProducts(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/products', connectionQuery(input)),\n undefined,\n options,\n )\n },\n listPrices(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/prices', {\n ...connectionQuery(input),\n ...(input.productId ? { productId: input.productId } : {}),\n }),\n undefined,\n options,\n )\n },\n listCustomers(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/customers', connectionQuery(input)),\n undefined,\n options,\n )\n },\n createCustomer(input, options) {\n return call(\n 'POST',\n '/billing/v1/customers',\n {\n connectionId: input.connectionId,\n clientName: input.clientName,\n email: input.email,\n name: input.name,\n metadata: input.metadata ?? {},\n idempotencyKey: input.idempotencyKey,\n },\n options,\n )\n },\n getCustomer(id, input, options) {\n return call(\n 'GET',\n appendQuery(\n withPathParam('/billing/v1/customers/{id}', 'id', id),\n connectionQuery(input),\n ),\n undefined,\n options,\n )\n },\n updateCustomer(id, input, options) {\n return call(\n 'PATCH',\n withPathParam('/billing/v1/customers/{id}', 'id', id),\n {\n connectionId: input.connectionId,\n clientName: input.clientName,\n email: input.email,\n name: input.name,\n },\n options,\n )\n },\n deleteCustomer(id, input, options) {\n return call(\n 'DELETE',\n appendQuery(\n withPathParam('/billing/v1/customers/{id}', 'id', id),\n connectionQuery(input),\n ),\n undefined,\n options,\n )\n },\n listPayments(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/payments', connectionQuery(input)),\n undefined,\n options,\n )\n },\n createPayment(body, options) {\n return call('POST', '/billing/v1/payments', body, options)\n },\n getPayment(id, input, options) {\n return call(\n 'GET',\n appendQuery(\n withPathParam('/billing/v1/payments/{id}', 'id', id),\n connectionQuery(input),\n ),\n undefined,\n options,\n )\n },\n cancelPayment(id, input, options) {\n return call(\n 'POST',\n appendQuery(\n withPathParam('/billing/v1/payments/{id}/cancel', 'id', id),\n connectionQuery(input),\n ),\n {},\n options,\n )\n },\n listPaymentLinks(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/payment-links', connectionQuery(input)),\n undefined,\n options,\n )\n },\n createPaymentLink(body, options) {\n return call('POST', '/billing/v1/payment-links', body, options)\n },\n getPaymentLink(id, input, options) {\n return call(\n 'GET',\n appendQuery(\n withPathParam('/billing/v1/payment-links/{id}', 'id', id),\n connectionQuery(input),\n ),\n undefined,\n options,\n )\n },\n updatePaymentLink(id, body, options) {\n return call(\n 'PATCH',\n withPathParam('/billing/v1/payment-links/{id}', 'id', id),\n body,\n options,\n )\n },\n deletePaymentLink(id, input, options) {\n return call(\n 'DELETE',\n appendQuery(\n withPathParam('/billing/v1/payment-links/{id}', 'id', id),\n connectionQuery(input),\n ),\n undefined,\n options,\n )\n },\n listRefunds(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/refunds', connectionQuery(input)),\n undefined,\n options,\n )\n },\n createRefund(body, options) {\n return call('POST', '/billing/v1/refunds', body, options)\n },\n getRefund(id, input, options) {\n return call(\n 'GET',\n appendQuery(withPathParam('/billing/v1/refunds/{id}', 'id', id), connectionQuery(input)),\n undefined,\n options,\n )\n },\n cancelRefund(id, input, options) {\n return call(\n 'POST',\n appendQuery(withPathParam('/billing/v1/refunds/{id}/cancel', 'id', id), connectionQuery(input)),\n {},\n options,\n )\n },\n listSubscriptions(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/subscriptions', connectionQuery(input)),\n undefined,\n options,\n )\n },\n createSubscription(body, options) {\n return call('POST', '/billing/v1/subscriptions', body, options)\n },\n getSubscription(id, input, options) {\n return call(\n 'GET',\n appendQuery(\n withPathParam('/billing/v1/subscriptions/{id}', 'id', id),\n connectionQuery(input),\n ),\n undefined,\n options,\n )\n },\n updateSubscription(id, body, options) {\n return call(\n 'PATCH',\n withPathParam('/billing/v1/subscriptions/{id}', 'id', id),\n body,\n options,\n )\n },\n cancelSubscription(id, input, options) {\n return call(\n 'POST',\n appendQuery(\n withPathParam('/billing/v1/subscriptions/{id}/cancel', 'id', id),\n connectionQuery(input),\n ),\n {},\n options,\n )\n },\n listInvoices(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/invoices', connectionQuery(input)),\n undefined,\n options,\n )\n },\n getInvoice(id, input, options) {\n return call(\n 'GET',\n appendQuery(\n withPathParam('/billing/v1/invoices/{id}', 'id', id),\n connectionQuery(input),\n ),\n undefined,\n options,\n )\n },\n listWebhooks(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/webhooks', connectionQuery(input)),\n undefined,\n options,\n )\n },\n createWebhook(input, body, options) {\n return call(\n 'POST',\n appendQuery('/billing/v1/webhooks', connectionQuery(input)),\n body,\n options,\n )\n },\n getWebhook(id, input, options) {\n return call(\n 'GET',\n appendQuery(withPathParam('/billing/v1/webhooks/{id}', 'id', id), connectionQuery(input)),\n undefined,\n options,\n )\n },\n updateWebhook(id, input, body, options) {\n return call(\n 'PATCH',\n appendQuery(withPathParam('/billing/v1/webhooks/{id}', 'id', id), connectionQuery(input)),\n body,\n options,\n )\n },\n deleteWebhook(id, input, options) {\n return call(\n 'DELETE',\n appendQuery(withPathParam('/billing/v1/webhooks/{id}', 'id', id), connectionQuery(input)),\n undefined,\n options,\n )\n },\n testWebhook(id, input, options) {\n return call(\n 'POST',\n appendQuery(\n withPathParam('/billing/v1/webhooks/{id}/test', 'id', id),\n connectionQuery(input),\n ),\n {},\n options,\n )\n },\n listConnections(clientName, options) {\n return call(\n 'GET',\n withPathParam('/admin/billing/clients/{client_name}/connections', 'client_name', clientName),\n undefined,\n options,\n )\n },\n createConnection(clientName, input, options) {\n return call(\n 'POST',\n withPathParam('/admin/billing/clients/{client_name}/connections', 'client_name', clientName),\n {\n ownerKind: input.ownerKind,\n ownerId: input.ownerId,\n provider: input.provider,\n mode: input.mode,\n status: input.status,\n credentialKind: input.credentialKind,\n providerAccountId: input.providerAccountId,\n providerProfileId: input.providerProfileId,\n scopes: input.scopes,\n config: input.config,\n metadata: input.metadata,\n },\n options,\n )\n },\n getConnection(clientName, connectionId, options) {\n return call(\n 'GET',\n withPathParam(\n withPathParam(\n '/admin/billing/clients/{client_name}/connections/{connection_id}',\n 'client_name',\n clientName,\n ),\n 'connection_id',\n connectionId,\n ),\n undefined,\n options,\n )\n },\n updateConnection(clientName, connectionId, input, options) {\n return call(\n 'PATCH',\n withPathParam(\n withPathParam(\n '/admin/billing/clients/{client_name}/connections/{connection_id}',\n 'client_name',\n clientName,\n ),\n 'connection_id',\n connectionId,\n ),\n input,\n options,\n )\n },\n deleteConnection(clientName, connectionId, options) {\n return call(\n 'DELETE',\n withPathParam(\n withPathParam(\n '/admin/billing/clients/{client_name}/connections/{connection_id}',\n 'client_name',\n clientName,\n ),\n 'connection_id',\n connectionId,\n ),\n undefined,\n options,\n )\n },\n reconcileDocument(clientName, connectionId, input, options) {\n return call(\n 'POST',\n withPathParam(\n withPathParam(\n '/admin/billing/clients/{client_name}/connections/{connection_id}/reconcile',\n 'client_name',\n clientName,\n ),\n 'connection_id',\n connectionId,\n ),\n {\n resourceKind: input.resourceKind,\n resourceId: input.resourceId,\n customerId: input.customerId,\n },\n options,\n )\n },\n listWebhookEvents(clientName, options) {\n return call(\n 'GET',\n withPathParam(\n '/admin/billing/clients/{client_name}/webhook-events',\n 'client_name',\n clientName,\n ),\n undefined,\n options,\n )\n },\n provisionWebhookSinks(clientName, input, options) {\n return call(\n 'POST',\n appendQuery(\n withPathParam(\n '/admin/billing/clients/{client_name}/webhook-sinks/provision',\n 'client_name',\n clientName,\n ),\n {\n targetSchema: input?.targetSchema,\n instance: input?.instance,\n },\n ),\n {},\n options,\n )\n },\n listGrants(options) {\n return call('GET', '/admin/billing/grants', undefined, options)\n },\n listProviders(options) {\n return call('GET', '/admin/billing/providers', undefined, options)\n },\n listSinkHelpers(query, options) {\n return call(\n 'GET',\n appendQuery('/admin/webhook-sinks/helpers/billing', {\n targetSchema: query?.targetSchema,\n instance: query?.instance,\n }),\n undefined,\n options,\n )\n },\n ingestProviderWebhook(input, options) {\n const path = withPathParam(\n withPathParam(\n withPathParam(\n '/billing/providers/{provider}/clients/{client_name}/connections/{connection_id}/webhook',\n 'provider',\n input.provider,\n ),\n 'client_name',\n input.clientName,\n ),\n 'connection_id',\n input.connectionId,\n )\n return call('POST', path, input.body, {\n ...options,\n headers: {\n ...(options?.headers ?? {}),\n ...(input.signatureHeaders ?? {}),\n },\n })\n },\n getDebugBilling(jwtSecret, options) {\n return call(\n 'GET',\n appendQuery('/debug/billing', { jwt_secret: jwtSecret }),\n undefined,\n options,\n 'text',\n )\n },\n }\n}\n","{\n \"consumers\": [\n \"openapi.yaml\",\n \"openapi.json\",\n \"packages/athena-js billingSdkManifest\",\n \"tests/billing_contract_spine.rs\"\n ],\n \"description\": \"Live Athena billing HTTP surface. Owned by athena_billing::live_http_routes (Rust). Export with: cargo run -p athena-billing --bin billing-contract-spine -- --write\",\n \"domain\": \"billing\",\n \"routes\": [\n {\n \"method\": \"GET\",\n \"path\": \"/admin/billing/clients/{client_name}/connections\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/admin/billing/clients/{client_name}/connections\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"DELETE\",\n \"path\": \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"PATCH\",\n \"path\": \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/admin/billing/clients/{client_name}/connections/{connection_id}/reconcile\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/admin/billing/clients/{client_name}/webhook-events\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/admin/billing/clients/{client_name}/webhook-sinks/provision\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/admin/billing/grants\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/admin/billing/providers\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/admin/webhook-sinks/helpers/billing\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/providers/{provider}/clients/{client_name}/connections/{connection_id}/webhook\",\n \"surface\": \"providerWebhook\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/capabilities\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/checkouts\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/products\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/prices\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/customers\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/customers\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"DELETE\",\n \"path\": \"/billing/v1/customers/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/customers/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"PATCH\",\n \"path\": \"/billing/v1/customers/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/invoices\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/invoices/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/payment-links\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/payment-links\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"DELETE\",\n \"path\": \"/billing/v1/payment-links/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/payment-links/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"PATCH\",\n \"path\": \"/billing/v1/payment-links/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/payments\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/payments\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/payments/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/payments/{id}/cancel\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/refunds\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/refunds\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/refunds/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/refunds/{id}/cancel\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/subscriptions\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/subscriptions\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/subscriptions/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"PATCH\",\n \"path\": \"/billing/v1/subscriptions/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/subscriptions/{id}/cancel\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/webhooks\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/webhooks\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"DELETE\",\n \"path\": \"/billing/v1/webhooks/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/webhooks/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"PATCH\",\n \"path\": \"/billing/v1/webhooks/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/webhooks/{id}/test\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/debug/billing\",\n \"surface\": \"debug\"\n }\n ],\n \"schemaVersion\": 1,\n \"sourceOfTruth\": \"crates/athena-billing/src/live_http_routes.rs\",\n \"sources\": [\n \"src/api/billing.rs\",\n \"src/api/billing_v1/**\",\n \"src/api/debug/billing.rs\"\n ]\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/sdk-version.ts","../src/cookies/cookie-utils.ts","../src/cookies/index.ts","../src/utils/athena-request-headers.ts","../src/gateway/errors.ts","../src/gateway/url.ts","../src/billing/module.ts","../src/billing/live-http-routes.json"],"names":[],"mappings":"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","file":"billing.cjs","sourcesContent":["{\n \"author\": \"floris@xylex.group\",\n \"bin\": {\n \"athena-js\": \"bin/athena-js.js\"\n },\n \"dependencies\": {\n \"blessed\": \"^0.1.81\",\n \"chalk\": \"^4.1.2\",\n \"cron-parser\": \"^4.9.0\",\n \"jose\": \"^6.2.3\",\n \"pg\": \"^8.16.0\",\n \"server-only\": \"^0.0.1\",\n \"use-sync-external-store\": \"^1.5.0\",\n \"uuid\": \"^9.0.1\",\n \"zod\": \"^4.0.1\"\n },\n \"description\": \"Athena JS SDK\",\n \"devDependencies\": {\n \"@react-email/components\": \"^1.0.12\",\n \"@react-email/render\": \"^2.0.8\",\n \"@types/blessed\": \"^0.1.25\",\n \"@types/node\": \"^20.10.5\",\n \"@types/pg\": \"^8.15.1\",\n \"@types/react\": \"^18.3.12\",\n \"@types/react-test-renderer\": \"^18.3.1\",\n \"@types/uuid\": \"^9.0.7\",\n \"@typescript-eslint/eslint-plugin\": \"^8.57.0\",\n \"@typescript-eslint/parser\": \"^8.57.0\",\n \"eslint\": \"^8.57.1\",\n \"express\": \"^4.22.2\",\n \"react\": \"^18.3.1\",\n \"react-dom\": \"^18.3.1\",\n \"react-test-renderer\": \"^18.3.1\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.7.0\",\n \"typescript\": \"^5.3.3\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"exports\": {\n \".\": {\n \"browser\": {\n \"default\": \"./dist/browser.js\",\n \"import\": \"./dist/browser.js\",\n \"require\": \"./dist/browser.cjs\",\n \"types\": \"./dist/browser.d.ts\"\n },\n \"default\": \"./dist/index.js\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\",\n \"types\": \"./dist/index.d.ts\"\n },\n \"./admin\": {\n \"default\": \"./dist/admin.js\",\n \"import\": \"./dist/admin.js\",\n \"require\": \"./dist/admin.cjs\",\n \"types\": \"./dist/admin.d.ts\"\n },\n \"./billing\": {\n \"default\": \"./dist/billing.js\",\n \"import\": \"./dist/billing.js\",\n \"require\": \"./dist/billing.cjs\",\n \"types\": \"./dist/billing.d.ts\"\n },\n \"./browser\": {\n \"default\": \"./dist/browser.js\",\n \"import\": \"./dist/browser.js\",\n \"require\": \"./dist/browser.cjs\",\n \"types\": \"./dist/browser.d.ts\"\n },\n \"./cookies\": {\n \"default\": \"./dist/cookies.js\",\n \"import\": \"./dist/cookies.js\",\n \"require\": \"./dist/cookies.cjs\",\n \"types\": \"./dist/cookies.d.ts\"\n },\n \"./next/client\": {\n \"default\": \"./dist/next/client.js\",\n \"import\": \"./dist/next/client.js\",\n \"require\": \"./dist/next/client.cjs\",\n \"types\": \"./dist/next/client.d.ts\"\n },\n \"./next/server\": {\n \"default\": \"./dist/next/server.js\",\n \"import\": \"./dist/next/server.js\",\n \"require\": \"./dist/next/server.cjs\",\n \"types\": \"./dist/next/server.d.ts\"\n },\n \"./organization\": {\n \"default\": \"./dist/organization.js\",\n \"import\": \"./dist/organization.js\",\n \"require\": \"./dist/organization.cjs\",\n \"types\": \"./dist/organization.d.ts\"\n },\n \"./package.json\": \"./package.json\",\n \"./react\": {\n \"default\": \"./dist/react.js\",\n \"import\": \"./dist/react.js\",\n \"require\": \"./dist/react.cjs\",\n \"types\": \"./dist/react.d.ts\"\n },\n \"./social-providers\": {\n \"default\": \"./dist/social-providers.js\",\n \"import\": \"./dist/social-providers.js\",\n \"require\": \"./dist/social-providers.cjs\",\n \"types\": \"./dist/social-providers.d.ts\"\n },\n \"./utils\": {\n \"default\": \"./dist/utils.js\",\n \"import\": \"./dist/utils.js\",\n \"require\": \"./dist/utils.cjs\",\n \"types\": \"./dist/utils.d.ts\"\n }\n },\n \"files\": [\n \"dist\",\n \"bin\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"keywords\": [\n \"database\",\n \"driver\",\n \"api-gateway\",\n \"sdk\",\n \"react\",\n \"hooks\",\n \"http\",\n \"postgres\",\n \"query-builder\"\n ],\n \"license\": \"MIT\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"name\": \"@xylex-group/athena\",\n \"peerDependencies\": {\n \"@react-email/components\": \">=1.0.0\",\n \"@react-email/render\": \">=2.0.0\",\n \"react\": \">=17.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"@react-email/components\": {\n \"optional\": true\n },\n \"@react-email/render\": {\n \"optional\": true\n },\n \"react\": {\n \"optional\": true\n }\n },\n \"publisher\": \"XYLEX Group\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/xylex-group/athena-js.git\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"check:all\": \"pnpm lint && pnpm typecheck && pnpm test && pnpm build\",\n \"dev\": \"tsup --watch\",\n \"docs:methods\": \"node scripts/generate-sdk-method-reference.mjs\",\n \"docs:site:check\": \"pnpm --dir ../../apps/docs docs:sync-athena-js:check\",\n \"docs:site:sync\": \"pnpm --dir ../../apps/docs docs:sync-athena-js\",\n \"example:api-call\": \"cd examples/api-call && bun run start\",\n \"example:email-resend\": \"cd examples/email-resend && bun run start\",\n \"example:express-api\": \"cd examples/express-api && bun run start\",\n \"example:order-saga\": \"cd examples/order-saga && bun run start\",\n \"example:postgres-connection\": \"cd examples/postgres-connection && bun run start\",\n \"example:recurring-invoice\": \"cd examples/recurring-invoice && bun run start\",\n \"example:retry-patterns\": \"cd examples/retry-patterns && bun run start\",\n \"lint\": \"eslint \\\"src/**/*.ts\\\" \\\"test/**/*.ts\\\"\",\n \"lint:fix\": \"pnpm lint -- --fix\",\n \"prepublishOnly\": \"pnpm typecheck && pnpm build\",\n \"publish:token\": \"node scripts/publish.js\",\n \"test\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/*.test.ts\",\n \"test:integration:postgres\": \"node scripts/run-postgres-introspection-test.mjs\",\n \"test:watch\": \"node --import ./test/register-server-only.mjs --import tsx --test --watch test/*.test.ts\",\n \"typecheck\": \"tsc -p tsconfig.typecheck.json\"\n },\n \"sideEffects\": false,\n \"type\": \"module\",\n \"types\": \"./dist/index.d.ts\",\n \"typesVersions\": {\n \"*\": {\n \"*\": [\n \"dist/index.d.ts\"\n ],\n \"admin\": [\n \"dist/admin.d.ts\"\n ],\n \"billing\": [\n \"dist/billing.d.ts\"\n ],\n \"browser\": [\n \"dist/browser.d.ts\"\n ],\n \"cookies\": [\n \"dist/cookies.d.ts\"\n ],\n \"next/client\": [\n \"dist/next/client.d.ts\"\n ],\n \"next/server\": [\n \"dist/next/server.d.ts\"\n ],\n \"organization\": [\n \"dist/organization.d.ts\"\n ],\n \"react\": [\n \"dist/react.d.ts\"\n ],\n \"social-providers\": [\n \"dist/social-providers.d.ts\"\n ],\n \"utils\": [\n \"dist/utils.d.ts\"\n ]\n }\n },\n \"version\": \"3.0.3\"\n}","import packageJson from '../package.json' with { type: 'json' }\n\nexport const PACKAGE_VERSION = packageJson.version\n\nexport function buildSdkHeaderValue(sdkName: string): string {\n return `${sdkName} ${PACKAGE_VERSION}`\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, 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","import { getSessionCookie } from '../cookies/index.ts'\nimport type { BackendOption } from '../gateway/types.ts'\n\nexport type AthenaRequestHeaderProfile = 'gateway' | 'auth' | 'chat' | 'storage' | 'minimal'\n\nconst NO_CACHE_HEADER_VALUE = 'no-cache'\n\nconst API_KEY_HEADER_CANDIDATES = ['X-Athena-Key', 'x-athena-key', 'X-Api-Key', 'x-api-key', 'apikey'] as const\nconst ATHENA_KEY_HEADER_CANDIDATES = ['X-Athena-Key', 'x-athena-key'] as const\nconst SESSION_TOKEN_HEADER_CANDIDATES = ['X-Athena-Auth-Session-Token'] as const\nconst BEARER_MIRROR_HEADER_CANDIDATES = ['X-Athena-Auth-Bearer-Token'] as const\nconst CLIENT_HEADER_CANDIDATES = ['X-Athena-Client', 'x-athena-client'] as const\nconst PG_URI_HEADER_CANDIDATES = ['x-pg-uri'] as const\nconst JDBC_URI_HEADER_CANDIDATES = ['x-athena-jdbc-url', 'x-jdbc-url'] as const\n\ninterface AthenaRequestHeaderProfileRules {\n apiKeys: boolean\n routing: boolean\n authMirror: boolean\n authBearer: boolean\n contentType?: boolean\n accept?: boolean\n stripNullsDefault?: boolean\n}\n\nconst PROFILE_RULES: Record<AthenaRequestHeaderProfile, AthenaRequestHeaderProfileRules> = {\n gateway: { apiKeys: true, routing: true, authMirror: true, authBearer: false, contentType: true, stripNullsDefault: true },\n chat: { apiKeys: true, routing: true, authMirror: true, authBearer: true, accept: true },\n storage: { apiKeys: true, routing: true, authMirror: true, authBearer: false, contentType: true },\n auth: { apiKeys: true, routing: true, authMirror: false, authBearer: true, contentType: true },\n minimal: { apiKeys: false, routing: false, authMirror: false, authBearer: false },\n}\n\nexport interface BuildAthenaRequestHeadersInput {\n profile: AthenaRequestHeaderProfile\n sdkHeaderValue: string\n apiKey?: string | null\n client?: string | null\n userId?: string | null\n organizationId?: string | null\n backend?: BackendOption\n publishEvent?: string | null\n stripNulls?: boolean\n bearerToken?: string | null\n cookie?: string | null\n sessionToken?: string | null\n pgUri?: string | null\n jdbcUrl?: string | null\n forceNoCache?: boolean\n configHeaders?: Record<string, string>\n callHeaders?: Record<string, string>\n contentType?: string | null\n accept?: string | null\n}\n\n/** Shared config/call fields consumed by gateway, chat, auth, and `client.request(...)`. */\nexport interface AthenaRequestHeaderOverrideFields {\n apiKey?: string | null\n client?: string | null\n userId?: string | null\n organizationId?: string | null\n backend?: BackendOption\n publishEvent?: string | null\n stripNulls?: boolean\n bearerToken?: string | null\n cookie?: string | null\n sessionToken?: string | null\n pgUri?: string | null\n jdbcUrl?: string | null\n forceNoCache?: boolean\n headers?: Record<string, string>\n}\n\nexport type ResolvedRequestHeaderOverrides = Omit<\n BuildAthenaRequestHeadersInput,\n 'profile' | 'sdkHeaderValue' | 'contentType' | 'accept'\n>\n\nfunction normalizeHeaderValue(value?: string | null): string | undefined {\n return value ? value : undefined\n}\n\nfunction mergeExtraHeaders(\n configHeaders?: Record<string, string>,\n callHeaders?: Record<string, string>,\n): Record<string, string> {\n return { ...(configHeaders ?? {}), ...(callHeaders ?? {}) }\n}\n\nexport function hasHeaderIgnoreCase(\n headers: Record<string, string>,\n targetKey: string,\n): boolean {\n const normalizedTargetKey = targetKey.toLowerCase()\n return Object.keys(headers).some(key => key.toLowerCase() === normalizedTargetKey)\n}\n\nexport function resolveHeaderValue(\n headers: Record<string, string>,\n candidates: readonly string[],\n): string | undefined {\n for (const candidate of candidates) {\n const direct = normalizeHeaderValue(headers[candidate])\n if (direct) return direct\n }\n\n const loweredCandidates = new Set(candidates.map(candidate => candidate.toLowerCase()))\n for (const [key, value] of Object.entries(headers)) {\n if (!loweredCandidates.has(key.toLowerCase())) {\n continue\n }\n const normalized = normalizeHeaderValue(value)\n if (normalized) return normalized\n }\n\n return undefined\n}\n\nfunction isCacheControlHeaderName(name: string): boolean {\n return name.toLowerCase() === 'cache-control'\n}\n\nfunction normalizeBearerToken(value: string): string {\n const trimmed = value.trim()\n const match = trimmed.match(/^Bearer\\s+(.+)$/i)\n return match?.[1]?.trim() ?? trimmed\n}\n\nfunction resolveBearerTokenFromAuthorizationHeader(\n headers: Record<string, string>,\n): string | undefined {\n const authorization = resolveHeaderValue(headers, ['Authorization'])\n if (!authorization) {\n return undefined\n }\n\n const token = normalizeBearerToken(authorization)\n return token ? token : undefined\n}\n\nfunction resolveSessionTokenFromCookieHeader(\n headers: Record<string, string>,\n): string | undefined {\n const cookie = resolveHeaderValue(headers, ['Cookie'])\n if (!cookie) {\n return undefined\n }\n\n return getSessionCookie(new Headers({ cookie })) ?? undefined\n}\n\nfunction resolveBackendType(backend?: BackendOption): string | undefined {\n if (!backend) {\n return undefined\n }\n return typeof backend === 'string' ? backend : backend.type\n}\n\nexport function resolveRequestHeaderOverrides(\n config: AthenaRequestHeaderOverrideFields,\n options?: AthenaRequestHeaderOverrideFields,\n defaults?: Pick<AthenaRequestHeaderOverrideFields, 'client' | 'stripNulls'>,\n): ResolvedRequestHeaderOverrides {\n return {\n apiKey: options?.apiKey ?? config.apiKey,\n client: options?.client ?? config.client ?? defaults?.client,\n userId: options?.userId ?? config.userId,\n organizationId: options?.organizationId ?? config.organizationId,\n backend: options?.backend ?? config.backend,\n publishEvent: options?.publishEvent ?? config.publishEvent,\n stripNulls: options?.stripNulls ?? config.stripNulls ?? defaults?.stripNulls,\n bearerToken: options?.bearerToken ?? config.bearerToken,\n cookie: options?.cookie ?? config.cookie,\n sessionToken: options?.sessionToken ?? config.sessionToken,\n pgUri: options?.pgUri ?? config.pgUri,\n jdbcUrl: options?.jdbcUrl ?? config.jdbcUrl,\n forceNoCache: Boolean(config.forceNoCache || options?.forceNoCache),\n configHeaders: config.headers,\n callHeaders: options?.headers,\n }\n}\n\nexport function buildServiceRequestHeaders(\n profile: Exclude<AthenaRequestHeaderProfile, 'minimal'>,\n sdkHeaderValue: string,\n config: AthenaRequestHeaderOverrideFields,\n options?: AthenaRequestHeaderOverrideFields,\n extras?: Pick<BuildAthenaRequestHeadersInput, 'contentType' | 'accept'> & {\n client?: string | null\n stripNulls?: boolean\n },\n): Record<string, string> {\n const rules = PROFILE_RULES[profile]\n return buildAthenaRequestHeaders({\n profile,\n sdkHeaderValue,\n ...resolveRequestHeaderOverrides(config, options, {\n client: extras?.client ?? undefined,\n stripNulls: extras?.stripNulls ?? (rules.stripNullsDefault ? true : undefined),\n }),\n contentType: extras?.contentType ?? (rules.contentType ? 'application/json' : undefined),\n accept: extras?.accept ?? (rules.accept ? 'application/json' : undefined),\n })\n}\n\nexport function applyAthenaApiKeyHeaders(\n headers: Record<string, string>,\n apiKey?: string | null,\n): void {\n const resolvedApiKey = normalizeHeaderValue(apiKey)\n if (resolvedApiKey && !hasHeaderIgnoreCase(headers, 'X-Athena-Key')) {\n headers['X-Athena-Key'] = resolvedApiKey\n }\n}\n\nexport function applyAthenaAuthContextHeaders(\n headers: Record<string, string>,\n input: Pick<\n BuildAthenaRequestHeadersInput,\n 'bearerToken' | 'cookie' | 'sessionToken' | 'profile' | 'configHeaders' | 'callHeaders'\n >,\n): void {\n const mergedExtraHeaders = mergeExtraHeaders(input.configHeaders, input.callHeaders)\n const rules = PROFILE_RULES[input.profile]\n const explicitCookie = normalizeHeaderValue(input.cookie)\n if (explicitCookie) {\n mergedExtraHeaders.Cookie = explicitCookie\n }\n\n const explicitSessionToken =\n normalizeHeaderValue(input.sessionToken) ??\n resolveHeaderValue(mergedExtraHeaders, SESSION_TOKEN_HEADER_CANDIDATES)\n const derivedSessionToken =\n explicitSessionToken ?? resolveSessionTokenFromCookieHeader(mergedExtraHeaders)\n const cookieFromHeaders = resolveHeaderValue(mergedExtraHeaders, ['Cookie'])\n\n if (explicitCookie && !hasHeaderIgnoreCase(headers, 'Cookie')) {\n headers.Cookie = explicitCookie\n } else if (cookieFromHeaders && !hasHeaderIgnoreCase(headers, 'Cookie')) {\n headers.Cookie = cookieFromHeaders\n }\n\n const explicitBearerToken = (() => {\n const configured = normalizeHeaderValue(input.bearerToken)\n if (configured) {\n return normalizeBearerToken(configured)\n }\n const mirrored = resolveHeaderValue(mergedExtraHeaders, BEARER_MIRROR_HEADER_CANDIDATES)\n return mirrored ? normalizeBearerToken(mirrored) : undefined\n })()\n const derivedBearerToken =\n explicitBearerToken ?? resolveBearerTokenFromAuthorizationHeader(mergedExtraHeaders)\n\n if (rules.authBearer && derivedBearerToken && !hasHeaderIgnoreCase(headers, 'Authorization')) {\n headers.Authorization = `Bearer ${derivedBearerToken}`\n }\n\n if (rules.authMirror) {\n if (derivedSessionToken && !hasHeaderIgnoreCase(headers, 'X-Athena-Auth-Session-Token')) {\n headers['X-Athena-Auth-Session-Token'] = derivedSessionToken\n }\n if (derivedBearerToken && !hasHeaderIgnoreCase(headers, 'X-Athena-Auth-Bearer-Token')) {\n headers['X-Athena-Auth-Bearer-Token'] = derivedBearerToken\n }\n } else if (derivedSessionToken && !hasHeaderIgnoreCase(headers, 'X-Athena-Auth-Session-Token')) {\n headers['X-Athena-Auth-Session-Token'] = derivedSessionToken\n }\n}\n\nexport function applyAthenaPgUriHeaders(\n headers: Record<string, string>,\n input: Pick<BuildAthenaRequestHeadersInput, 'pgUri' | 'jdbcUrl' | 'configHeaders' | 'callHeaders'>,\n): void {\n const mergedExtraHeaders = mergeExtraHeaders(input.configHeaders, input.callHeaders)\n\n const pgUri =\n normalizeHeaderValue(input.pgUri) ??\n resolveHeaderValue(mergedExtraHeaders, PG_URI_HEADER_CANDIDATES)\n if (pgUri && !hasHeaderIgnoreCase(headers, 'x-pg-uri')) {\n headers['x-pg-uri'] = pgUri\n }\n\n const jdbcUrl =\n normalizeHeaderValue(input.jdbcUrl) ??\n resolveHeaderValue(mergedExtraHeaders, JDBC_URI_HEADER_CANDIDATES)\n if (jdbcUrl) {\n if (!hasHeaderIgnoreCase(headers, 'x-athena-jdbc-url')) {\n headers['x-athena-jdbc-url'] = jdbcUrl\n }\n if (!hasHeaderIgnoreCase(headers, 'x-jdbc-url')) {\n headers['x-jdbc-url'] = jdbcUrl\n }\n }\n}\n\n/**\n * Minimal gateway/data request headers used by many apps before they adopt\n * the full {@link buildAthenaRequestHeaders} profile model.\n *\n * Additive convenience — does not replace client-built headers. Prefer\n * `createClient({ client, key })` so the SDK sets these on every call.\n */\nexport function buildAthenaGatewayHeaders(input: {\n clientName?: string | null\n gatewayKey?: string | null\n headers?: Record<string, string | null | undefined>\n}): Record<string, string> {\n const trimmedClientName = input.clientName?.trim()\n const trimmedGatewayKey = input.gatewayKey?.trim()\n const merged: Record<string, string | null | undefined> = {\n ...(trimmedClientName\n ? {\n 'X-Athena-Client': trimmedClientName,\n }\n : {}),\n ...(trimmedGatewayKey\n ? {\n 'X-Api-Key': trimmedGatewayKey,\n 'X-Athena-Key': trimmedGatewayKey,\n }\n : {}),\n ...input.headers,\n }\n\n return Object.fromEntries(\n Object.entries(merged).flatMap(([key, value]) =>\n typeof value === 'string' && value.trim()\n ? ([[key, value.trim()]] as const)\n : [],\n ),\n )\n}\n\nexport function buildAthenaRequestHeaders(\n input: BuildAthenaRequestHeadersInput,\n): Record<string, string> {\n const forceNoCache = Boolean(input.forceNoCache)\n const mergedExtraHeaders = mergeExtraHeaders(input.configHeaders, input.callHeaders)\n const rules = PROFILE_RULES[input.profile]\n\n const headerClient = resolveHeaderValue(mergedExtraHeaders, CLIENT_HEADER_CANDIDATES)\n const finalClient = normalizeHeaderValue(input.client) ?? headerClient\n const finalApiKey =\n normalizeHeaderValue(input.apiKey) ??\n resolveHeaderValue(mergedExtraHeaders, API_KEY_HEADER_CANDIDATES)\n const finalAthenaKey =\n resolveHeaderValue(mergedExtraHeaders, ATHENA_KEY_HEADER_CANDIDATES) ?? finalApiKey\n\n const headers: Record<string, string> = {\n 'X-Athena-Sdk': input.sdkHeaderValue,\n }\n\n if (rules.contentType) {\n headers['Content-Type'] = input.contentType ?? 'application/json'\n }\n\n if (input.accept ?? rules.accept) {\n headers.Accept = input.accept ?? 'application/json'\n }\n\n if (rules.routing) {\n if (normalizeHeaderValue(input.userId)) {\n headers['X-User-Id'] = input.userId ?? ''\n }\n if (normalizeHeaderValue(input.organizationId)) {\n headers['X-Organization-Id'] = input.organizationId ?? ''\n }\n if (finalClient) {\n headers['X-Athena-Client'] = finalClient\n }\n\n const backendType = resolveBackendType(input.backend)\n if (backendType) {\n headers['X-Backend-Type'] = backendType\n }\n\n if (typeof input.stripNulls === 'boolean') {\n headers['X-Strip-Nulls'] = input.stripNulls ? 'true' : 'false'\n } else if (rules.stripNullsDefault) {\n headers['X-Strip-Nulls'] = 'true'\n }\n\n if (normalizeHeaderValue(input.publishEvent)) {\n headers['X-Publish-Event'] = input.publishEvent ?? ''\n }\n }\n\n if (rules.apiKeys && (finalApiKey || finalAthenaKey)) {\n applyAthenaApiKeyHeaders(headers, finalAthenaKey)\n }\n\n applyAthenaAuthContextHeaders(headers, input)\n applyAthenaPgUriHeaders(headers, input)\n\n const reservedClientHeaderKeys = new Set(CLIENT_HEADER_CANDIDATES.map(key => key.toLowerCase()))\n Object.entries(mergedExtraHeaders).forEach(([key, value]) => {\n if (reservedClientHeaderKeys.has(key.toLowerCase())) {\n return\n }\n if (forceNoCache && isCacheControlHeaderName(key)) {\n return\n }\n const normalized = normalizeHeaderValue(value)\n if (normalized) {\n headers[key] = normalized\n }\n })\n\n if (forceNoCache) {\n headers['Cache-Control'] = NO_CACHE_HEADER_VALUE\n }\n\n return headers\n}\n","import type {\n AthenaGatewayEndpointPath,\n AthenaGatewayErrorCode,\n AthenaGatewayErrorDetails,\n AthenaGatewayMethod,\n AthenaGatewayResponse,\n} from './types.js'\n\nexport interface AthenaGatewayErrorInput {\n code: AthenaGatewayErrorCode\n message: string\n status?: number\n endpoint?: AthenaGatewayEndpointPath\n method?: AthenaGatewayMethod\n requestId?: string\n hint?: string\n cause?: string\n}\n\n/**\n * Canonical error for gateway failures.\n * Holds request context and machine-readable classification.\n */\nexport class AthenaGatewayError extends Error {\n readonly code: AthenaGatewayErrorCode\n readonly status: number\n readonly endpoint?: AthenaGatewayEndpointPath\n readonly method?: AthenaGatewayMethod\n readonly requestId?: string\n readonly hint?: string\n readonly causeDetail?: string\n\n constructor(input: AthenaGatewayErrorInput) {\n super(input.message)\n this.name = 'AthenaGatewayError'\n this.code = input.code\n this.status = input.status ?? 0\n this.endpoint = input.endpoint\n this.method = input.method\n this.requestId = input.requestId\n this.hint = input.hint\n this.causeDetail = input.cause\n }\n\n toDetails(): AthenaGatewayErrorDetails {\n return {\n code: this.code,\n message: this.message,\n status: this.status,\n endpoint: this.endpoint,\n method: this.method,\n requestId: this.requestId,\n hint: this.hint,\n cause: this.causeDetail,\n }\n }\n\n static fromResponse<T>(\n response: AthenaGatewayResponse<T>,\n fallback: Omit<AthenaGatewayErrorInput, 'code' | 'message' | 'status'>,\n ) {\n const details = response.errorDetails\n if (details) {\n return new AthenaGatewayError({\n code: details.code,\n message: details.message,\n status: details.status,\n endpoint: details.endpoint ?? fallback.endpoint,\n method: details.method ?? fallback.method,\n requestId: details.requestId ?? fallback.requestId,\n hint: details.hint,\n cause: details.cause,\n })\n }\n\n return new AthenaGatewayError({\n code: 'HTTP_ERROR',\n message: response.error ?? 'Gateway request failed',\n status: response.status,\n endpoint: fallback.endpoint,\n method: fallback.method,\n requestId: fallback.requestId,\n })\n }\n}\n\nexport function isAthenaGatewayError(error: unknown): error is AthenaGatewayError {\n return error instanceof AthenaGatewayError\n}\n","import { AthenaGatewayError } from './errors.ts'\n\nexport const ATHENA_DEFAULT_BASE_URL = 'https://mirror2.athena-cluster.com'\n\nfunction describeReceivedValue(value: unknown): string {\n if (value === undefined) return 'undefined'\n if (value === null) return 'null'\n if (typeof value === 'string') {\n return value.trim().length > 0 ? JSON.stringify(value) : 'an empty string'\n }\n return `${typeof value} ${JSON.stringify(value)}`\n}\n\nfunction invalidBaseUrlError(message: string, hint: string): AthenaGatewayError {\n return new AthenaGatewayError({\n code: 'INVALID_URL',\n message,\n status: 0,\n hint,\n })\n}\n\nexport interface NormalizeAthenaGatewayBaseUrlOptions {\n defaultBaseUrl?: string\n label?: string\n}\n\nexport function normalizeAthenaGatewayBaseUrl(\n input: string | null | undefined,\n options: NormalizeAthenaGatewayBaseUrlOptions = {},\n): string {\n const label = options.label ?? 'Athena gateway base URL'\n const candidate = input ?? options.defaultBaseUrl\n\n if (candidate === undefined || candidate === null) {\n throw invalidBaseUrlError(\n `${label} must be a non-empty absolute http(s) URL. Received ${describeReceivedValue(input)}.`,\n 'Set ATHENA_URL in the explicit env object (or pass createClient({ url, key })) to a full URL such as \"https://mirror2.athena-cluster.com\".',\n )\n }\n\n const trimmed = candidate.trim()\n if (!trimmed) {\n throw invalidBaseUrlError(\n `${label} must be a non-empty absolute http(s) URL. Received ${describeReceivedValue(candidate)}.`,\n 'Set ATHENA_URL in the explicit env object (or pass createClient({ url, key })) to a full URL such as \"https://mirror2.athena-cluster.com\".',\n )\n }\n\n let parsed: URL\n try {\n parsed = new URL(trimmed)\n } catch {\n throw invalidBaseUrlError(\n `${label} must be a valid absolute http(s) URL. Received ${describeReceivedValue(candidate)}.`,\n 'Use a full URL including the protocol, for example \"https://mirror2.athena-cluster.com\".',\n )\n }\n\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw invalidBaseUrlError(\n `${label} must use http or https. Received ${JSON.stringify(trimmed)}.`,\n 'Use an Athena gateway URL such as \"https://mirror2.athena-cluster.com\".',\n )\n }\n\n if (parsed.search || parsed.hash) {\n throw invalidBaseUrlError(\n `${label} must not include query parameters or hash fragments. Received ${JSON.stringify(trimmed)}.`,\n 'Pass only the base URL. Endpoint paths such as \"/gateway/fetch\" are appended by the SDK.',\n )\n }\n\n return parsed.toString().replace(/\\/+$/, '')\n}\n\nexport function buildAthenaGatewayUrl(baseUrl: string, path: string): string {\n if (!path.startsWith('/')) {\n throw invalidBaseUrlError(\n `Athena gateway path must start with \"/\". Received ${JSON.stringify(path)}.`,\n 'Use a leading slash such as \"/gateway/fetch\" or \"/\".',\n )\n }\n\n return `${baseUrl}${path}`\n}\n","/**\n * Athena billing HTTP client for live `/billing/v1/*`, `/admin/billing/*`,\n * provider webhook, and `/debug/billing` routes.\n *\n * Methods map 1:1 onto the registered Actix handlers. Auth uses the static\n * Athena admin key (`X-Athena-Key` / configured API key) matching the server\n * `authorize_static_admin_key` gate.\n *\n * Contract spine: `billingSdkManifest` METHOD+path entries must match the\n * permanent Rust inventory `athena_billing::LIVE_HTTP_ROUTES`\n * (exported as `./live-http-routes.json`). Export with\n * `cargo run -p athena-billing --bin billing-contract-spine -- --write`.\n */\n\nimport { buildSdkHeaderValue } from '../sdk-version.ts'\nimport {\n buildAthenaRequestHeaders,\n hasHeaderIgnoreCase,\n} from '../utils/athena-request-headers.ts'\nimport { normalizeAthenaGatewayBaseUrl } from '../gateway/url.ts'\n\nconst SDK_NAME = 'xylex-group/athena-billing'\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME)\n\nexport type AthenaBillingHttpMethod = 'GET' | 'POST' | 'PATCH' | 'DELETE'\n\nexport type AthenaBillingJson =\n | null\n | boolean\n | number\n | string\n | AthenaBillingJson[]\n | { [key: string]: AthenaBillingJson }\n\nexport interface AthenaBillingCallOptions {\n headers?: Record<string, string>\n signal?: AbortSignal\n apiKey?: string | null\n}\n\nexport interface AthenaBillingClientConfig {\n baseUrl: string\n apiKey: string\n client?: string | null\n headers?: Record<string, string>\n fetchImpl?: typeof fetch\n}\n\nexport interface AthenaBillingEnvelope<T = unknown> {\n status?: string\n message?: string\n data: T\n}\n\nexport class AthenaBillingError extends Error {\n status: number\n endpoint: string\n method: string\n body: unknown\n\n constructor(input: {\n message: string\n status: number\n endpoint: string\n method: string\n body: unknown\n }) {\n super(input.message)\n this.name = 'AthenaBillingError'\n this.status = input.status\n this.endpoint = input.endpoint\n this.method = input.method\n this.body = input.body\n }\n}\n\nexport interface BillingConnectionRefInput {\n connectionId: string\n clientName?: string\n}\n\nexport interface BillingListQuery extends BillingConnectionRefInput {\n cursor?: string\n source?: 'provider' | 'persistence' | string\n limit?: number\n offset?: number\n}\n\nexport interface BillingEnsureCustomerInput extends BillingConnectionRefInput {\n email?: string | null\n name?: string | null\n metadata?: Record<string, AthenaBillingJson>\n idempotencyKey: string\n}\n\nexport interface BillingUpdateCustomerInput extends BillingConnectionRefInput {\n email?: string | null\n name?: string | null\n}\n\nexport interface BillingCreateConnectionInput {\n ownerKind: string\n ownerId: string\n provider: string\n mode?: string\n status?: string\n credentialKind?: string\n providerAccountId: string\n providerProfileId?: string | null\n scopes?: string[]\n config?: Record<string, AthenaBillingJson>\n metadata?: Record<string, AthenaBillingJson>\n}\n\nexport interface BillingUpdateConnectionInput {\n status?: string\n mode?: string\n credentialKind?: string\n providerAccountId?: string\n providerProfileId?: string | null\n scopes?: string[]\n config?: Record<string, AthenaBillingJson>\n metadata?: Record<string, AthenaBillingJson>\n}\n\nexport interface BillingReconcileInput {\n resourceKind: string\n resourceId: string\n customerId?: string | null\n}\n\nexport interface BillingProvisionSinksInput {\n targetSchema?: string\n instance?: string\n}\n\nexport const billingSdkManifest = {\n namespace: 'billing',\n envelopeKind: 'athena',\n methods: [\n { name: 'getCapabilities', method: 'GET', path: '/billing/v1/capabilities' },\n { name: 'createCheckout', method: 'POST', path: '/billing/v1/checkouts' },\n { name: 'listProducts', method: 'GET', path: '/billing/v1/products' },\n { name: 'listPrices', method: 'GET', path: '/billing/v1/prices' },\n { name: 'listCustomers', method: 'GET', path: '/billing/v1/customers' },\n { name: 'createCustomer', method: 'POST', path: '/billing/v1/customers' },\n { name: 'getCustomer', method: 'GET', path: '/billing/v1/customers/{id}' },\n { name: 'updateCustomer', method: 'PATCH', path: '/billing/v1/customers/{id}' },\n { name: 'deleteCustomer', method: 'DELETE', path: '/billing/v1/customers/{id}' },\n { name: 'listPayments', method: 'GET', path: '/billing/v1/payments' },\n { name: 'createPayment', method: 'POST', path: '/billing/v1/payments' },\n { name: 'getPayment', method: 'GET', path: '/billing/v1/payments/{id}' },\n { name: 'cancelPayment', method: 'POST', path: '/billing/v1/payments/{id}/cancel' },\n { name: 'listPaymentLinks', method: 'GET', path: '/billing/v1/payment-links' },\n { name: 'createPaymentLink', method: 'POST', path: '/billing/v1/payment-links' },\n { name: 'getPaymentLink', method: 'GET', path: '/billing/v1/payment-links/{id}' },\n { name: 'updatePaymentLink', method: 'PATCH', path: '/billing/v1/payment-links/{id}' },\n { name: 'deletePaymentLink', method: 'DELETE', path: '/billing/v1/payment-links/{id}' },\n { name: 'listRefunds', method: 'GET', path: '/billing/v1/refunds' },\n { name: 'createRefund', method: 'POST', path: '/billing/v1/refunds' },\n { name: 'getRefund', method: 'GET', path: '/billing/v1/refunds/{id}' },\n { name: 'cancelRefund', method: 'POST', path: '/billing/v1/refunds/{id}/cancel' },\n { name: 'listSubscriptions', method: 'GET', path: '/billing/v1/subscriptions' },\n { name: 'createSubscription', method: 'POST', path: '/billing/v1/subscriptions' },\n { name: 'getSubscription', method: 'GET', path: '/billing/v1/subscriptions/{id}' },\n { name: 'updateSubscription', method: 'PATCH', path: '/billing/v1/subscriptions/{id}' },\n { name: 'cancelSubscription', method: 'POST', path: '/billing/v1/subscriptions/{id}/cancel' },\n { name: 'listInvoices', method: 'GET', path: '/billing/v1/invoices' },\n { name: 'getInvoice', method: 'GET', path: '/billing/v1/invoices/{id}' },\n { name: 'listWebhooks', method: 'GET', path: '/billing/v1/webhooks' },\n { name: 'createWebhook', method: 'POST', path: '/billing/v1/webhooks' },\n { name: 'getWebhook', method: 'GET', path: '/billing/v1/webhooks/{id}' },\n { name: 'updateWebhook', method: 'PATCH', path: '/billing/v1/webhooks/{id}' },\n { name: 'deleteWebhook', method: 'DELETE', path: '/billing/v1/webhooks/{id}' },\n { name: 'testWebhook', method: 'POST', path: '/billing/v1/webhooks/{id}/test' },\n {\n name: 'listConnections',\n method: 'GET',\n path: '/admin/billing/clients/{client_name}/connections',\n },\n {\n name: 'createConnection',\n method: 'POST',\n path: '/admin/billing/clients/{client_name}/connections',\n },\n {\n name: 'getConnection',\n method: 'GET',\n path: '/admin/billing/clients/{client_name}/connections/{connection_id}',\n },\n {\n name: 'updateConnection',\n method: 'PATCH',\n path: '/admin/billing/clients/{client_name}/connections/{connection_id}',\n },\n {\n name: 'deleteConnection',\n method: 'DELETE',\n path: '/admin/billing/clients/{client_name}/connections/{connection_id}',\n },\n {\n name: 'reconcileDocument',\n method: 'POST',\n path: '/admin/billing/clients/{client_name}/connections/{connection_id}/reconcile',\n },\n {\n name: 'listWebhookEvents',\n method: 'GET',\n path: '/admin/billing/clients/{client_name}/webhook-events',\n },\n {\n name: 'provisionWebhookSinks',\n method: 'POST',\n path: '/admin/billing/clients/{client_name}/webhook-sinks/provision',\n },\n { name: 'listGrants', method: 'GET', path: '/admin/billing/grants' },\n { name: 'listProviders', method: 'GET', path: '/admin/billing/providers' },\n {\n name: 'listSinkHelpers',\n method: 'GET',\n path: '/admin/webhook-sinks/helpers/billing',\n },\n {\n name: 'ingestProviderWebhook',\n method: 'POST',\n path: '/billing/providers/{provider}/clients/{client_name}/connections/{connection_id}/webhook',\n },\n { name: 'getDebugBilling', method: 'GET', path: '/debug/billing' },\n ],\n} as const\n\nfunction withPathParam(path: string, name: string, value: string): string {\n return path.replace(`{${name}}`, encodeURIComponent(value))\n}\n\nfunction appendQuery(\n path: string,\n query?: Record<string, string | number | boolean | null | undefined>,\n): string {\n if (!query) return path\n const params = new URLSearchParams()\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) continue\n params.set(key, String(value))\n }\n const serialized = params.toString()\n return serialized ? `${path}?${serialized}` : path\n}\n\nfunction connectionQuery(input: BillingListQuery | BillingConnectionRefInput): Record<string, string> {\n const query: Record<string, string> = {\n connectionId: input.connectionId,\n }\n if (input.clientName) query.clientName = input.clientName\n if ('cursor' in input && input.cursor) query.cursor = input.cursor\n if ('source' in input && input.source) query.source = input.source\n if ('limit' in input && input.limit !== undefined) query.limit = String(input.limit)\n if ('offset' in input && input.offset !== undefined) query.offset = String(input.offset)\n return query\n}\n\nfunction parseEnvelopeData<T>(body: unknown): T {\n if (body && typeof body === 'object' && 'data' in body) {\n return (body as AthenaBillingEnvelope<T>).data\n }\n return body as T\n}\n\nexport interface AthenaBillingModule {\n getCapabilities(input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n createCheckout(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n listProducts(input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n listPrices(\n input: BillingConnectionRefInput & { productId?: string },\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n listCustomers(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n createCustomer(input: BillingEnsureCustomerInput, options?: AthenaBillingCallOptions): Promise<unknown>\n getCustomer(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n updateCustomer(\n id: string,\n input: BillingUpdateCustomerInput,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n deleteCustomer(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n listPayments(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n createPayment(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n getPayment(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n cancelPayment(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n listPaymentLinks(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n createPaymentLink(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n getPaymentLink(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n updatePaymentLink(\n id: string,\n body: Record<string, unknown>,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n deletePaymentLink(\n id: string,\n input: BillingConnectionRefInput,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n listRefunds(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n createRefund(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n getRefund(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n cancelRefund(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n listSubscriptions(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n createSubscription(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n getSubscription(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n updateSubscription(\n id: string,\n body: Record<string, unknown>,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n cancelSubscription(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n listInvoices(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n getInvoice(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n listWebhooks(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n createWebhook(\n input: BillingConnectionRefInput,\n body: Record<string, unknown>,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n getWebhook(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n updateWebhook(\n id: string,\n input: BillingConnectionRefInput,\n body: Record<string, unknown>,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n deleteWebhook(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n testWebhook(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n listConnections(clientName: string, options?: AthenaBillingCallOptions): Promise<unknown>\n createConnection(\n clientName: string,\n input: BillingCreateConnectionInput,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n getConnection(\n clientName: string,\n connectionId: string,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n updateConnection(\n clientName: string,\n connectionId: string,\n input: BillingUpdateConnectionInput,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n deleteConnection(\n clientName: string,\n connectionId: string,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n reconcileDocument(\n clientName: string,\n connectionId: string,\n input: BillingReconcileInput,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n listWebhookEvents(clientName: string, options?: AthenaBillingCallOptions): Promise<unknown>\n provisionWebhookSinks(\n clientName: string,\n input?: BillingProvisionSinksInput,\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n listGrants(options?: AthenaBillingCallOptions): Promise<unknown>\n listProviders(options?: AthenaBillingCallOptions): Promise<unknown>\n listSinkHelpers(\n query?: { targetSchema?: string; instance?: string },\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n ingestProviderWebhook(\n input: {\n provider: string\n clientName: string\n connectionId: string\n body: BodyInit | Record<string, unknown> | string\n signatureHeaders?: Record<string, string>\n },\n options?: AthenaBillingCallOptions,\n ): Promise<unknown>\n getDebugBilling(jwtSecret: string, options?: AthenaBillingCallOptions): Promise<string>\n}\n\nexport function createBillingModule(config: AthenaBillingClientConfig): AthenaBillingModule {\n const baseUrl = normalizeAthenaGatewayBaseUrl(config.baseUrl, {\n label: 'Athena billing base URL',\n })\n const fetchImpl = config.fetchImpl ?? globalThis.fetch.bind(globalThis)\n\n async function call<T>(\n method: AthenaBillingHttpMethod,\n path: string,\n body?: unknown,\n options?: AthenaBillingCallOptions,\n responseType: 'json' | 'text' = 'json',\n ): Promise<T> {\n const headers = buildAthenaRequestHeaders({\n profile: 'gateway',\n sdkHeaderValue: SDK_HEADER_VALUE,\n apiKey: options?.apiKey ?? config.apiKey,\n client: config.client,\n configHeaders: {\n ...(config.headers ?? {}),\n },\n callHeaders: options?.headers,\n contentType: 'application/json',\n })\n\n let requestBody: BodyInit | undefined\n if (body !== undefined && body !== null) {\n if (\n typeof body === 'string' ||\n body instanceof Blob ||\n body instanceof ArrayBuffer ||\n ArrayBuffer.isView(body) ||\n body instanceof FormData ||\n body instanceof URLSearchParams\n ) {\n requestBody = body as BodyInit\n } else {\n requestBody = JSON.stringify(body)\n if (!hasHeaderIgnoreCase(headers, 'Content-Type')) {\n headers['Content-Type'] = 'application/json'\n }\n }\n }\n\n const targetUrl = `${baseUrl}${path.startsWith('/') ? path : `/${path}`}`\n const response = await fetchImpl(targetUrl, {\n method,\n headers,\n body: requestBody,\n signal: options?.signal,\n })\n\n if (responseType === 'text') {\n const text = await response.text()\n if (!response.ok) {\n throw new AthenaBillingError({\n message: `Billing request failed (${response.status})`,\n status: response.status,\n endpoint: path,\n method,\n body: text,\n })\n }\n return text as T\n }\n\n const rawText = await response.text()\n let parsed: unknown = rawText\n if (rawText) {\n try {\n parsed = JSON.parse(rawText)\n } catch {\n parsed = rawText\n }\n } else {\n parsed = null\n }\n\n if (!response.ok) {\n const message =\n parsed &&\n typeof parsed === 'object' &&\n 'message' in parsed &&\n typeof (parsed as { message: unknown }).message === 'string'\n ? (parsed as { message: string }).message\n : `Billing request failed (${response.status})`\n throw new AthenaBillingError({\n message,\n status: response.status,\n endpoint: path,\n method,\n body: parsed,\n })\n }\n\n return parseEnvelopeData<T>(parsed)\n }\n\n return {\n getCapabilities(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/capabilities', connectionQuery(input)),\n undefined,\n options,\n )\n },\n createCheckout(body, options) {\n return call('POST', '/billing/v1/checkouts', body, options)\n },\n listProducts(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/products', connectionQuery(input)),\n undefined,\n options,\n )\n },\n listPrices(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/prices', {\n ...connectionQuery(input),\n ...(input.productId ? { productId: input.productId } : {}),\n }),\n undefined,\n options,\n )\n },\n listCustomers(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/customers', connectionQuery(input)),\n undefined,\n options,\n )\n },\n createCustomer(input, options) {\n return call(\n 'POST',\n '/billing/v1/customers',\n {\n connectionId: input.connectionId,\n clientName: input.clientName,\n email: input.email,\n name: input.name,\n metadata: input.metadata ?? {},\n idempotencyKey: input.idempotencyKey,\n },\n options,\n )\n },\n getCustomer(id, input, options) {\n return call(\n 'GET',\n appendQuery(\n withPathParam('/billing/v1/customers/{id}', 'id', id),\n connectionQuery(input),\n ),\n undefined,\n options,\n )\n },\n updateCustomer(id, input, options) {\n return call(\n 'PATCH',\n withPathParam('/billing/v1/customers/{id}', 'id', id),\n {\n connectionId: input.connectionId,\n clientName: input.clientName,\n email: input.email,\n name: input.name,\n },\n options,\n )\n },\n deleteCustomer(id, input, options) {\n return call(\n 'DELETE',\n appendQuery(\n withPathParam('/billing/v1/customers/{id}', 'id', id),\n connectionQuery(input),\n ),\n undefined,\n options,\n )\n },\n listPayments(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/payments', connectionQuery(input)),\n undefined,\n options,\n )\n },\n createPayment(body, options) {\n return call('POST', '/billing/v1/payments', body, options)\n },\n getPayment(id, input, options) {\n return call(\n 'GET',\n appendQuery(\n withPathParam('/billing/v1/payments/{id}', 'id', id),\n connectionQuery(input),\n ),\n undefined,\n options,\n )\n },\n cancelPayment(id, input, options) {\n return call(\n 'POST',\n appendQuery(\n withPathParam('/billing/v1/payments/{id}/cancel', 'id', id),\n connectionQuery(input),\n ),\n {},\n options,\n )\n },\n listPaymentLinks(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/payment-links', connectionQuery(input)),\n undefined,\n options,\n )\n },\n createPaymentLink(body, options) {\n return call('POST', '/billing/v1/payment-links', body, options)\n },\n getPaymentLink(id, input, options) {\n return call(\n 'GET',\n appendQuery(\n withPathParam('/billing/v1/payment-links/{id}', 'id', id),\n connectionQuery(input),\n ),\n undefined,\n options,\n )\n },\n updatePaymentLink(id, body, options) {\n return call(\n 'PATCH',\n withPathParam('/billing/v1/payment-links/{id}', 'id', id),\n body,\n options,\n )\n },\n deletePaymentLink(id, input, options) {\n return call(\n 'DELETE',\n appendQuery(\n withPathParam('/billing/v1/payment-links/{id}', 'id', id),\n connectionQuery(input),\n ),\n undefined,\n options,\n )\n },\n listRefunds(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/refunds', connectionQuery(input)),\n undefined,\n options,\n )\n },\n createRefund(body, options) {\n return call('POST', '/billing/v1/refunds', body, options)\n },\n getRefund(id, input, options) {\n return call(\n 'GET',\n appendQuery(withPathParam('/billing/v1/refunds/{id}', 'id', id), connectionQuery(input)),\n undefined,\n options,\n )\n },\n cancelRefund(id, input, options) {\n return call(\n 'POST',\n appendQuery(withPathParam('/billing/v1/refunds/{id}/cancel', 'id', id), connectionQuery(input)),\n {},\n options,\n )\n },\n listSubscriptions(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/subscriptions', connectionQuery(input)),\n undefined,\n options,\n )\n },\n createSubscription(body, options) {\n return call('POST', '/billing/v1/subscriptions', body, options)\n },\n getSubscription(id, input, options) {\n return call(\n 'GET',\n appendQuery(\n withPathParam('/billing/v1/subscriptions/{id}', 'id', id),\n connectionQuery(input),\n ),\n undefined,\n options,\n )\n },\n updateSubscription(id, body, options) {\n return call(\n 'PATCH',\n withPathParam('/billing/v1/subscriptions/{id}', 'id', id),\n body,\n options,\n )\n },\n cancelSubscription(id, input, options) {\n return call(\n 'POST',\n appendQuery(\n withPathParam('/billing/v1/subscriptions/{id}/cancel', 'id', id),\n connectionQuery(input),\n ),\n {},\n options,\n )\n },\n listInvoices(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/invoices', connectionQuery(input)),\n undefined,\n options,\n )\n },\n getInvoice(id, input, options) {\n return call(\n 'GET',\n appendQuery(\n withPathParam('/billing/v1/invoices/{id}', 'id', id),\n connectionQuery(input),\n ),\n undefined,\n options,\n )\n },\n listWebhooks(input, options) {\n return call(\n 'GET',\n appendQuery('/billing/v1/webhooks', connectionQuery(input)),\n undefined,\n options,\n )\n },\n createWebhook(input, body, options) {\n return call(\n 'POST',\n appendQuery('/billing/v1/webhooks', connectionQuery(input)),\n body,\n options,\n )\n },\n getWebhook(id, input, options) {\n return call(\n 'GET',\n appendQuery(withPathParam('/billing/v1/webhooks/{id}', 'id', id), connectionQuery(input)),\n undefined,\n options,\n )\n },\n updateWebhook(id, input, body, options) {\n return call(\n 'PATCH',\n appendQuery(withPathParam('/billing/v1/webhooks/{id}', 'id', id), connectionQuery(input)),\n body,\n options,\n )\n },\n deleteWebhook(id, input, options) {\n return call(\n 'DELETE',\n appendQuery(withPathParam('/billing/v1/webhooks/{id}', 'id', id), connectionQuery(input)),\n undefined,\n options,\n )\n },\n testWebhook(id, input, options) {\n return call(\n 'POST',\n appendQuery(\n withPathParam('/billing/v1/webhooks/{id}/test', 'id', id),\n connectionQuery(input),\n ),\n {},\n options,\n )\n },\n listConnections(clientName, options) {\n return call(\n 'GET',\n withPathParam('/admin/billing/clients/{client_name}/connections', 'client_name', clientName),\n undefined,\n options,\n )\n },\n createConnection(clientName, input, options) {\n return call(\n 'POST',\n withPathParam('/admin/billing/clients/{client_name}/connections', 'client_name', clientName),\n {\n ownerKind: input.ownerKind,\n ownerId: input.ownerId,\n provider: input.provider,\n mode: input.mode,\n status: input.status,\n credentialKind: input.credentialKind,\n providerAccountId: input.providerAccountId,\n providerProfileId: input.providerProfileId,\n scopes: input.scopes,\n config: input.config,\n metadata: input.metadata,\n },\n options,\n )\n },\n getConnection(clientName, connectionId, options) {\n return call(\n 'GET',\n withPathParam(\n withPathParam(\n '/admin/billing/clients/{client_name}/connections/{connection_id}',\n 'client_name',\n clientName,\n ),\n 'connection_id',\n connectionId,\n ),\n undefined,\n options,\n )\n },\n updateConnection(clientName, connectionId, input, options) {\n return call(\n 'PATCH',\n withPathParam(\n withPathParam(\n '/admin/billing/clients/{client_name}/connections/{connection_id}',\n 'client_name',\n clientName,\n ),\n 'connection_id',\n connectionId,\n ),\n input,\n options,\n )\n },\n deleteConnection(clientName, connectionId, options) {\n return call(\n 'DELETE',\n withPathParam(\n withPathParam(\n '/admin/billing/clients/{client_name}/connections/{connection_id}',\n 'client_name',\n clientName,\n ),\n 'connection_id',\n connectionId,\n ),\n undefined,\n options,\n )\n },\n reconcileDocument(clientName, connectionId, input, options) {\n return call(\n 'POST',\n withPathParam(\n withPathParam(\n '/admin/billing/clients/{client_name}/connections/{connection_id}/reconcile',\n 'client_name',\n clientName,\n ),\n 'connection_id',\n connectionId,\n ),\n {\n resourceKind: input.resourceKind,\n resourceId: input.resourceId,\n customerId: input.customerId,\n },\n options,\n )\n },\n listWebhookEvents(clientName, options) {\n return call(\n 'GET',\n withPathParam(\n '/admin/billing/clients/{client_name}/webhook-events',\n 'client_name',\n clientName,\n ),\n undefined,\n options,\n )\n },\n provisionWebhookSinks(clientName, input, options) {\n return call(\n 'POST',\n appendQuery(\n withPathParam(\n '/admin/billing/clients/{client_name}/webhook-sinks/provision',\n 'client_name',\n clientName,\n ),\n {\n targetSchema: input?.targetSchema,\n instance: input?.instance,\n },\n ),\n {},\n options,\n )\n },\n listGrants(options) {\n return call('GET', '/admin/billing/grants', undefined, options)\n },\n listProviders(options) {\n return call('GET', '/admin/billing/providers', undefined, options)\n },\n listSinkHelpers(query, options) {\n return call(\n 'GET',\n appendQuery('/admin/webhook-sinks/helpers/billing', {\n targetSchema: query?.targetSchema,\n instance: query?.instance,\n }),\n undefined,\n options,\n )\n },\n ingestProviderWebhook(input, options) {\n const path = withPathParam(\n withPathParam(\n withPathParam(\n '/billing/providers/{provider}/clients/{client_name}/connections/{connection_id}/webhook',\n 'provider',\n input.provider,\n ),\n 'client_name',\n input.clientName,\n ),\n 'connection_id',\n input.connectionId,\n )\n return call('POST', path, input.body, {\n ...options,\n headers: {\n ...(options?.headers ?? {}),\n ...(input.signatureHeaders ?? {}),\n },\n })\n },\n getDebugBilling(jwtSecret, options) {\n return call(\n 'GET',\n appendQuery('/debug/billing', { jwt_secret: jwtSecret }),\n undefined,\n options,\n 'text',\n )\n },\n }\n}\n","{\n \"consumers\": [\n \"openapi.yaml\",\n \"openapi.json\",\n \"packages/athena-js billingSdkManifest\",\n \"tests/billing_contract_spine.rs\"\n ],\n \"description\": \"Live Athena billing HTTP surface. Owned by athena_billing::live_http_routes (Rust). Export with: cargo run -p athena-billing --bin billing-contract-spine -- --write\",\n \"domain\": \"billing\",\n \"routes\": [\n {\n \"method\": \"GET\",\n \"path\": \"/admin/billing/clients/{client_name}/connections\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/admin/billing/clients/{client_name}/connections\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"DELETE\",\n \"path\": \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"PATCH\",\n \"path\": \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/admin/billing/clients/{client_name}/connections/{connection_id}/reconcile\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/admin/billing/clients/{client_name}/webhook-events\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/admin/billing/clients/{client_name}/webhook-sinks/provision\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/admin/billing/grants\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/admin/billing/providers\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/admin/webhook-sinks/helpers/billing\",\n \"surface\": \"admin\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/providers/{provider}/clients/{client_name}/connections/{connection_id}/webhook\",\n \"surface\": \"providerWebhook\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/capabilities\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/checkouts\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/products\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/prices\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/customers\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/customers\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"DELETE\",\n \"path\": \"/billing/v1/customers/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/customers/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"PATCH\",\n \"path\": \"/billing/v1/customers/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/invoices\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/invoices/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/payment-links\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/payment-links\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"DELETE\",\n \"path\": \"/billing/v1/payment-links/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/payment-links/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"PATCH\",\n \"path\": \"/billing/v1/payment-links/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/payments\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/payments\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/payments/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/payments/{id}/cancel\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/refunds\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/refunds\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/refunds/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/refunds/{id}/cancel\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/subscriptions\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/subscriptions\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/subscriptions/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"PATCH\",\n \"path\": \"/billing/v1/subscriptions/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/subscriptions/{id}/cancel\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/webhooks\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/webhooks\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"DELETE\",\n \"path\": \"/billing/v1/webhooks/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/billing/v1/webhooks/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"PATCH\",\n \"path\": \"/billing/v1/webhooks/{id}\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"POST\",\n \"path\": \"/billing/v1/webhooks/{id}/test\",\n \"surface\": \"billingV1\"\n },\n {\n \"method\": \"GET\",\n \"path\": \"/debug/billing\",\n \"surface\": \"debug\"\n }\n ],\n \"schemaVersion\": 1,\n \"sourceOfTruth\": \"crates/athena-billing/src/live_http_routes.rs\",\n \"sources\": [\n \"src/api/billing.rs\",\n \"src/api/billing_v1/**\",\n \"src/api/debug/billing.rs\"\n ]\n}\n"]}
|