@xylex-group/athena 3.3.0 → 3.5.1
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 +17 -1
- package/dist/{athena-request-headers-Lr_m8xCV.d.cts → athena-request-headers-BnFN2mbd.d.cts} +1 -1
- package/dist/{athena-request-headers-DzimbvOA.d.ts → athena-request-headers-Dwdkq2WR.d.ts} +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 +3064 -163
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.cts +10 -10
- package/dist/browser.d.ts +10 -10
- package/dist/browser.js +3064 -163
- package/dist/browser.js.map +1 -1
- package/dist/cli/index.cjs +2990 -83
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.cts +4 -4
- package/dist/cli/index.d.ts +4 -4
- package/dist/cli/index.js +2990 -83
- package/dist/cli/index.js.map +1 -1
- package/dist/cloudflare.cjs +12914 -0
- package/dist/cloudflare.cjs.map +1 -0
- package/dist/cloudflare.d.cts +368 -0
- package/dist/cloudflare.d.ts +368 -0
- package/dist/cloudflare.js +12885 -0
- package/dist/cloudflare.js.map +1 -0
- package/dist/cookies.cjs +4 -3
- package/dist/cookies.cjs.map +1 -1
- package/dist/cookies.js +4 -3
- package/dist/cookies.js.map +1 -1
- package/dist/env.cjs +1 -1
- package/dist/env.cjs.map +1 -1
- package/dist/env.js +1 -1
- package/dist/env.js.map +1 -1
- package/dist/index.cjs +2989 -86
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -10
- package/dist/index.d.ts +10 -10
- package/dist/index.js +2989 -87
- package/dist/index.js.map +1 -1
- package/dist/{model-form-3Gr8rkdT.d.cts → model-form-D0ykVVOs.d.cts} +3 -3
- package/dist/{model-form-CotpEL7z.d.ts → model-form-U8NVtfSA.d.ts} +3 -3
- package/dist/{module-CQmOaDzP.d.cts → module-CMWlJ1z3.d.cts} +4 -4
- package/dist/{module-CWkUTcUc.d.ts → module-CZ-wPcf2.d.ts} +4 -4
- package/dist/next/client.cjs +3025 -125
- package/dist/next/client.cjs.map +1 -1
- package/dist/next/client.d.cts +4 -4
- package/dist/next/client.d.ts +4 -4
- package/dist/next/client.js +3025 -125
- package/dist/next/client.js.map +1 -1
- package/dist/next/server.cjs +3108 -194
- package/dist/next/server.cjs.map +1 -1
- package/dist/next/server.d.cts +22 -9
- package/dist/next/server.d.ts +22 -9
- package/dist/next/server.js +3108 -194
- package/dist/next/server.js.map +1 -1
- package/dist/{pipeline-BnRKO_Pd.d.cts → pipeline-BCpb4BX1.d.cts} +1 -1
- package/dist/{pipeline-sWCmlFqu.d.ts → pipeline-CgmXwMeX.d.ts} +1 -1
- package/dist/react.cjs +1 -1
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +6 -6
- package/dist/react.d.ts +6 -6
- package/dist/react.js +1 -1
- package/dist/react.js.map +1 -1
- package/dist/{schema-handlers-VjFDhIMw.d.ts → schema-handlers-CvWqF-dW.d.ts} +1 -1
- package/dist/{schema-handlers-BtT_IQFi.d.cts → schema-handlers-Dr8h9Jg-.d.cts} +1 -1
- package/dist/social-providers.cjs +1 -1
- package/dist/social-providers.cjs.map +1 -1
- package/dist/social-providers.js +1 -1
- package/dist/social-providers.js.map +1 -1
- package/dist/{types-Bltx6iL6.d.cts → types-B2RZPivM.d.cts} +8 -1
- package/dist/{types-Bltx6iL6.d.ts → types-B2RZPivM.d.ts} +8 -1
- package/dist/{types-BDX8zS7w.d.ts → types-BKklrX4J.d.ts} +2 -2
- package/dist/{types-CgCv5o6R.d.cts → types-D5dj1v5Z.d.cts} +1 -1
- package/dist/{types-D-Am7YSd.d.cts → types-DqBFwfhn.d.cts} +2 -2
- package/dist/{types-B75PdABb.d.ts → types-S-bTMPiM.d.ts} +1 -1
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +2 -2
- package/dist/utils.d.ts +2 -2
- package/dist/utils.js.map +1 -1
- package/dist/{v3-client-G1SLeHRa.d.cts → v3-client-DP-qg82X.d.cts} +300 -4
- package/dist/{v3-client-ao8BWQ8v.d.ts → v3-client-OAai_JNs.d.ts} +300 -4
- package/package.json +10 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cloudflare/capabilities.ts","../src/cloudflare/d1/runner.ts","../src/sql-identifiers.ts","../src/cloudflare/d1/sql.ts","../src/cloudflare/d1/sql-rewrite.ts","../src/gateway/errors.ts","../src/cloudflare/types.ts","../src/cloudflare/d1/transport.ts","../src/cloudflare/r2/storage.ts","../src/auxiliaries.ts","../src/client-result.ts","../src/gateway/structured-select.ts","../src/query-ast.ts","../src/query-transport.ts","../src/client-sql.ts","../src/gateway/url.ts","../package.json","../src/sdk-version.ts","../src/cookies/cookie-utils.ts","../src/cookies/index.ts","../src/utils/athena-request-headers.ts","../src/client-request.ts","../src/gateway/client.ts","../src/auth/limits.ts","../src/auth/react-email.ts","../src/auth/client.ts","../src/storage/direct-upload.ts","../src/storage/file.ts","../src/storage/backup.ts","../src/storage/module.ts","../src/chat/module.ts","../src/query-debug-ast.ts","../src/query-tracing.ts","../src/schema/model-target.ts","../src/client.ts","../src/config/errors.ts","../src/cloudflare/execution-mode.ts","../src/billing/module.ts","../src/context/merge.ts","../src/diagnostics.ts","../src/v3-client.ts","../src/cloudflare/edge-client.ts","../src/cloudflare/runtime.ts"],"names":["sum","j","rows","aliasIdentifier","baseIdentifier","RESPONSE_ALIAS_PATTERN","SQL_ALIAS_PATTERN","clause","parts","assignments","isIdentChar","hasPaginationBounds","i","depth","inSingle","inDouble","inBacktick","inBracket","mapped","message","kind","isRecord","firstNonEmptyString","request","parsed","SDK_NAME","resolveStructuredErrorPayload","SDK_HEADER_VALUE","parseResponseBody","resolveRequestId","resolveErrorMessage","buildHeaders","token","sessions","parseXhrHeaders","headerValue","appendQuery","resolveErrorHint","isBlobBody","callAthena","stringifyFilterValue","filterMethods","withPathParam","readProcessEnv","normalizeOptional","isD1Binding"],"mappings":"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","file":"cloudflare.js","sourcesContent":["import type { AthenaClientCapabilities } from './types.ts'\n\nexport function createGatewayCapabilities(options?: {\n engine?: AthenaClientCapabilities['db']['engine']\n authRemote?: boolean\n /** When false/undefined, storage flags match an unconfigured storage namespace. */\n storageConfigured?: boolean\n storageCatalogs?: boolean\n storageBackups?: boolean\n}): AthenaClientCapabilities {\n const storageConfigured = options?.storageConfigured ?? true\n return {\n mode: 'gateway',\n db: {\n engine: options?.engine ?? 'postgresql',\n local: false,\n layers: {\n query: true,\n flatCrud: true,\n findManyAst: true,\n rpc: true,\n relations: true,\n },\n },\n storage: {\n local: false,\n objects: storageConfigured,\n catalogs: storageConfigured ? (options?.storageCatalogs ?? true) : false,\n backups: storageConfigured ? (options?.storageBackups ?? true) : false,\n },\n auth: {\n remote: options?.authRemote ?? true,\n },\n }\n}\n\nexport function createCloudflareEdgeCapabilities(options: {\n hasR2: boolean\n /** Hybrid remote Athena root enables remote object storage without an R2 binding. */\n hasRemoteStorage?: boolean\n authRemote: boolean\n findManyAst?: boolean\n}): AthenaClientCapabilities {\n const hasObjects = options.hasR2 || Boolean(options.hasRemoteStorage)\n return {\n mode: 'cloudflare-edge',\n db: {\n engine: 'cloudflare-d1',\n local: true,\n layers: {\n query: true,\n flatCrud: true,\n findManyAst: options.findManyAst ?? false,\n rpc: false,\n relations: false,\n },\n },\n storage: {\n // Local objects only when an R2 binding is present.\n local: options.hasR2,\n // Remote hybrid root can still expose storage.objects via the HTTP API.\n objects: hasObjects,\n catalogs: false,\n backups: false,\n },\n auth: {\n remote: options.authRemote,\n },\n }\n}\n","/**\n * Pure D1 execution helpers shared by edge-local SDK transport and (later)\n * apps/cloudflare-d1-proxy.\n */\n\nimport type {\n D1DatabaseLike,\n D1ExecResultLike,\n D1ResultLike,\n D1SessionLike,\n} from '../types.ts'\n\nexport type D1RunnerSessionInput = {\n bookmark?: string | null\n sessionMode?: string | null\n}\n\nexport type D1QueryInput = D1RunnerSessionInput & {\n query: string\n params?: unknown[]\n}\n\nexport type D1BatchStatementInput = {\n query: string\n params?: unknown[]\n}\n\nexport type D1BatchInput = D1RunnerSessionInput & {\n statements: D1BatchStatementInput[]\n}\n\nexport type D1RunnerQuerySuccess = {\n ok: true\n rows: unknown[]\n columns: string[]\n durationMs?: number\n count: number\n bookmark: string | null\n meta: Record<string, unknown>\n statementCount?: number\n}\n\nexport type D1RunnerQueryFailure = {\n ok: false\n error: string\n message: string\n}\n\nexport type D1RunnerQueryResult = D1RunnerQuerySuccess | D1RunnerQueryFailure\n\nexport type D1RunnerBatchSuccess = {\n ok: true\n results: D1ResultLike<unknown>[]\n bookmark: string | null\n}\n\nexport type D1RunnerBatchResult = D1RunnerBatchSuccess | D1RunnerQueryFailure\n\nfunction resultColumns(rows: unknown[]): string[] {\n const first = rows.find(value => value && typeof value === 'object' && !Array.isArray(value))\n if (!first) return []\n return Object.keys(first as Record<string, unknown>)\n}\n\nfunction isIdentChar(ch: string | undefined): boolean {\n if (!ch) return false\n return /[A-Za-z0-9_]/.test(ch)\n}\n\n/**\n * Scan SQL while tracking string/identifier literals and comments.\n * Invokes `onKeyword` for each bare identifier token outside those regions.\n * Return true from the callback to stop early.\n */\nfunction scanSqlKeywordsOutsideLiterals(\n sql: string,\n onKeyword: (keyword: string, index: number) => boolean | void,\n): void {\n let inSingle = false\n let inDouble = false\n let inBacktick = false\n let inBracket = false\n let inLineComment = false\n let inBlockComment = false\n\n for (let i = 0; i < sql.length; i += 1) {\n const ch = sql[i]!\n const next = sql[i + 1]\n\n if (inLineComment) {\n if (ch === '\\n' || ch === '\\r') inLineComment = false\n continue\n }\n if (inBlockComment) {\n if (ch === '*' && next === '/') {\n i += 1\n inBlockComment = false\n }\n continue\n }\n if (inSingle) {\n if (ch === \"'\" && next === \"'\") {\n i += 1\n continue\n }\n if (ch === \"'\") inSingle = false\n continue\n }\n if (inDouble) {\n if (ch === '\"' && next === '\"') {\n i += 1\n continue\n }\n if (ch === '\"') inDouble = false\n continue\n }\n if (inBacktick) {\n if (ch === '`' && next === '`') {\n i += 1\n continue\n }\n if (ch === '`') inBacktick = false\n continue\n }\n if (inBracket) {\n if (ch === ']') inBracket = false\n continue\n }\n\n if (ch === '-' && next === '-') {\n inLineComment = true\n i += 1\n continue\n }\n if (ch === '/' && next === '*') {\n inBlockComment = true\n i += 1\n continue\n }\n if (ch === \"'\") {\n inSingle = true\n continue\n }\n if (ch === '\"') {\n inDouble = true\n continue\n }\n if (ch === '`') {\n inBacktick = true\n continue\n }\n if (ch === '[') {\n inBracket = true\n continue\n }\n\n if (!isIdentChar(ch) || isIdentChar(sql[i - 1])) {\n continue\n }\n\n let end = i + 1\n while (end < sql.length && isIdentChar(sql[end])) {\n end += 1\n }\n const keyword = sql.slice(i, end)\n if (onKeyword(keyword, i)) {\n return\n }\n i = end - 1\n }\n}\n\n/**\n * True when `keyword` appears as a SQL keyword outside string/identifier literals\n * and comments (case-insensitive). Used so `RETURNING` inside string values does\n * not force the all() result path.\n */\nexport function sqlContainsKeywordOutsideLiterals(sql: string, keyword: string): boolean {\n const target = keyword.toUpperCase()\n let found = false\n scanSqlKeywordsOutsideLiterals(sql, token => {\n if (token.toUpperCase() === target) {\n found = true\n return true\n }\n return false\n })\n return found\n}\n\n/**\n * First bare SQL keyword outside leading comments / whitespace / literals.\n * Used so `-- note\\nSELECT …` still classifies as row-producing.\n */\nexport function sqlFirstKeywordOutsideLiterals(sql: string): string | null {\n let first: string | null = null\n scanSqlKeywordsOutsideLiterals(sql, token => {\n first = token\n return true\n })\n return first\n}\n\n// VALUES is a row-producing statement in SQLite (not a mutation); WITH … VALUES too.\nconst ROW_PRODUCING_LEAD_KEYWORDS = new Set(['SELECT', 'PRAGMA', 'EXPLAIN', 'VALUES'])\nconst MUTATION_LEAD_KEYWORDS = new Set(['INSERT', 'UPDATE', 'DELETE', 'REPLACE'])\n/** Keywords that open the statement body after a WITH cte-list (SQLite). */\nconst WITH_TERMINAL_KEYWORDS = new Set([\n 'SELECT',\n 'INSERT',\n 'UPDATE',\n 'DELETE',\n 'REPLACE',\n 'VALUES',\n 'PRAGMA',\n 'EXPLAIN',\n])\n\n/**\n * After a leading `WITH`, find the main statement keyword (SELECT/UPDATE/…)\n * at paren depth 0, skipping CTE bodies. Nested SELECTs inside `AS (…)` are ignored.\n */\nexport function sqlTerminalKeywordAfterWith(sql: string): string | null {\n let inSingle = false\n let inDouble = false\n let inBacktick = false\n let inBracket = false\n let inLineComment = false\n let inBlockComment = false\n let depth = 0\n let sawWith = false\n\n for (let i = 0; i < sql.length; i += 1) {\n const ch = sql[i]!\n const next = sql[i + 1]\n\n if (inLineComment) {\n if (ch === '\\n' || ch === '\\r') inLineComment = false\n continue\n }\n if (inBlockComment) {\n if (ch === '*' && next === '/') {\n i += 1\n inBlockComment = false\n }\n continue\n }\n if (inSingle) {\n if (ch === \"'\" && next === \"'\") {\n i += 1\n continue\n }\n if (ch === \"'\") inSingle = false\n continue\n }\n if (inDouble) {\n if (ch === '\"' && next === '\"') {\n i += 1\n continue\n }\n if (ch === '\"') inDouble = false\n continue\n }\n if (inBacktick) {\n if (ch === '`' && next === '`') {\n i += 1\n continue\n }\n if (ch === '`') inBacktick = false\n continue\n }\n if (inBracket) {\n if (ch === ']') inBracket = false\n continue\n }\n\n if (ch === '-' && next === '-') {\n inLineComment = true\n i += 1\n continue\n }\n if (ch === '/' && next === '*') {\n inBlockComment = true\n i += 1\n continue\n }\n if (ch === \"'\") {\n inSingle = true\n continue\n }\n if (ch === '\"') {\n inDouble = true\n continue\n }\n if (ch === '`') {\n inBacktick = true\n continue\n }\n if (ch === '[') {\n inBracket = true\n continue\n }\n\n if (ch === '(') {\n depth += 1\n continue\n }\n if (ch === ')') {\n if (depth > 0) depth -= 1\n continue\n }\n\n if (depth !== 0 || !isIdentChar(ch) || isIdentChar(sql[i - 1])) {\n continue\n }\n\n let end = i + 1\n while (end < sql.length && isIdentChar(sql[end])) {\n end += 1\n }\n const keyword = sql.slice(i, end)\n const upper = keyword.toUpperCase()\n\n if (!sawWith) {\n if (upper === 'WITH') {\n sawWith = true\n }\n i = end - 1\n continue\n }\n\n // Inside WITH cte-list at depth 0: RECURSIVE / names / AS / MATERIALIZED …\n // Terminal main statement is the first recognized opener after CTE bodies.\n if (WITH_TERMINAL_KEYWORDS.has(upper)) {\n return keyword\n }\n i = end - 1\n }\n return null\n}\n\n/**\n * Lead keyword used for all()/run() classification. For `WITH …`, returns the\n * terminal statement keyword so CTE mutations are not treated as SELECT.\n */\nexport function sqlLeadStatementKeyword(sql: string): string | null {\n const first = sqlFirstKeywordOutsideLiterals(sql)\n if (!first) return null\n if (first.toUpperCase() !== 'WITH') return first\n return sqlTerminalKeywordAfterWith(sql) ?? first\n}\n\n/**\n * Whether a prepared statement is expected to return a result set via all().\n * Leading comments, CTE terminal statements, and RETURNING (outside literals)\n * are handled.\n */\nexport function statementExpectsResultRows(sql: string): boolean {\n const lead = sqlLeadStatementKeyword(sql)\n if (lead) {\n const upper = lead.toUpperCase()\n if (ROW_PRODUCING_LEAD_KEYWORDS.has(upper)) {\n return true\n }\n // WITH … UPDATE/INSERT/DELETE without RETURNING → metadata path (run()).\n if (MUTATION_LEAD_KEYWORDS.has(upper)) {\n return sqlContainsKeywordOutsideLiterals(sql, 'RETURNING')\n }\n // Unrecognized lead after WITH: fall through to RETURNING check.\n }\n return sqlContainsKeywordOutsideLiterals(sql, 'RETURNING')\n}\n\n/** Flatten D1 batch statement results into a single row array for client.query. */\nfunction collectRowsFromBatchResults(results: D1ResultLike<unknown>[]): unknown[] {\n const rows: unknown[] = []\n for (const item of results) {\n if (Array.isArray(item.results) && item.results.length > 0) {\n rows.push(...item.results)\n }\n }\n return rows\n}\n\n/** Sum D1 `meta.changes` across batch items; fall back to statement count. */\nfunction sumBatchAffectedRows(results: D1ResultLike<unknown>[], statementCount: number): number {\n let sum = 0\n let sawChanges = false\n for (const item of results) {\n const changes = item.meta?.changes\n if (typeof changes === 'number') {\n sum += changes\n sawChanges = true\n }\n }\n return sawChanges ? sum : statementCount\n}\n\n/** Word-boundary keyword match at `index` (ASCII identifiers / SQL keywords). */\nfunction matchSqlKeywordAt(query: string, index: number, keyword: string): number | null {\n const len = keyword.length\n if (index + len > query.length) {\n return null\n }\n const slice = query.slice(index, index + len)\n if (slice.toLowerCase() !== keyword.toLowerCase()) {\n return null\n }\n const before = index === 0 ? '' : query[index - 1]!\n const after = index + len >= query.length ? '' : query[index + len]!\n const isIdent = (c: string) => /[A-Za-z0-9_]/.test(c)\n if (before && isIdent(before)) {\n return null\n }\n if (after && isIdent(after)) {\n return null\n }\n return len\n}\n\n/**\n * Split SQL into statements without treating `;` inside string literals,\n * quoted identifiers, comments, or SQLite trigger bodies as separators.\n *\n * Trigger DDL (`CREATE TRIGGER ... BEGIN ...; ...; END`) keeps the body as one\n * statement. Nested `CASE ... END` inside the body does not close the trigger.\n * Bare transaction `BEGIN` / `BEGIN TRANSACTION` is not treated as a body opener.\n */\nexport function splitSqlStatements(query: string): string[] {\n const statements: string[] = []\n let inSingle = false\n let inDouble = false\n let inBacktick = false\n let inBracket = false\n let inLineComment = false\n let inBlockComment = false\n let segmentStart = 0\n let segmentHasContent = false\n\n /** After `CREATE TRIGGER`, wait for the body-opening `BEGIN`. */\n let awaitTriggerBegin = false\n /** Depth of open `CREATE TRIGGER ... BEGIN` bodies (normally 0 or 1). */\n let triggerBodyDepth = 0\n /** Nested `CASE` expressions so their `END` does not close a trigger body. */\n let caseDepth = 0\n\n const flushSegment = (end: number) => {\n if (!segmentHasContent) {\n segmentStart = end + 1\n return\n }\n const sql = query.slice(segmentStart, end).trim()\n if (sql) {\n statements.push(sql)\n }\n segmentHasContent = false\n segmentStart = end + 1\n awaitTriggerBegin = false\n triggerBodyDepth = 0\n caseDepth = 0\n }\n\n for (let i = 0; i < query.length; i += 1) {\n const ch = query[i]!\n const next = query[i + 1]\n\n if (inLineComment) {\n if (ch === '\\n' || ch === '\\r') {\n inLineComment = false\n }\n continue\n }\n\n if (inBlockComment) {\n if (ch === '*' && next === '/') {\n inBlockComment = false\n i += 1\n }\n continue\n }\n\n if (inSingle) {\n if (ch === \"'\" && next === \"'\") {\n i += 1\n continue\n }\n if (ch === \"'\") {\n inSingle = false\n }\n continue\n }\n\n if (inDouble) {\n if (ch === '\"' && next === '\"') {\n i += 1\n continue\n }\n if (ch === '\"') {\n inDouble = false\n }\n continue\n }\n\n // SQLite also allows `backtick` and [bracket] identifiers.\n if (inBacktick) {\n if (ch === '`' && next === '`') {\n i += 1\n continue\n }\n if (ch === '`') {\n inBacktick = false\n }\n continue\n }\n\n if (inBracket) {\n if (ch === ']') {\n inBracket = false\n }\n continue\n }\n\n if (ch === '-' && next === '-') {\n inLineComment = true\n i += 1\n continue\n }\n\n if (ch === '/' && next === '*') {\n inBlockComment = true\n i += 1\n continue\n }\n\n if (ch === \"'\") {\n inSingle = true\n segmentHasContent = true\n continue\n }\n\n if (ch === '\"') {\n inDouble = true\n segmentHasContent = true\n continue\n }\n\n if (ch === '`') {\n inBacktick = true\n segmentHasContent = true\n continue\n }\n\n if (ch === '[') {\n inBracket = true\n segmentHasContent = true\n continue\n }\n\n // Structural keywords that affect statement boundaries (trigger bodies / CASE).\n if (/[A-Za-z_]/.test(ch)) {\n const createLen = matchSqlKeywordAt(query, i, 'CREATE')\n if (createLen != null) {\n // CREATE [TEMP|TEMPORARY] TRIGGER [IF NOT EXISTS] …\n // SQLite allows whitespace and comments between these keywords.\n let j = i + createLen\n const skipWsAndComments = () => {\n while (j < query.length) {\n const c = query[j]!\n const n = query[j + 1]\n if (/\\s/.test(c)) {\n j += 1\n continue\n }\n if (c === '-' && n === '-') {\n j += 2\n while (j < query.length && query[j] !== '\\n' && query[j] !== '\\r') {\n j += 1\n }\n continue\n }\n if (c === '/' && n === '*') {\n j += 2\n while (j < query.length) {\n if (query[j] === '*' && query[j + 1] === '/') {\n j += 2\n break\n }\n j += 1\n }\n continue\n }\n break\n }\n }\n skipWsAndComments()\n const tempLen =\n matchSqlKeywordAt(query, j, 'TEMPORARY') ?? matchSqlKeywordAt(query, j, 'TEMP')\n if (tempLen != null) {\n j += tempLen\n skipWsAndComments()\n }\n const triggerLen = matchSqlKeywordAt(query, j, 'TRIGGER')\n if (triggerLen != null) {\n awaitTriggerBegin = true\n segmentHasContent = true\n i += createLen - 1\n continue\n }\n segmentHasContent = true\n i += createLen - 1\n continue\n }\n\n const caseLen = matchSqlKeywordAt(query, i, 'CASE')\n if (caseLen != null) {\n caseDepth += 1\n segmentHasContent = true\n i += caseLen - 1\n continue\n }\n\n const beginLen = matchSqlKeywordAt(query, i, 'BEGIN')\n if (beginLen != null) {\n if (awaitTriggerBegin) {\n triggerBodyDepth += 1\n awaitTriggerBegin = false\n }\n segmentHasContent = true\n i += beginLen - 1\n continue\n }\n\n const endLen = matchSqlKeywordAt(query, i, 'END')\n if (endLen != null) {\n if (caseDepth > 0) {\n caseDepth -= 1\n } else if (triggerBodyDepth > 0) {\n triggerBodyDepth -= 1\n }\n segmentHasContent = true\n i += endLen - 1\n continue\n }\n\n // Consume the rest of this identifier so we do not re-scan mid-token.\n let j = i + 1\n while (j < query.length && /[A-Za-z0-9_]/.test(query[j]!)) {\n j += 1\n }\n segmentHasContent = true\n i = j - 1\n continue\n }\n\n if (ch === ';') {\n // Keep trigger bodies (and any nested CASE) as a single statement.\n if (triggerBodyDepth > 0 || caseDepth > 0) {\n segmentHasContent = true\n continue\n }\n flushSegment(i)\n continue\n }\n\n if (!/\\s/.test(ch)) {\n segmentHasContent = true\n }\n }\n\n flushSegment(query.length)\n return statements\n}\n\n/**\n * Detect multiple SQL statements without treating `;` inside string literals,\n * quoted identifiers, comments, or trigger bodies as separators.\n */\nexport function isMultiStatement(query: string): boolean {\n return splitSqlStatements(query).length > 1\n}\n\nfunction resolveSessionTarget(\n db: D1DatabaseLike,\n input: D1RunnerSessionInput,\n): { target: D1DatabaseLike | D1SessionLike; session: D1SessionLike | null } {\n const sessionValue = input.bookmark?.trim() || input.sessionMode?.trim()\n if (!sessionValue) {\n return { target: db, session: null }\n }\n if (typeof db.withSession !== 'function') {\n throw new Error('D1 session mode/bookmark requested but withSession is not available')\n }\n const session = db.withSession(sessionValue)\n return { target: session, session }\n}\n\n/**\n * D1 prepared-statement bind rejects JS booleans (parameter-type error).\n * Map true→1 / false→0 so .eq('pending', true) and insert bodies work.\n */\nfunction normalizeD1BindParams(params: unknown[]): unknown[] {\n return params.map(value => {\n if (typeof value === 'boolean') {\n return value ? 1 : 0\n }\n return value\n })\n}\n\n/**\n * Execute a single query (or multi-statement `exec`) against a D1 binding.\n */\nexport async function executeD1Query(\n db: D1DatabaseLike,\n input: D1QueryInput,\n): Promise<D1RunnerQueryResult> {\n const query = input.query?.trim()\n if (!query) {\n return { ok: false, error: 'invalid_query', message: 'query is required' }\n }\n\n const params = normalizeD1BindParams(Array.isArray(input.params) ? input.params : [])\n const { target, session } = resolveSessionTarget(db, input)\n\n if (isMultiStatement(query)) {\n if (params.length > 0) {\n return {\n ok: false,\n error: 'invalid_query',\n message: 'params are only supported for single prepared statements',\n }\n }\n const resolveBookmark = (): string | null => session?.getBookmark() ?? null\n const parts = splitSqlStatements(query)\n // Prefer batch over exec so row-producing statements (SELECT …) surface\n // results — D1 exec() only returns statement counts, not result sets.\n // Sessions also lack exec(); batch(prepare) works on both targets.\n if (typeof target.batch === 'function') {\n const prepared = parts.map(part => target.prepare(part))\n const results = await target.batch(prepared)\n const rows = collectRowsFromBatchResults(results)\n return {\n ok: true,\n rows,\n columns: resultColumns(rows),\n // Prefer returned rows; otherwise sum mutation meta.changes (not statement count).\n count: rows.length > 0 ? rows.length : sumBatchAffectedRows(results, parts.length),\n bookmark: resolveBookmark(),\n meta: { statementCount: parts.length, results },\n statementCount: parts.length,\n }\n }\n const canExec = typeof (target as D1DatabaseLike).exec === 'function' && !session\n if (canExec) {\n const execResult: D1ExecResultLike = await (target as D1DatabaseLike).exec!(query)\n return {\n ok: true,\n rows: [],\n columns: [],\n durationMs: execResult.duration,\n count: execResult.count,\n bookmark: resolveBookmark(),\n meta: { statementCount: execResult.count },\n statementCount: execResult.count,\n }\n }\n return {\n ok: false,\n error: 'invalid_query',\n message: 'multi-statement query requires D1 batch() or exec() support',\n }\n }\n\n let statement = target.prepare(query)\n if (params.length > 0) {\n statement = statement.bind(...params)\n }\n\n // Prefer .all() when the statement returns rows. Real D1 bindings only expose\n // RETURNING result sets via all()/first() — run() is metadata-oriented and can\n // yield empty results for INSERT/UPDATE/DELETE … RETURNING.\n // Skip leading comments and detect RETURNING only outside literals/comments.\n const expectsRows = statementExpectsResultRows(query)\n const result = expectsRows ? await statement.all() : await statement.run()\n if (result.success === false) {\n const errorField = (result as { error?: unknown }).error\n const message =\n typeof errorField === 'string' && errorField.trim()\n ? errorField\n : 'D1 query failed'\n return {\n ok: false,\n error: 'query_failed',\n message,\n }\n }\n const rows = Array.isArray(result.results) ? result.results : []\n const bookmark = session?.getBookmark() ?? null\n const meta = (result.meta ?? {}) as Record<string, unknown>\n const changes =\n typeof meta.changes === 'number'\n ? meta.changes\n : typeof result.meta?.changes === 'number'\n ? result.meta.changes\n : undefined\n\n return {\n ok: true,\n rows,\n columns: resultColumns(rows),\n durationMs: typeof result.meta?.duration === 'number' ? result.meta.duration : undefined,\n count: expectsRows ? rows.length : (changes ?? rows.length),\n bookmark,\n meta,\n }\n}\n\n/**\n * Execute a batch of prepared statements against a D1 binding.\n */\nexport async function executeD1Batch(\n db: D1DatabaseLike,\n input: D1BatchInput,\n): Promise<D1RunnerBatchResult> {\n const statements = Array.isArray(input.statements) ? input.statements : []\n if (statements.length === 0) {\n return {\n ok: false,\n error: 'invalid_batch',\n message: 'statements must contain at least one item',\n }\n }\n\n const { target, session } = resolveSessionTarget(db, input)\n const prepared = statements.map(item => {\n const query = item.query?.trim()\n if (!query) {\n throw new Error('statements[].query is required')\n }\n const params = normalizeD1BindParams(Array.isArray(item.params) ? item.params : [])\n let statement = target.prepare(query)\n if (params.length > 0) {\n statement = statement.bind(...params)\n }\n return statement\n })\n\n const results = await target.batch(prepared)\n const bookmark = session?.getBookmark() ?? null\n return {\n ok: true,\n results,\n bookmark,\n }\n}\n","const SIMPLE_IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/\nconst COMPOSITE_IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$/\nconst SQL_ALIAS_PATTERN = /^([A-Za-z_][A-Za-z0-9_.]*)\\s+(?:as\\s+)?([A-Za-z_][A-Za-z0-9_]*)$/i\nconst RESPONSE_ALIAS_PATTERN = /^([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*([A-Za-z_][A-Za-z0-9_.]*)$/i\n\nfunction quoteIdentifierSegment(identifier: string): string {\n return `\"${identifier.replace(/\"/g, '\"\"')}\"`\n}\n\nfunction parseAliasedIdentifierToken(\n token: string,\n): { baseIdentifier: string; aliasIdentifier: string } | null {\n const responseAliasMatch = RESPONSE_ALIAS_PATTERN.exec(token)\n if (responseAliasMatch) {\n const [, aliasIdentifier, baseIdentifier] = responseAliasMatch\n if (COMPOSITE_IDENTIFIER_PATTERN.test(baseIdentifier) && SIMPLE_IDENTIFIER_PATTERN.test(aliasIdentifier)) {\n return { baseIdentifier, aliasIdentifier }\n }\n }\n\n const sqlAliasMatch = SQL_ALIAS_PATTERN.exec(token)\n if (!sqlAliasMatch) {\n return null\n }\n\n const [, baseIdentifier, aliasIdentifier] = sqlAliasMatch\n if (!COMPOSITE_IDENTIFIER_PATTERN.test(baseIdentifier) || !SIMPLE_IDENTIFIER_PATTERN.test(aliasIdentifier)) {\n return null\n }\n\n return { baseIdentifier, aliasIdentifier }\n}\n\n/**\n * Quotes a `schema.table.column`-style identifier path safely for SQL.\n */\nexport function quoteQualifiedIdentifier(identifier: string): string {\n return identifier\n .split('.')\n .map(segment => quoteIdentifierSegment(segment))\n .join('.')\n}\n\nfunction quoteSelectToken(token: string): string {\n if (token === '*') return token\n if (COMPOSITE_IDENTIFIER_PATTERN.test(token)) {\n return quoteQualifiedIdentifier(token)\n }\n\n const aliasedIdentifier = parseAliasedIdentifierToken(token)\n if (!aliasedIdentifier) {\n return token\n }\n const { baseIdentifier, aliasIdentifier } = aliasedIdentifier\n return `${quoteQualifiedIdentifier(baseIdentifier)} AS ${quoteIdentifierSegment(aliasIdentifier)}`\n}\n\nexport function quoteSelectColumnToken(token: string): string {\n const trimmed = token.trim()\n if (!trimmed || trimmed === '*') return trimmed || '*'\n\n const responseAliasMatch = RESPONSE_ALIAS_PATTERN.exec(trimmed)\n if (responseAliasMatch) {\n const [, aliasIdentifier, baseIdentifier] = responseAliasMatch\n return `${quoteQualifiedIdentifier(baseIdentifier)} AS ${quoteIdentifierSegment(aliasIdentifier)}`\n }\n\n return quoteQualifiedIdentifier(trimmed)\n}\n\nfunction canAutoQuoteToken(token: string): boolean {\n if (token === '*') return true\n if (COMPOSITE_IDENTIFIER_PATTERN.test(token)) return true\n return parseAliasedIdentifierToken(token) != null\n}\n\nfunction splitTopLevelCommaSeparated(input: string): string[] | null {\n const parts: string[] = []\n let buffer = ''\n let singleQuoted = false\n let doubleQuoted = false\n let depth = 0\n\n for (let index = 0; index < input.length; index += 1) {\n const char = input[index]\n const next = index + 1 < input.length ? input[index + 1] : ''\n\n if (singleQuoted) {\n buffer += char\n if (char === \"'\" && next === \"'\") {\n buffer += next\n index += 1\n continue\n }\n if (char === \"'\") {\n singleQuoted = false\n }\n continue\n }\n\n if (doubleQuoted) {\n buffer += char\n if (char === '\"' && next === '\"') {\n buffer += next\n index += 1\n continue\n }\n if (char === '\"') {\n doubleQuoted = false\n }\n continue\n }\n\n if (char === \"'\") {\n singleQuoted = true\n buffer += char\n continue\n }\n if (char === '\"') {\n doubleQuoted = true\n buffer += char\n continue\n }\n\n if (char === '(') {\n depth += 1\n buffer += char\n continue\n }\n if (char === ')') {\n depth -= 1\n if (depth < 0) return null\n buffer += char\n continue\n }\n\n if (char === ',' && depth === 0) {\n parts.push(buffer.trim())\n buffer = ''\n continue\n }\n\n buffer += char\n }\n\n if (singleQuoted || doubleQuoted || depth !== 0) {\n return null\n }\n\n if (buffer.trim().length > 0) {\n parts.push(buffer.trim())\n }\n\n return parts\n}\n\n/**\n * Quotes identifier lists while preserving raw SQL expressions.\n *\n * Examples:\n * - `\"table, user\"` -> `\"\\\"table\\\", \\\"user\\\"\"`\n * - `concat(name, ',') as label, id` -> unchanged\n */\nexport function quoteSelectColumnsExpression(columns: string): string {\n const trimmed = columns.trim()\n if (!trimmed || trimmed === '*') return trimmed || '*'\n\n const tokens = splitTopLevelCommaSeparated(trimmed)\n if (!tokens || tokens.length === 0) {\n return trimmed\n }\n\n if (!tokens.every(canAutoQuoteToken)) {\n return trimmed\n }\n\n return tokens.map(quoteSelectToken).join(', ')\n}\n\n/**\n * Immutable identifier object with consistent SQL rendering.\n */\nexport interface SqlIdentifier {\n readonly segments: string[]\n toSql(): string\n toString(): string\n}\n\nclass SqlIdentifierPath implements SqlIdentifier {\n readonly segments: string[]\n\n constructor(segments: string[]) {\n this.segments = segments\n }\n\n toSql(): string {\n return this.segments.map(quoteIdentifierSegment).join('.')\n }\n\n toString(): string {\n return this.toSql()\n }\n}\n\n/**\n * Creates a quoted identifier object from segment or dotted inputs.\n */\nexport function identifier(...segments: string[]): SqlIdentifier {\n const expandedSegments = segments\n .flatMap(segment => segment.split('.'))\n .map(segment => segment.trim())\n .filter(segment => segment.length > 0)\n\n return new SqlIdentifierPath(expandedSegments)\n}\n\n","/**\n * L1 D1/SQLite SQL compiler for flat gateway payloads.\n * Aligned with gateway D1 matrix: flat select/insert/update/delete + upsert.\n */\n\nimport type {\n AthenaDeletePayload,\n AthenaFetchPayload,\n AthenaGatewayCondition,\n AthenaInsertPayload,\n AthenaJsonObject,\n AthenaJsonValue,\n AthenaSortBy,\n AthenaUpdatePayload,\n} from '../../gateway/types.ts'\nimport { quoteQualifiedIdentifier } from '../../sql-identifiers.ts'\n\nexport type D1CompiledStatement = {\n sql: string\n params: unknown[]\n}\n\n/**\n * One or more statements. Sparse multi-row inserts without NULL-coercion expand\n * into a batch of single-row inserts (SQLite rejects `DEFAULT` in VALUES tuples).\n */\nexport type D1CompiledSql = D1CompiledStatement & {\n statements?: D1CompiledStatement[]\n}\n\nfunction asSingle(sql: string, params: unknown[]): D1CompiledSql {\n return { sql, params }\n}\n\nfunction asBatch(statements: D1CompiledStatement[]): D1CompiledSql {\n if (statements.length === 0) {\n throw new D1SqlCompileError('empty_insert', 'batch requires at least one statement')\n }\n return {\n sql: statements[0]!.sql,\n params: statements[0]!.params,\n statements,\n }\n}\n\nfunction hasPaginationBounds(payload: {\n limit?: number\n offset?: number\n current_page?: number\n page_size?: number\n}): boolean {\n return (\n payload.limit !== undefined ||\n payload.offset !== undefined ||\n payload.page_size !== undefined ||\n payload.current_page !== undefined\n )\n}\n\n/**\n * Ensure mutation pagination actually produces a LIMIT/OFFSET clause.\n * `.currentPage(n)` alone would otherwise look \"bounded\" but emit no limit and\n * update/delete every matching row.\n */\nfunction assertEffectiveMutationBounds(payload: {\n limit?: number\n offset?: number\n current_page?: number\n page_size?: number\n}): void {\n if (payload.current_page !== undefined && payload.page_size === undefined && payload.limit === undefined) {\n throw new D1SqlCompileError(\n 'page_without_size',\n 'current_page requires page_size (or limit) for bounded update/delete on D1 edge-local',\n )\n }\n const clause = limitOffsetClause(payload)\n if (!clause.trim()) {\n throw new D1SqlCompileError(\n 'invalid_pagination_bounds',\n 'Bounded update/delete requires limit, offset, and/or page_size on D1 edge-local',\n )\n }\n}\n\n/**\n * SQLite system row identity aliases. A user column with any of these names\n * shadows the system rowid — bounded mutations would then be unsafe.\n */\nconst SQLITE_ROWID_ALIASES = new Set(['rowid', 'oid', '_rowid_'])\n\n/** Optional compile-time options for D1 SQL compilation. */\nexport type D1CompileOptions = {\n /**\n * Proven single-column unique identity for bounded UPDATE/DELETE (from\n * PRAGMA table_info / unique indexes, or an explicit caller override).\n * Required for limit/offset/page bounded mutations.\n */\n identityColumn?: string\n}\n\nfunction referencedMutationColumns(payload: {\n conditions?: AthenaGatewayCondition[]\n sort_by?: AthenaSortBy\n}): string[] {\n const names: string[] = []\n for (const condition of payload.conditions ?? []) {\n const column = (condition.column ?? condition.eq_column ?? '').trim()\n if (column) names.push(column)\n }\n if (payload.sort_by?.field?.trim()) {\n names.push(payload.sort_by.field.trim())\n }\n return names\n}\n\n/**\n * Choose a safe identity expression for bounded update/delete, or throw.\n *\n * Pure L1 has no live schema: callers (transport) must supply a proven unique\n * `identityColumn` (single-column PK or unique index). Never assume `id`.\n * Reject filters/order that reference shadowable rowid aliases.\n */\nfunction resolveBoundedIdentityColumn(\n payload: {\n conditions?: AthenaGatewayCondition[]\n sort_by?: AthenaSortBy\n },\n options?: D1CompileOptions,\n): string {\n const refs = referencedMutationColumns(payload)\n const lower = refs.map(name => name.toLowerCase())\n\n if (lower.some(name => SQLITE_ROWID_ALIASES.has(name))) {\n throw new D1SqlCompileError(\n 'bounded_mutation_unsafe_identity',\n 'Bounded update/delete cannot use rowid/oid/_rowid_ in filters or order — ' +\n 'those names may be user columns that shadow SQLite row identity. ' +\n 'Resolve the table primary key (or a single-column unique index) instead.',\n )\n }\n\n const identity = options?.identityColumn?.trim()\n if (!identity) {\n throw new D1SqlCompileError(\n 'bounded_mutation_no_unique_identity',\n 'Bounded update/delete requires a proven unique identity column from the table schema ' +\n '(single-column PRIMARY KEY or UNIQUE index). Cannot assume a column named id.',\n )\n }\n if (SQLITE_ROWID_ALIASES.has(identity.toLowerCase())) {\n throw new D1SqlCompileError(\n 'bounded_mutation_unsafe_identity',\n `Bounded update/delete cannot use identity column \"${identity}\" — ` +\n 'it may shadow SQLite row identity.',\n )\n }\n return identity\n}\n\n/**\n * SQLite-compatible bounded mutation via unique-identity subquery.\n * Uses `\"pk\" IN (SELECT \"pk\" … LIMIT …)` — not system `_rowid_`.\n */\nfunction boundedRowidInClause(\n table: string,\n whereSql: string,\n whereParams: unknown[],\n payload: {\n limit?: number\n offset?: number\n current_page?: number\n page_size?: number\n sort_by?: AthenaSortBy\n conditions?: AthenaGatewayCondition[]\n },\n options?: D1CompileOptions,\n): { sql: string; params: unknown[] } {\n assertEffectiveMutationBounds(payload)\n const identity = resolveBoundedIdentityColumn(payload, options)\n const identitySql = quoteIdent(identity)\n const innerWhere = whereSql.replace(/^WHERE\\s+/i, '')\n const parts = [\n `SELECT ${identitySql} FROM ${quoteIdent(table)}`,\n innerWhere ? `WHERE ${innerWhere}` : '',\n orderClause(payload.sort_by),\n limitOffsetClause(payload),\n ].filter(Boolean)\n return {\n sql: `${identitySql} IN (${parts.join(' ')})`,\n params: [...whereParams],\n }\n}\n\nexport class D1SqlCompileError extends Error {\n readonly code: string\n\n constructor(code: string, message: string) {\n super(message)\n this.name = 'D1SqlCompileError'\n this.code = code\n }\n}\n\n/** Simple SQL identifier: letter/underscore start, then alphanumerics/underscore. */\nconst SAFE_IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/\n\nfunction quoteIdent(name: string): string {\n const trimmed = name.trim()\n if (!trimmed) {\n throw new D1SqlCompileError('invalid_identifier', 'Identifier is required')\n }\n if (trimmed.includes('.')) {\n throw new D1SqlCompileError(\n 'schema_qualified_name',\n `Schema-qualified names are unsupported on D1 edge-local: ${trimmed}`,\n )\n }\n // Reject quotes, whitespace, and other characters that would only appear\n // if a caller tried to smuggle SQL past quoting.\n if (!SAFE_IDENTIFIER.test(trimmed)) {\n throw new D1SqlCompileError(\n 'invalid_identifier',\n `Invalid SQL identifier for D1 edge-local: ${trimmed}`,\n )\n }\n return quoteQualifiedIdentifier(trimmed)\n}\n\n/** Response alias form: `user_id:id` → `\"id\" AS \"user_id\"`. */\nconst RESPONSE_ALIAS_PATTERN = /^([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*([A-Za-z_][A-Za-z0-9_]*)$/\n/** SQL alias form: `id as user_id` or `id user_id`. */\nconst SQL_ALIAS_PATTERN = /^([A-Za-z_][A-Za-z0-9_]*)\\s+(?:as\\s+)?([A-Za-z_][A-Za-z0-9_]*)$/i\n\n/**\n * Quote one SELECT/RETURNING token. Only simple identifiers and documented\n * aliases are accepted — raw expressions are rejected to prevent SQL injection\n * from user-controlled column lists (gateway may pass expressions through).\n */\nfunction quoteSelectTokenStrict(token: string): string {\n const trimmed = token.trim()\n if (!trimmed || trimmed === '*') return trimmed || '*'\n\n if (SAFE_IDENTIFIER.test(trimmed)) {\n return quoteQualifiedIdentifier(trimmed)\n }\n\n const responseAlias = RESPONSE_ALIAS_PATTERN.exec(trimmed)\n if (responseAlias) {\n const [, aliasIdentifier, baseIdentifier] = responseAlias\n return `${quoteQualifiedIdentifier(baseIdentifier!)} AS ${quoteQualifiedIdentifier(aliasIdentifier!)}`\n }\n\n const sqlAlias = SQL_ALIAS_PATTERN.exec(trimmed)\n if (sqlAlias) {\n const [, baseIdentifier, aliasIdentifier] = sqlAlias\n return `${quoteQualifiedIdentifier(baseIdentifier!)} AS ${quoteQualifiedIdentifier(aliasIdentifier!)}`\n }\n\n throw new D1SqlCompileError(\n 'unsafe_select',\n `SELECT/RETURNING expressions are not supported on D1 edge-local; use column names or aliases only: ${token}`,\n )\n}\n\n/**\n * SELECT / RETURNING list with documented response aliases (`alias:column`)\n * and SQL-style aliases (`column as alias`). Edge-local only allows identifiers.\n */\nfunction selectClause(columns: string[] | string | undefined): string {\n if (columns === undefined || columns === '*' || columns === '') return '*'\n if (typeof columns === 'string') {\n const trimmed = columns.trim()\n if (!trimmed || trimmed === '*') return '*'\n return trimmed\n .split(',')\n .map(part => quoteSelectTokenStrict(part))\n .join(', ')\n }\n if (columns.length === 0) return '*'\n return columns.map(column => quoteSelectTokenStrict(column)).join(', ')\n}\n\n/** RETURNING is omitted for head-only mutations (metadata / count without row body). */\nfunction wantsReturning(payload: {\n columns?: string[] | string\n head?: boolean\n}): boolean {\n return Boolean(payload.columns) && payload.head !== true\n}\n\ntype WhereClause = { sql: string; params: unknown[] }\n\nfunction conditionToWhere(condition: AthenaGatewayCondition): WhereClause {\n const column =\n condition.column?.trim() ||\n condition.eq_column?.trim() ||\n ''\n if (!column) {\n throw new D1SqlCompileError('invalid_condition', 'Condition requires a column')\n }\n const col = quoteIdent(column)\n const operator = (condition.operator || 'eq').toLowerCase()\n const value =\n condition.value !== undefined\n ? condition.value\n : condition.eq_value\n\n switch (operator) {\n case 'eq': {\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return { sql: '1 = 0', params: [] }\n }\n const placeholders = value.map(() => '?').join(', ')\n return { sql: `${col} IN (${placeholders})`, params: [...value] }\n }\n // SQLite: `col = NULL` is unknown and matches nothing. Match gateway /\n // structured-fetch semantics: null equality → IS NULL.\n if (value === null) {\n return { sql: `${col} IS NULL`, params: [] }\n }\n return { sql: `${col} = ?`, params: [value ?? null] }\n }\n case 'neq':\n // SQLite: `col != NULL` never matches. Match gateway: null neq → IS NOT NULL.\n if (value === null) {\n return { sql: `${col} IS NOT NULL`, params: [] }\n }\n return { sql: `${col} != ?`, params: [value ?? null] }\n case 'gt':\n return { sql: `${col} > ?`, params: [value ?? null] }\n case 'gte':\n return { sql: `${col} >= ?`, params: [value ?? null] }\n case 'lt':\n return { sql: `${col} < ?`, params: [value ?? null] }\n case 'lte':\n return { sql: `${col} <= ?`, params: [value ?? null] }\n case 'like':\n return { sql: `${col} LIKE ?`, params: [value ?? null] }\n case 'ilike':\n return { sql: `${col} LIKE ? COLLATE NOCASE`, params: [value ?? null] }\n case 'in': {\n const items = Array.isArray(value) ? value : value === undefined ? [] : [value]\n if (items.length === 0) {\n return { sql: '1 = 0', params: [] }\n }\n const placeholders = items.map(() => '?').join(', ')\n return { sql: `${col} IN (${placeholders})`, params: [...items] }\n }\n case 'is': {\n if (value === null || value === 'null') {\n return { sql: `${col} IS NULL`, params: [] }\n }\n if (value === true || value === 'true') {\n return { sql: `${col} IS TRUE`, params: [] }\n }\n if (value === false || value === 'false') {\n return { sql: `${col} IS FALSE`, params: [] }\n }\n return { sql: `${col} IS ?`, params: [value] }\n }\n case 'not':\n case 'or':\n case 'contains':\n case 'containedby':\n throw new D1SqlCompileError(\n 'unsupported_operator',\n `Condition operator \"${operator}\" is not supported on D1 edge-local L1`,\n )\n default:\n throw new D1SqlCompileError(\n 'unsupported_operator',\n `Unknown condition operator \"${operator}\"`,\n )\n }\n}\n\nfunction buildWhere(conditions: AthenaGatewayCondition[] | undefined): WhereClause {\n if (!conditions?.length) {\n return { sql: '', params: [] }\n }\n const parts: string[] = []\n const params: unknown[] = []\n for (const condition of conditions) {\n // Legacy shape: only eq_column/eq_value without operator\n if (!condition.operator && condition.eq_column) {\n const clause = conditionToWhere({\n ...condition,\n operator: 'eq',\n column: condition.eq_column,\n value: condition.eq_value,\n })\n parts.push(clause.sql)\n params.push(...clause.params)\n continue\n }\n const clause = conditionToWhere(condition)\n parts.push(clause.sql)\n params.push(...clause.params)\n }\n return {\n sql: parts.length ? `WHERE ${parts.join(' AND ')}` : '',\n params,\n }\n}\n\nfunction orderClause(order?: AthenaSortBy): string {\n if (!order?.field?.trim()) return ''\n const direction = order.direction === 'descending' ? 'DESC' : 'ASC'\n return `ORDER BY ${quoteIdent(order.field)} ${direction}`\n}\n\nfunction limitOffsetClause(payload: {\n limit?: number\n offset?: number\n current_page?: number\n page_size?: number\n}): string {\n let limit = payload.limit\n let offset = payload.offset\n\n // Prefer explicit page_size as the page length when limit is absent.\n if (limit === undefined && payload.page_size !== undefined) {\n limit = payload.page_size\n }\n\n // Apply current_page → OFFSET using page_size, or limit when page_size is\n // omitted (`.limit(10).currentPage(2)` must not stay at OFFSET 0).\n if (payload.current_page !== undefined && offset === undefined) {\n const pageSize = payload.page_size ?? payload.limit\n if (pageSize !== undefined) {\n offset = Math.max(0, (payload.current_page - 1) * pageSize)\n }\n }\n\n const parts: string[] = []\n // SQLite/D1 requires LIMIT when OFFSET is present; -1 means no upper bound.\n if (offset !== undefined && limit === undefined) {\n parts.push('LIMIT -1')\n parts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`)\n } else {\n if (limit !== undefined) {\n parts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`)\n }\n if (offset !== undefined) {\n parts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`)\n }\n }\n return parts.join(' ')\n}\n\nfunction rejectStructuredRelations(payload: AthenaFetchPayload): void {\n const select = payload.select\n if (select && typeof select === 'object' && !Array.isArray(select)) {\n for (const value of Object.values(select)) {\n if (value && typeof value === 'object') {\n throw new D1SqlCompileError(\n 'relations_unsupported',\n 'Nested relation selects are unsupported on D1 edge-local',\n )\n }\n }\n }\n if (payload.view_name) {\n throw new D1SqlCompileError(\n 'view_unsupported',\n 'view_name is unsupported on D1 edge-local L1',\n )\n }\n}\n\nfunction jsonValue(value: AthenaJsonValue | undefined): unknown {\n if (value === undefined) return null\n if (value !== null && typeof value === 'object') {\n return JSON.stringify(value)\n }\n return value\n}\n\n/**\n * Compile flat gateway fetch to SQLite SELECT.\n * When `head: true`, compiles a COUNT(*) query (no row body).\n */\nexport function compileD1Fetch(payload: AthenaFetchPayload): D1CompiledSql {\n rejectStructuredRelations(payload)\n const table = payload.table_name?.trim()\n if (!table) {\n throw new D1SqlCompileError('missing_table', 'table_name is required for fetch')\n }\n\n // Structured findMany-style select object with only column:true flags\n let columns: string[] | string | undefined = payload.columns\n if (payload.select && typeof payload.select === 'object' && !Array.isArray(payload.select)) {\n const keys = Object.entries(payload.select)\n .filter(([, enabled]) => enabled === true || enabled === 1)\n .map(([key]) => key)\n if (keys.length > 0) {\n columns = keys\n }\n } else if (typeof payload.select === 'string' && payload.select.trim()) {\n columns = payload.select\n }\n\n let where = buildWhere(payload.conditions)\n // Also map simple where object if present (eq only)\n if (!where.sql && payload.where && typeof payload.where === 'object') {\n const eqConditions: AthenaGatewayCondition[] = Object.entries(\n payload.where as AthenaJsonObject,\n ).map(([column, value]) => ({\n column,\n operator: 'eq' as const,\n value: value as AthenaGatewayCondition['value'],\n }))\n where = buildWhere(eqConditions)\n }\n\n if (payload.head === true) {\n // Head-only: return count metadata without row payloads.\n return compileD1CountFromWhere(table, where)\n }\n\n const parts = [\n `SELECT ${selectClause(columns)} FROM ${quoteIdent(table)}`,\n where.sql,\n orderClause(payload.sort_by),\n limitOffsetClause(payload),\n ].filter(Boolean)\n return asSingle(parts.join(' '), where.params)\n}\n\n/**\n * COUNT(*) for the same filters as a fetch (used for head and exact totals).\n */\nexport function compileD1Count(payload: AthenaFetchPayload): D1CompiledSql {\n rejectStructuredRelations(payload)\n const table = payload.table_name?.trim()\n if (!table) {\n throw new D1SqlCompileError('missing_table', 'table_name is required for count')\n }\n let where = buildWhere(payload.conditions)\n if (!where.sql && payload.where && typeof payload.where === 'object') {\n const eqConditions: AthenaGatewayCondition[] = Object.entries(\n payload.where as AthenaJsonObject,\n ).map(([column, value]) => ({\n column,\n operator: 'eq' as const,\n value: value as AthenaGatewayCondition['value'],\n }))\n where = buildWhere(eqConditions)\n }\n return compileD1CountFromWhere(table, where)\n}\n\nfunction compileD1CountFromWhere(\n table: string,\n where: { sql: string; params: unknown[] },\n): D1CompiledSql {\n const parts = [\n `SELECT COUNT(*) AS __athena_count FROM ${quoteIdent(table)}`,\n where.sql,\n ].filter(Boolean)\n return asSingle(parts.join(' '), where.params)\n}\n\nfunction extractAthenaCount(rows: unknown[]): number {\n const first = rows[0]\n const rawCount =\n first && typeof first === 'object' && !Array.isArray(first)\n ? (first as Record<string, unknown>).__athena_count\n : undefined\n const count =\n typeof rawCount === 'number'\n ? rawCount\n : typeof rawCount === 'bigint'\n ? Number(rawCount)\n : Number(rawCount ?? 0)\n return Number.isFinite(count) ? count : 0\n}\n\nexport { extractAthenaCount }\n\nfunction compileSingleRowInsert(\n table: string,\n row: AthenaJsonObject,\n payload: AthenaInsertPayload,\n): D1CompiledStatement {\n const columns = Object.keys(row)\n if (columns.length === 0) {\n // SQLite allows default-only single-row inserts, but not\n // `DEFAULT VALUES … ON CONFLICT` (D1/SQLite syntax error).\n if (payload.on_conflict) {\n throw new D1SqlCompileError(\n 'default_values_upsert_unsupported',\n 'DEFAULT VALUES upsert is unsupported on D1 edge-local; provide insert columns or omit onConflict',\n )\n }\n const parts = [`INSERT INTO ${quoteIdent(table)} DEFAULT VALUES`]\n if (wantsReturning(payload)) {\n parts.push(`RETURNING ${selectClause(payload.columns)}`)\n }\n return { sql: parts.join(' '), params: [] }\n }\n const params = columns.map(column => jsonValue(row[column]))\n const parts = [\n `INSERT INTO ${quoteIdent(table)} (${columns.map(quoteIdent).join(', ')})`,\n `VALUES (${columns.map(() => '?').join(', ')})`,\n ]\n appendOnConflict(parts, params, payload, columns)\n if (wantsReturning(payload)) {\n parts.push(`RETURNING ${selectClause(payload.columns)}`)\n }\n return { sql: parts.join(' '), params }\n}\n\n/**\n * Normalize `on_conflict` like gateway `parse_on_conflict_columns`:\n * string or string[] , and comma-separated composite targets (`tenant_id,email`).\n */\nfunction parseOnConflictColumns(onConflict: string | string[]): string[] {\n const raw = Array.isArray(onConflict) ? onConflict : [onConflict]\n const columns: string[] = []\n for (const item of raw) {\n for (const part of String(item).split(',')) {\n const trimmed = part.trim()\n if (trimmed) columns.push(trimmed)\n }\n }\n if (columns.length === 0) {\n throw new D1SqlCompileError(\n 'invalid_on_conflict',\n 'on_conflict requires at least one column',\n )\n }\n return columns\n}\n\n/**\n * Append ON CONFLICT clause.\n *\n * Parity with crates/athena-query SQLite insert compiler:\n * - explicit non-empty `update_body` → DO UPDATE SET col = ?\n * - explicit empty `update_body` → DO NOTHING\n * - omitted `update_body` (typical `.upsert({...}, { onConflict })`) →\n * DO UPDATE SET non-conflict cols from `excluded.*`\n */\nfunction appendOnConflict(\n parts: string[],\n params: unknown[],\n payload: AthenaInsertPayload,\n insertColumns: string[],\n): void {\n if (!payload.on_conflict) return\n const conflictCols = parseOnConflictColumns(payload.on_conflict)\n const conflictSql = conflictCols.map(quoteIdent).join(', ')\n\n if (payload.update_body !== undefined && payload.update_body !== null) {\n const entries = Object.entries(payload.update_body)\n if (entries.length === 0) {\n parts.push(`ON CONFLICT (${conflictSql}) DO NOTHING`)\n return\n }\n const assignments = entries.map(([column, value]) => {\n params.push(jsonValue(value as AthenaJsonValue))\n return `${quoteIdent(column)} = ?`\n })\n parts.push(`ON CONFLICT (${conflictSql}) DO UPDATE SET ${assignments.join(', ')}`)\n return\n }\n\n const conflictSet = new Set(conflictCols)\n const assignments = insertColumns\n .filter(column => !conflictSet.has(column))\n .map(column => {\n const quoted = quoteIdent(column)\n return `${quoted} = excluded.${quoted}`\n })\n if (assignments.length === 0) {\n parts.push(`ON CONFLICT (${conflictSql}) DO NOTHING`)\n } else {\n parts.push(`ON CONFLICT (${conflictSql}) DO UPDATE SET ${assignments.join(', ')}`)\n }\n}\n\n/**\n * Compile insert / upsert for D1.\n *\n * SQLite does not allow `DEFAULT` inside multi-row VALUES tuples. Sparse multi-row\n * inserts without `default_to_null` become a batch of single-row inserts so omitted\n * columns keep true DB defaults.\n */\nexport function compileD1Insert(payload: AthenaInsertPayload): D1CompiledSql {\n const table = payload.table_name?.trim()\n if (!table) {\n throw new D1SqlCompileError('missing_table', 'table_name is required for insert')\n }\n\n const rows = Array.isArray(payload.insert_body)\n ? payload.insert_body\n : [payload.insert_body]\n if (rows.length === 0) {\n throw new D1SqlCompileError('empty_insert', 'insert_body must not be empty')\n }\n\n const columns: string[] = []\n const seen = new Set<string>()\n for (const row of rows) {\n for (const key of Object.keys(row ?? {})) {\n if (seen.has(key)) continue\n seen.add(key)\n columns.push(key)\n }\n }\n\n // Single empty object → DEFAULT VALUES (all columns use table defaults).\n if (columns.length === 0) {\n if (rows.length === 1) {\n const compiled = compileSingleRowInsert(table, {}, payload)\n return asSingle(compiled.sql, compiled.params)\n }\n throw new D1SqlCompileError(\n 'empty_insert',\n 'Multi-row insert_body cannot be empty objects; use a single {} for DEFAULT VALUES',\n )\n }\n\n const forceNullForMissing = payload.default_to_null === true\n const isSparse = rows.some(row =>\n columns.some(column => !Object.prototype.hasOwnProperty.call(row, column)),\n )\n\n // Sparse multi-row without NULL coercion: one INSERT per row with only present columns.\n if (isSparse && !forceNullForMissing && rows.length > 1) {\n return asBatch(\n rows.map(row => compileSingleRowInsert(table, row as AthenaJsonObject, payload)),\n )\n }\n\n // Single-row sparse without default_to_null: only insert present columns.\n if (isSparse && !forceNullForMissing && rows.length === 1) {\n const compiled = compileSingleRowInsert(table, rows[0] as AthenaJsonObject, payload)\n return asSingle(compiled.sql, compiled.params)\n }\n\n const params: unknown[] = []\n const valueGroups = rows.map(row => {\n const placeholders = columns.map(column => {\n const has = Object.prototype.hasOwnProperty.call(row, column)\n if (!has) {\n // Only when default_to_null: bind explicit NULL (valid in VALUES).\n params.push(null)\n return '?'\n }\n params.push(jsonValue((row as AthenaJsonObject)[column]))\n return '?'\n })\n return `(${placeholders.join(', ')})`\n })\n\n const parts = [\n `INSERT INTO ${quoteIdent(table)} (${columns.map(quoteIdent).join(', ')})`,\n `VALUES ${valueGroups.join(', ')}`,\n ]\n appendOnConflict(parts, params, payload, columns)\n if (wantsReturning(payload)) {\n parts.push(`RETURNING ${selectClause(payload.columns)}`)\n }\n\n return asSingle(parts.join(' '), params)\n}\n\n/**\n * Compile update with required filters.\n * Pagination / sort bounds use a unique-identity IN (subquery) so only one page is updated.\n */\nexport function compileD1Update(\n payload: AthenaUpdatePayload,\n options?: D1CompileOptions,\n): D1CompiledSql {\n const table = payload.table_name?.trim()\n if (!table) {\n throw new D1SqlCompileError('missing_table', 'table_name is required for update')\n }\n const entries = Object.entries(payload.update_body ?? {})\n if (entries.length === 0) {\n throw new D1SqlCompileError('empty_update', 'update_body must not be empty')\n }\n\n const params: unknown[] = []\n const assignments = entries.map(([column, value]) => {\n params.push(jsonValue(value as AthenaJsonValue))\n return `${quoteIdent(column)} = ?`\n })\n\n const where = buildWhere(payload.conditions)\n if (!where.sql) {\n throw new D1SqlCompileError(\n 'unfiltered_update',\n 'UPDATE requires at least one condition on D1 edge-local',\n )\n }\n\n if (hasPaginationBounds(payload) || payload.sort_by) {\n if (!hasPaginationBounds(payload)) {\n throw new D1SqlCompileError(\n 'order_without_bounds',\n 'UPDATE with sort_by requires limit/offset or page_size/current_page on D1 edge-local',\n )\n }\n const bounded = boundedRowidInClause(\n table,\n where.sql,\n where.params,\n {\n ...payload,\n conditions: payload.conditions,\n },\n options,\n )\n params.push(...bounded.params)\n const parts = [\n `UPDATE ${quoteIdent(table)} SET ${assignments.join(', ')}`,\n `WHERE ${bounded.sql}`,\n ]\n if (wantsReturning(payload)) {\n parts.push(`RETURNING ${selectClause(payload.columns)}`)\n }\n return asSingle(parts.join(' '), params)\n }\n\n params.push(...where.params)\n const parts = [\n `UPDATE ${quoteIdent(table)} SET ${assignments.join(', ')}`,\n where.sql,\n ]\n if (wantsReturning(payload)) {\n parts.push(`RETURNING ${selectClause(payload.columns)}`)\n }\n return asSingle(parts.join(' '), params)\n}\n\n/**\n * Compile delete with required filters.\n *\n * `payload.resource_id` alone (no column filter) maps to `id = ?` for the common\n * Athena PK path. Explicit `.eq('resource_id', …)` / other filters are preserved\n * so tables with a real `resource_id` column are not rewritten to `id`.\n */\nexport function compileD1Delete(\n payload: AthenaDeletePayload,\n options?: D1CompileOptions,\n): D1CompiledSql {\n const table = payload.table_name?.trim()\n if (!table) {\n throw new D1SqlCompileError('missing_table', 'table_name is required for delete')\n }\n\n const conditions: AthenaGatewayCondition[] = [...(payload.conditions ?? [])]\n if (payload.resource_id !== undefined && payload.resource_id !== null) {\n const hasResourceIdFilter = conditions.some(condition => {\n const column = (condition.column ?? condition.eq_column ?? '').trim()\n return column === 'resource_id'\n })\n const hasIdFilter = conditions.some(condition => {\n const column = (condition.column ?? condition.eq_column ?? '').trim()\n return column === 'id'\n })\n // Only invent `id = resource_id` when the caller did not already filter by\n // resource_id or id (e.g. delete({ resourceId }) with no eq conditions).\n if (!hasResourceIdFilter && !hasIdFilter) {\n conditions.unshift({\n column: 'id',\n operator: 'eq',\n value: payload.resource_id,\n })\n }\n }\n\n const where = buildWhere(conditions)\n if (!where.sql) {\n throw new D1SqlCompileError(\n 'unfiltered_delete',\n 'DELETE requires at least one condition or resource_id on D1 edge-local',\n )\n }\n\n if (hasPaginationBounds(payload) || payload.sort_by) {\n if (!hasPaginationBounds(payload)) {\n throw new D1SqlCompileError(\n 'order_without_bounds',\n 'DELETE with sort_by requires limit/offset or page_size/current_page on D1 edge-local',\n )\n }\n const bounded = boundedRowidInClause(\n table,\n where.sql,\n where.params,\n {\n ...payload,\n conditions,\n },\n options,\n )\n const parts = [`DELETE FROM ${quoteIdent(table)}`, `WHERE ${bounded.sql}`]\n if (wantsReturning(payload)) {\n parts.push(`RETURNING ${selectClause(payload.columns)}`)\n }\n return asSingle(parts.join(' '), bounded.params)\n }\n\n const parts = [`DELETE FROM ${quoteIdent(table)}`, where.sql]\n if (wantsReturning(payload)) {\n parts.push(`RETURNING ${selectClause(payload.columns)}`)\n }\n return asSingle(parts.join(' '), where.params)\n}\n","/**\n * Rewrite PostgreSQL-oriented SQL (from shared SDK typed planners) for SQLite/D1.\n */\n\nconst PG_CAST_TYPES =\n 'text|uuid|citext|varchar|bpchar|char|integer|int4|int8|bigint|smallint|boolean|bool|jsonb|json|numeric|decimal|real|float|double precision|timestamptz|timestamp|date|bytea'\n\n/**\n * Apply a transform only outside SQL string/identifier literals and comments.\n * Prevents corrupting values like `'value::text'` or `` `a;b` ``.\n */\nfunction mapSqlOutsideLiterals(sql: string, transform: (chunk: string) => string): string {\n let out = ''\n let buffer = ''\n let inSingle = false\n let inDouble = false\n let inBacktick = false\n let inBracket = false\n let inLineComment = false\n let inBlockComment = false\n\n const flushCode = () => {\n if (buffer) {\n out += transform(buffer)\n buffer = ''\n }\n }\n\n for (let i = 0; i < sql.length; i += 1) {\n const ch = sql[i]!\n const next = sql[i + 1]\n\n if (inLineComment) {\n out += ch\n if (ch === '\\n' || ch === '\\r') inLineComment = false\n continue\n }\n if (inBlockComment) {\n out += ch\n if (ch === '*' && next === '/') {\n out += next\n i += 1\n inBlockComment = false\n }\n continue\n }\n if (inSingle) {\n out += ch\n if (ch === \"'\" && next === \"'\") {\n out += next\n i += 1\n continue\n }\n if (ch === \"'\") inSingle = false\n continue\n }\n if (inDouble) {\n out += ch\n if (ch === '\"' && next === '\"') {\n out += next\n i += 1\n continue\n }\n if (ch === '\"') inDouble = false\n continue\n }\n if (inBacktick) {\n out += ch\n if (ch === '`' && next === '`') {\n out += next\n i += 1\n continue\n }\n if (ch === '`') inBacktick = false\n continue\n }\n if (inBracket) {\n out += ch\n if (ch === ']') inBracket = false\n continue\n }\n\n if (ch === '-' && next === '-') {\n flushCode()\n out += ch\n out += next\n i += 1\n inLineComment = true\n continue\n }\n if (ch === '/' && next === '*') {\n flushCode()\n out += ch\n out += next\n i += 1\n inBlockComment = true\n continue\n }\n if (ch === \"'\") {\n flushCode()\n out += ch\n inSingle = true\n continue\n }\n if (ch === '\"') {\n flushCode()\n out += ch\n inDouble = true\n continue\n }\n if (ch === '`') {\n flushCode()\n out += ch\n inBacktick = true\n continue\n }\n if (ch === '[') {\n flushCode()\n out += ch\n inBracket = true\n continue\n }\n\n buffer += ch\n }\n\n flushCode()\n return out\n}\n\ntype SqlKeywordHit = {\n kind: 'limit' | 'offset'\n /** Start index of the keyword in the full SQL string. */\n start: number\n /** Parenthesis nesting depth at the keyword. */\n depth: number\n /**\n * Top-level statement index (increments on `;` at depth 0).\n * Prevents a LIMIT in statement N from “covering” a bare OFFSET in statement N+1.\n */\n statement: number\n}\n\nfunction isIdentChar(ch: string | undefined): boolean {\n if (!ch) return false\n return /[A-Za-z0-9_]/.test(ch)\n}\n\n/**\n * Collect LIMIT / OFFSET keyword positions outside literals/comments, with paren depth.\n */\nfunction collectLimitOffsetKeywords(sql: string): SqlKeywordHit[] {\n const hits: SqlKeywordHit[] = []\n let depth = 0\n let statement = 0\n let inSingle = false\n let inDouble = false\n let inBacktick = false\n let inBracket = false\n let inLineComment = false\n let inBlockComment = false\n\n for (let i = 0; i < sql.length; i += 1) {\n const ch = sql[i]!\n const next = sql[i + 1]\n\n if (inLineComment) {\n if (ch === '\\n' || ch === '\\r') inLineComment = false\n continue\n }\n if (inBlockComment) {\n if (ch === '*' && next === '/') {\n i += 1\n inBlockComment = false\n }\n continue\n }\n if (inSingle) {\n if (ch === \"'\" && next === \"'\") {\n i += 1\n continue\n }\n if (ch === \"'\") inSingle = false\n continue\n }\n if (inDouble) {\n if (ch === '\"' && next === '\"') {\n i += 1\n continue\n }\n if (ch === '\"') inDouble = false\n continue\n }\n if (inBacktick) {\n if (ch === '`' && next === '`') {\n i += 1\n continue\n }\n if (ch === '`') inBacktick = false\n continue\n }\n if (inBracket) {\n if (ch === ']') inBracket = false\n continue\n }\n\n if (ch === '-' && next === '-') {\n inLineComment = true\n i += 1\n continue\n }\n if (ch === '/' && next === '*') {\n inBlockComment = true\n i += 1\n continue\n }\n if (ch === \"'\") {\n inSingle = true\n continue\n }\n if (ch === '\"') {\n inDouble = true\n continue\n }\n if (ch === '`') {\n inBacktick = true\n continue\n }\n if (ch === '[') {\n inBracket = true\n continue\n }\n if (ch === '(') {\n depth += 1\n continue\n }\n if (ch === ')') {\n depth = Math.max(0, depth - 1)\n continue\n }\n // Top-level statement separator (outside strings/comments/parens).\n if (ch === ';' && depth === 0) {\n statement += 1\n continue\n }\n\n // Keyword scan only at identifier boundaries.\n if (!isIdentChar(ch) || isIdentChar(sql[i - 1])) {\n continue\n }\n\n const rest = sql.slice(i)\n if (/^LIMIT\\b/i.test(rest)) {\n hits.push({ kind: 'limit', start: i, depth, statement })\n i += 4 // advance to last char of LIMIT; loop +1\n continue\n }\n if (/^OFFSET\\b/i.test(rest)) {\n hits.push({ kind: 'offset', start: i, depth, statement })\n i += 5\n }\n }\n\n return hits\n}\n\n/**\n * SQLite requires LIMIT when OFFSET is present. Inject `LIMIT -1` before each bare\n * OFFSET, considering the full SQL (across comments/literals) and paren depth so\n * nested LIMITs do not suppress outer bare OFFSET, and comments between LIMIT and\n * OFFSET do not produce double LIMIT.\n */\nexport function injectLimitBeforeBareOffsets(sql: string): string {\n const hits = collectLimitOffsetKeywords(sql)\n if (hits.length === 0) return sql\n\n const injectAt: number[] = []\n for (const hit of hits) {\n if (hit.kind !== 'offset') continue\n let hasLimit = false\n for (let i = hits.length - 1; i >= 0; i -= 1) {\n const prev = hits[i]!\n if (prev.start >= hit.start) continue\n // Only a LIMIT in the same top-level statement and paren depth counts.\n if (prev.statement !== hit.statement) continue\n if (prev.depth !== hit.depth) continue\n if (prev.kind === 'limit') {\n hasLimit = true\n break\n }\n if (prev.kind === 'offset') {\n // Prior OFFSET at same depth/statement without a LIMIT between is still bare.\n break\n }\n }\n if (!hasLimit) {\n injectAt.push(hit.start)\n }\n }\n\n if (injectAt.length === 0) return sql\n\n // Insert from the end so earlier indices stay valid.\n let out = sql\n for (let i = injectAt.length - 1; i >= 0; i -= 1) {\n const at = injectAt[i]!\n out = `${out.slice(0, at)}LIMIT -1 ${out.slice(at)}`\n }\n return out\n}\n\n/**\n * Strip Postgres cast suffixes and normalize a few operators so UUID equality\n * plans like `\"id\"::text = '…'::text` execute on D1.\n * String/identifier literals are left unchanged.\n */\nexport function rewritePostgresSqlForSqlite(sql: string): string {\n const castPattern = new RegExp(`::(?:${PG_CAST_TYPES})\\\\b`, 'gi')\n const withoutCastsAndIlike = mapSqlOutsideLiterals(sql, chunk => {\n let rewritten = chunk.replace(castPattern, '')\n // ILIKE is Postgres-only; NOCASE is the D1/SQLite approximation used by L1 compiler.\n rewritten = rewritten.replace(/\\bILIKE\\b/gi, 'LIKE')\n return rewritten\n })\n // OFFSET rewrite must see the full statement (LIMIT may be separated by comments).\n return injectLimitBeforeBareOffsets(withoutCastsAndIlike)\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","/**\n * Structural Cloudflare binding types used by the edge-local adapter.\n * Avoids a hard dependency on `@cloudflare/workers-types`.\n */\n\nexport type D1PreparedStatementLike = {\n bind(...values: unknown[]): D1PreparedStatementLike\n run<T = Record<string, unknown>>(): Promise<D1ResultLike<T>>\n all<T = Record<string, unknown>>(): Promise<D1ResultLike<T>>\n first<T = Record<string, unknown>>(colName?: string): Promise<T | null>\n}\n\nexport type D1ResultLike<T = Record<string, unknown>> = {\n results?: T[]\n success?: boolean\n meta?: {\n duration?: number\n changes?: number\n last_row_id?: number\n rows_read?: number\n rows_written?: number\n [key: string]: unknown\n }\n error?: string\n}\n\nexport type D1ExecResultLike = {\n count: number\n duration: number\n}\n\nexport type D1SessionLike = {\n prepare(query: string): D1PreparedStatementLike\n batch<T = unknown>(statements: D1PreparedStatementLike[]): Promise<D1ResultLike<T>[]>\n /** Sessions may not expose exec (Wrangler D1DatabaseSession). */\n exec?(query: string): Promise<D1ExecResultLike>\n getBookmark(): string | null\n}\n\nexport type D1DatabaseLike = {\n prepare(query: string): D1PreparedStatementLike\n batch<T = unknown>(statements: D1PreparedStatementLike[]): Promise<D1ResultLike<T>[]>\n exec(query: string): Promise<D1ExecResultLike>\n withSession?(constraintOrBookmark: string): D1SessionLike\n}\n\nexport type R2ObjectBodyLike = {\n key: string\n size: number\n etag?: string\n httpEtag?: string\n uploaded?: Date\n httpMetadata?: { contentType?: string; [key: string]: unknown }\n customMetadata?: Record<string, string>\n text(): Promise<string>\n json<T = unknown>(): Promise<T>\n arrayBuffer(): Promise<ArrayBuffer>\n blob(): Promise<Blob>\n}\n\nexport type R2ObjectsListLike = {\n objects: Array<{\n key: string\n size: number\n etag?: string\n uploaded?: Date\n }>\n truncated: boolean\n cursor?: string\n delimitedPrefixes?: string[]\n}\n\nexport type R2BucketLike = {\n put(\n key: string,\n value: ReadableStream | ArrayBuffer | ArrayBufferView | string | Blob | null,\n options?: {\n httpMetadata?: { contentType?: string; [key: string]: unknown }\n customMetadata?: Record<string, string>\n },\n ): Promise<unknown>\n get(key: string): Promise<R2ObjectBodyLike | null>\n delete(keys: string | string[]): Promise<void>\n list(options?: {\n prefix?: string\n limit?: number\n cursor?: string\n delimiter?: string\n }): Promise<R2ObjectsListLike>\n}\n\nexport type AthenaClientCapabilitiesMode = 'gateway' | 'cloudflare-edge'\n\nexport interface AthenaDbLayerCapabilities {\n query: boolean\n flatCrud: boolean\n findManyAst: boolean\n rpc: boolean\n relations: boolean\n}\n\nexport interface AthenaDbCapabilities {\n engine: 'postgresql' | 'cloudflare-d1' | 'unknown'\n local: boolean\n layers: AthenaDbLayerCapabilities\n}\n\nexport interface AthenaStorageCapabilities {\n local: boolean\n objects: boolean\n catalogs: boolean\n backups: boolean\n}\n\nexport interface AthenaAuthCapabilities {\n remote: boolean\n}\n\nexport interface AthenaClientCapabilities {\n mode: AthenaClientCapabilitiesMode\n db: AthenaDbCapabilities\n storage: AthenaStorageCapabilities\n auth: AthenaAuthCapabilities\n}\n\nexport const CLOUDFLARE_EDGE_BASE_URL = 'https://athena.local/cloudflare-edge'\nexport const CLOUDFLARE_EDGE_API_KEY = 'cloudflare-edge-local'\n","import type { AthenaGatewayClient } from '../../gateway/client.ts'\nimport { AthenaGatewayError } from '../../gateway/errors.ts'\nimport type {\n AthenaDeletePayload,\n AthenaFetchPayload,\n AthenaGatewayCallOptions,\n AthenaGatewayConnectionOptions,\n AthenaGatewayConnectionResult,\n AthenaGatewayResponse,\n AthenaInsertPayload,\n AthenaQueryPayload,\n AthenaRpcCallOptions,\n AthenaRpcPayload,\n AthenaUpdatePayload,\n} from '../../gateway/types.ts'\nimport { CLOUDFLARE_EDGE_BASE_URL } from '../types.ts'\nimport type { D1DatabaseLike } from '../types.ts'\nimport { executeD1Batch, executeD1Query } from './runner.ts'\nimport {\n compileD1Count,\n compileD1Delete,\n compileD1Fetch,\n compileD1Insert,\n compileD1Update,\n D1SqlCompileError,\n extractAthenaCount,\n type D1CompiledSql,\n type D1CompileOptions,\n} from './sql.ts'\nimport { rewritePostgresSqlForSqlite } from './sql-rewrite.ts'\n\nexport type CloudflareD1TransportOptions = {\n d1: D1DatabaseLike\n /** Default D1 session mode when headers omit session mode. */\n defaultSessionMode?: string | null\n}\n\nfunction hasPaginationBounds(payload: {\n limit?: number\n offset?: number\n current_page?: number\n page_size?: number\n}): boolean {\n return (\n payload.limit !== undefined ||\n payload.offset !== undefined ||\n payload.page_size !== undefined ||\n payload.current_page !== undefined\n )\n}\n\n/** Normalize SQLite collation names for equality comparison. */\nfunction normalizeSqliteCollation(name: string | null | undefined): string {\n const raw = String(name ?? '')\n .trim()\n .replace(/^[\"'`[]|[\"'`\\]]$/g, '')\n if (!raw) return 'BINARY'\n return raw.toUpperCase()\n}\n\n/**\n * Locate the opening `(` of a CREATE TABLE column list.\n * Returns the index of `(` or -1 when not found.\n */\nfunction findCreateTableColumnListOpen(createSql: string): number {\n // CREATE [TEMP|TEMPORARY|VIRTUAL] TABLE [IF NOT EXISTS] name (\n const m =\n /\\bCREATE\\s+(?:(?:TEMP|TEMPORARY|VIRTUAL)\\s+)?TABLE\\s+(?:IF\\s+NOT\\s+EXISTS\\s+)?/i.exec(\n createSql,\n )\n if (!m) return -1\n let i = m.index + m[0].length\n let inSingle = false\n let inDouble = false\n let inBacktick = false\n let inBracket = false\n while (i < createSql.length) {\n const ch = createSql[i]!\n if (inSingle) {\n if (ch === \"'\" && createSql[i + 1] === \"'\") {\n i += 2\n continue\n }\n if (ch === \"'\") inSingle = false\n i++\n continue\n }\n if (inDouble) {\n if (ch === '\"') inDouble = false\n i++\n continue\n }\n if (inBacktick) {\n if (ch === '`') inBacktick = false\n i++\n continue\n }\n if (inBracket) {\n if (ch === ']') inBracket = false\n i++\n continue\n }\n if (ch === \"'\") {\n inSingle = true\n i++\n continue\n }\n if (ch === '\"') {\n inDouble = true\n i++\n continue\n }\n if (ch === '`') {\n inBacktick = true\n i++\n continue\n }\n if (ch === '[') {\n inBracket = true\n i++\n continue\n }\n if (ch === '(') return i\n i++\n }\n return -1\n}\n\n/**\n * Parse a column's COLLATE clause from CREATE TABLE SQL.\n * Returns null when the column has no explicit collation (defaults to BINARY).\n *\n * Type modifiers may contain parentheses and commas (`VARCHAR(255)`,\n * `NUMERIC(10, 2)`). A simple `[^,)]` scan stops at the first `)` and misses\n * `name VARCHAR(255) COLLATE NOCASE`, so we scan the column definition with\n * balanced parentheses before locating COLLATE.\n *\n * Column-name matching is anchored inside the CREATE TABLE `(…)` list so a\n * table whose name equals a column (e.g. `CREATE TABLE name (…, name TEXT …)`)\n * does not steal the first unanchored match.\n */\nfunction parseColumnCollationFromCreateSql(\n createSql: string,\n columnName: string,\n): string | null {\n if (!createSql || !columnName) return null\n const listOpen = findCreateTableColumnListOpen(createSql)\n if (listOpen < 0) return null\n // Search only inside the top-level column list (depth starts at 1 after `(`).\n const listStart = listOpen + 1\n const escaped = columnName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n const nameRe = new RegExp(\n `(?:^|[^\\\\w])(?:\"${escaped}\"|\\`${escaped}\\`|\\\\[${escaped}\\\\]|${escaped})\\\\s+`,\n 'i',\n )\n const listSlice = createSql.slice(listStart)\n // Walk top-level segments so UNIQUE(name COLLATE …) does not match as a column.\n // Capture match text length in a plain number so TS control-flow analysis does not\n // collapse the closure-assigned RegExpExecArray to `never` when reading `[0].length`.\n let nameMatchAbs = -1\n let nameMatchLen = 0\n {\n let i = 0\n let depth = 1\n let inSingle = false\n let inDouble = false\n let inBacktick = false\n let inBracket = false\n let segmentStart = 0\n const trySegment = (from: number, to: number) => {\n if (nameMatchAbs >= 0) return\n const segment = listSlice.slice(from, to)\n const m = nameRe.exec(segment)\n if (!m) return\n // Column defs start at segment start (optional whitespace); reject mid-segment\n // matches inside expressions that are not leading column names.\n const leading = segment.slice(0, m.index).trim()\n if (leading.length > 0) return\n nameMatchAbs = listStart + from + m.index\n nameMatchLen = m[0].length\n }\n while (i < listSlice.length && depth > 0) {\n const ch = listSlice[i]!\n if (inSingle) {\n if (ch === \"'\" && listSlice[i + 1] === \"'\") {\n i += 2\n continue\n }\n if (ch === \"'\") inSingle = false\n i++\n continue\n }\n if (inDouble) {\n if (ch === '\"') inDouble = false\n i++\n continue\n }\n if (inBacktick) {\n if (ch === '`') inBacktick = false\n i++\n continue\n }\n if (inBracket) {\n if (ch === ']') inBracket = false\n i++\n continue\n }\n if (ch === \"'\") {\n inSingle = true\n i++\n continue\n }\n if (ch === '\"') {\n inDouble = true\n i++\n continue\n }\n if (ch === '`') {\n inBacktick = true\n i++\n continue\n }\n if (ch === '[') {\n inBracket = true\n i++\n continue\n }\n if (ch === '(') {\n depth++\n i++\n continue\n }\n if (ch === ')') {\n depth--\n if (depth === 0) {\n trySegment(segmentStart, i)\n break\n }\n i++\n continue\n }\n if (ch === ',' && depth === 1) {\n trySegment(segmentStart, i)\n segmentStart = i + 1\n i++\n continue\n }\n i++\n }\n }\n if (nameMatchAbs < 0 || nameMatchLen <= 0) return null\n\n const start = nameMatchAbs + nameMatchLen\n let i = start\n let depth = 0\n let inSingle = false\n let inDouble = false\n let inBacktick = false\n let inBracket = false\n\n while (i < createSql.length) {\n const ch = createSql[i]!\n\n if (inSingle) {\n if (ch === \"'\" && createSql[i + 1] === \"'\") {\n i += 2\n continue\n }\n if (ch === \"'\") inSingle = false\n i++\n continue\n }\n if (inDouble) {\n if (ch === '\"') inDouble = false\n i++\n continue\n }\n if (inBacktick) {\n if (ch === '`') inBacktick = false\n i++\n continue\n }\n if (inBracket) {\n if (ch === ']') inBracket = false\n i++\n continue\n }\n\n if (ch === \"'\") {\n inSingle = true\n i++\n continue\n }\n if (ch === '\"') {\n inDouble = true\n i++\n continue\n }\n if (ch === '`') {\n inBacktick = true\n i++\n continue\n }\n if (ch === '[') {\n inBracket = true\n i++\n continue\n }\n\n if (ch === '(') {\n depth++\n i++\n continue\n }\n if (ch === ')') {\n if (depth === 0) {\n // End of the CREATE TABLE column list.\n break\n }\n depth--\n i++\n continue\n }\n if (ch === ',' && depth === 0) {\n // Next column or table constraint.\n break\n }\n i++\n }\n\n const colDef = createSql.slice(start, i)\n const collRe =\n /\\bCOLLATE\\s+(\"([^\"]+)\"|'([^']+)'|`([^`]+)`|\\[([^\\]]+)\\]|([A-Za-z_][\\w$]*))/i\n const match = collRe.exec(colDef)\n if (!match) return null\n return (\n match[2] ??\n match[3] ??\n match[4] ??\n match[5] ??\n match[6] ??\n match[1] ??\n null\n )\n}\n\n/**\n * True when the unique index's key collation matches the column's declared\n * collation (or both default to BINARY). Mismatch means\n * `col IN (SELECT col … LIMIT n)` can match more rows than the unique index\n * guarantees (e.g. NOCASE column + BINARY unique index).\n */\nasync function indexCollationMatchesColumn(\n d1: D1DatabaseLike,\n table: string,\n tableSafe: string,\n indexSafe: string,\n columnName: string,\n session?: { bookmark?: string | null; sessionMode?: string | null },\n): Promise<boolean> {\n type IndexXInfoRow = {\n name?: string | null\n coll?: string | null\n key?: number | boolean | null\n cid?: number | null\n }\n\n const xinfo = await executeD1Query(d1, {\n query: `PRAGMA index_xinfo(\"${indexSafe}\")`,\n params: [],\n ...session,\n })\n if (!xinfo.ok) {\n // Without index_xinfo we cannot prove collation safety — reject the index.\n return false\n }\n\n const xRows = (xinfo.rows as IndexXInfoRow[]) ?? []\n const keyRows = xRows.filter(row => {\n const isKey = row.key === 1 || row.key === true || Number(row.key) === 1\n if (!isKey) return false\n return typeof row.name === 'string' && row.name === columnName\n })\n if (keyRows.length === 0) {\n // Some drivers omit key flags; fall back to first named match.\n const byName = xRows.find(\n row => typeof row.name === 'string' && row.name === columnName,\n )\n if (!byName) return false\n keyRows.push(byName)\n }\n\n const indexColl = normalizeSqliteCollation(keyRows[0]?.coll)\n\n const master = await executeD1Query(d1, {\n query: `SELECT sql AS create_sql FROM sqlite_master WHERE type = 'table' AND name = ?`,\n params: [table],\n ...session,\n })\n let createSql = ''\n if (master.ok && Array.isArray(master.rows) && master.rows.length > 0) {\n createSql = String(\n (master.rows[0] as { create_sql?: string | null })?.create_sql ?? '',\n )\n }\n // tableSafe unused for query (bound param uses table); silence unused if needed\n void tableSafe\n\n const columnCollRaw = parseColumnCollationFromCreateSql(createSql, columnName)\n const columnColl = normalizeSqliteCollation(columnCollRaw)\n\n return indexColl === columnColl\n}\n\n/**\n * Resolve a single-column unique identity for bounded mutations from live D1\n * schema (PRAGMA table_info + index_list). Prefer PRIMARY KEY; else a single-\n * column UNIQUE index. Multi-column keys are rejected as unsafe for IN-subquery.\n */\nexport async function resolveD1BoundedIdentityColumn(\n d1: D1DatabaseLike,\n tableName: string,\n session?: { bookmark?: string | null; sessionMode?: string | null },\n): Promise<string> {\n const table = tableName.trim()\n if (!table) {\n throw new D1SqlCompileError('missing_table', 'table_name is required for bounded mutation')\n }\n // Quote via double-quote after escaping; PRAGMA does not take bound params for table name.\n const safe = table.replace(/\"/g, '\"\"')\n\n const info = await executeD1Query(d1, {\n query: `PRAGMA table_info(\"${safe}\")`,\n params: [],\n ...session,\n })\n if (!info.ok) {\n throw new D1SqlCompileError(\n 'bounded_mutation_no_unique_identity',\n `Unable to introspect table \"${table}\" for bounded mutation identity: ${info.message}`,\n )\n }\n\n type PragmaCol = {\n name?: string\n pk?: number\n notnull?: number | boolean\n type?: string\n }\n const cols = (info.rows as PragmaCol[]).filter(\n row => typeof row?.name === 'string' && row.name.length > 0,\n )\n const colByName = new Map(cols.map(col => [col.name!, col]))\n const isNotNullColumn = (name: string): boolean => {\n const col = colByName.get(name)\n if (!col) return false\n return col.notnull === 1 || col.notnull === true || Number(col.notnull) === 1\n }\n /**\n * Candidate SQLite rowid alias: single-column PRIMARY KEY declared as INTEGER.\n * PRAGMA table_info still reports notnull=0 for true rowid aliases. The\n * INTEGER PRIMARY KEY DESC exception is NOT a rowid alias (nullable, non-\n * unique); detect it via a separate origin='pk' index or CREATE TABLE SQL.\n */\n const isIntegerPrimaryKeyType = (col: PragmaCol): boolean => {\n if (typeof col.pk !== 'number' || col.pk <= 0) return false\n const declared = String(col.type ?? '')\n .trim()\n .toUpperCase()\n return declared === 'INTEGER'\n }\n\n type IndexRow = {\n name?: string\n unique?: number | boolean\n /** SQLite: 'c' | 'u' | 'pk' */\n origin?: string\n /** SQLite: 1 when the index has a WHERE clause (partial). */\n partial?: number | boolean\n }\n\n const loadIndexList = async (): Promise<IndexRow[] | null> => {\n const indexList = await executeD1Query(d1, {\n query: `PRAGMA index_list(\"${safe}\")`,\n params: [],\n ...session,\n })\n if (!indexList.ok) return null\n return indexList.rows as IndexRow[]\n }\n\n /**\n * True when the INTEGER PRIMARY KEY is NOT a rowid alias (DESC exception).\n * True rowid aliases have no origin='pk' index; DESC creates one. When origin\n * is omitted by the driver, parse sqlite_master CREATE TABLE for DESC.\n */\n const isDescendingIntegerPrimaryKeyException = async (\n colName: string,\n indexes: IndexRow[] | null,\n ): Promise<boolean> => {\n if (indexes) {\n const hasPkOrigin = indexes.some(\n index => String(index.origin ?? '').toLowerCase() === 'pk',\n )\n if (hasPkOrigin) return true\n // Empty list or origins present without 'pk' ⇒ true rowid alias.\n const originReported = indexes.some(\n index =>\n index.origin !== undefined &&\n index.origin !== null &&\n String(index.origin).length > 0,\n )\n if (indexes.length === 0 || originReported) {\n return false\n }\n }\n\n // Fallback when index_list failed or origin is unavailable on rows.\n const master = await executeD1Query(d1, {\n query: `SELECT sql AS create_sql FROM sqlite_master WHERE type = 'table' AND name = ?`,\n params: [table],\n ...session,\n })\n if (!master.ok || !Array.isArray(master.rows) || master.rows.length === 0) {\n return false\n }\n const createSql = String(\n (master.rows[0] as { create_sql?: string | null })?.create_sql ?? '',\n )\n if (!createSql) return false\n const escaped = colName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n // Inline: id INTEGER PRIMARY KEY DESC\n const inlineDesc = new RegExp(\n `(?:^|[^\\\\w])(?:\"${escaped}\"|${escaped})\\\\s+INTEGER\\\\s+PRIMARY\\\\s+KEY\\\\s+DESC\\\\b`,\n 'i',\n )\n // Table-level: PRIMARY KEY (id DESC) or PRIMARY KEY(\"id\" DESC)\n const tableDesc = new RegExp(\n `PRIMARY\\\\s+KEY\\\\s*\\\\(\\\\s*(?:\"${escaped}\"|${escaped})\\\\s+DESC\\\\b`,\n 'i',\n )\n return inlineDesc.test(createSql) || tableDesc.test(createSql)\n }\n\n const pkCols = cols\n .filter(row => typeof row.pk === 'number' && row.pk > 0)\n .sort((a, b) => (a.pk ?? 0) - (b.pk ?? 0))\n\n // Load index_list once when needed for PK validation or unique-index scan.\n let indexRows: IndexRow[] | null | undefined\n\n if (pkCols.length === 1 && pkCols[0]?.name) {\n // SQLite WITHOUT ROWID requires NOT NULL on PK; ordinary rowid tables allow\n // NULL in a TEXT PRIMARY KEY (multiple NULLs). NULL IN (NULL) is unknown, so\n // bounded mutations must not use a nullable PK as the identity column —\n // except INTEGER PRIMARY KEY rowid alias (notnull may be 0, no pk index).\n //\n // Non-rowid PKs must also pass the same collation check as UNIQUE indexes:\n // `name TEXT COLLATE NOCASE NOT NULL, PRIMARY KEY(name COLLATE BINARY)` allows\n // both `a` and `A`, but outer `name IN (SELECT name …)` uses column NOCASE.\n if (isIntegerPrimaryKeyType(pkCols[0])) {\n indexRows = await loadIndexList()\n const isDescException = await isDescendingIntegerPrimaryKeyException(\n pkCols[0].name,\n indexRows,\n )\n if (!isDescException) {\n return pkCols[0].name\n }\n // Fall through: DESC INTEGER PK is nullable / non-rowid; try UNIQUE indexes.\n } else if (isNotNullColumn(pkCols[0].name)) {\n indexRows = await loadIndexList()\n const pkIndex = (indexRows ?? []).find(\n index => String(index.origin ?? '').toLowerCase() === 'pk',\n )\n if (pkIndex && typeof pkIndex.name === 'string' && pkIndex.name) {\n const indexSafe = pkIndex.name.replace(/\"/g, '\"\"')\n const collMatch = await indexCollationMatchesColumn(\n d1,\n table,\n safe,\n indexSafe,\n pkCols[0].name,\n session,\n )\n if (collMatch) {\n return pkCols[0].name\n }\n // Collation mismatch — do not use this PK; try UNIQUE indexes.\n }\n // No origin='pk' index to prove collation safety — fall through.\n }\n // Fall through to UNIQUE indexes / rejection.\n }\n // Composite PK: cannot use multi-column identity for IN-subquery, but a\n // separate single-column UNIQUE NOT NULL index may still qualify — fall through.\n\n // No usable single-column PK. Scan full-table, non-partial, NOT NULL unique indexes.\n if (indexRows === undefined) {\n indexRows = await loadIndexList()\n }\n if (indexRows) {\n for (const index of indexRows) {\n const unique =\n index.unique === 1 || index.unique === true || Number(index.unique) === 1\n if (!unique || typeof index.name !== 'string' || !index.name) continue\n const isPartial =\n index.partial === 1 ||\n index.partial === true ||\n Number(index.partial) === 1\n if (isPartial) {\n // Partial UNIQUE (e.g. WHERE active = 1) allows duplicate values outside\n // the predicate; using that column for `IN (SELECT … LIMIT n)` can mutate\n // more rows than the requested page.\n continue\n }\n const indexSafe = index.name.replace(/\"/g, '\"\"')\n const indexInfo = await executeD1Query(d1, {\n query: `PRAGMA index_info(\"${indexSafe}\")`,\n params: [],\n ...session,\n })\n if (!indexInfo.ok) continue\n type IndexInfoRow = { name?: string | null; cid?: number | null }\n const rawIndexCols = (indexInfo.rows as IndexInfoRow[]) ?? []\n // Expression index terms report null name (and often cid < 0). Filtering\n // them out would shrink UNIQUE(tenant_id, lower(email)) to a false\n // single-column identity — reject the whole index instead.\n const hasExpressionTerm = rawIndexCols.some(row => {\n const nameOk = typeof row?.name === 'string' && row.name.length > 0\n if (!nameOk) return true\n if (typeof row.cid === 'number' && row.cid < 0) return true\n return false\n })\n if (hasExpressionTerm || rawIndexCols.length === 0) {\n continue\n }\n const indexCols = rawIndexCols.filter(\n (row): row is IndexInfoRow & { name: string } =>\n typeof row?.name === 'string' && row.name.length > 0,\n )\n if (indexCols.length === 1 && indexCols[0]?.name) {\n const identity = indexCols[0].name\n // SQLite UNIQUE allows multiple NULLs; `col IN (SELECT col …)` never\n // matches NULL, so a null identity page can under- or over-mutate.\n if (!isNotNullColumn(identity)) {\n continue\n }\n // Reject when the unique index collation differs from the column's\n // declared collation: `identity IN (SELECT identity … LIMIT n)` uses\n // column equality, which can match more rows than the unique index\n // (e.g. TEXT COLLATE NOCASE column + UNIQUE COLLATE BINARY index).\n const collMatch = await indexCollationMatchesColumn(\n d1,\n table,\n safe,\n indexSafe,\n identity,\n session,\n )\n if (!collMatch) {\n continue\n }\n return identity\n }\n }\n }\n\n throw new D1SqlCompileError(\n 'bounded_mutation_no_unique_identity',\n `Bounded update/delete on \"${table}\" requires a proven single-column PRIMARY KEY or UNIQUE index`,\n )\n}\n\nasync function compileOptionsForBoundedMutation(\n d1: D1DatabaseLike,\n payload: {\n table_name?: string\n limit?: number\n offset?: number\n current_page?: number\n page_size?: number\n sort_by?: unknown\n },\n session?: { bookmark?: string | null; sessionMode?: string | null },\n): Promise<D1CompileOptions | undefined> {\n if (!hasPaginationBounds(payload) && !payload.sort_by) {\n return undefined\n }\n if (!hasPaginationBounds(payload)) {\n // order_without_bounds is raised by the compiler\n return undefined\n }\n const identityColumn = await resolveD1BoundedIdentityColumn(\n d1,\n payload.table_name ?? '',\n session,\n )\n return { identityColumn }\n}\n\nfunction headerValue(\n options: AthenaGatewayCallOptions | undefined,\n name: string,\n): string | undefined {\n const headers = options?.headers\n if (!headers) return undefined\n const lower = name.toLowerCase()\n for (const [key, value] of Object.entries(headers)) {\n if (key.toLowerCase() === lower && value?.trim()) {\n return value.trim()\n }\n }\n return undefined\n}\n\nfunction sessionFromOptions(\n options: AthenaGatewayCallOptions | undefined,\n defaults: CloudflareD1TransportOptions,\n): { bookmark?: string | null; sessionMode?: string | null } {\n return {\n bookmark: headerValue(options, 'x-athena-d1-bookmark') ?? null,\n sessionMode:\n headerValue(options, 'x-athena-d1-session-mode') ??\n defaults.defaultSessionMode ??\n null,\n }\n}\n\n/**\n * Gateway default is stripNulls: true (omit null-valued keys from row objects).\n * Edge must match so feature flags / UI code relying on absent keys work on D1.\n */\nfunction resolveStripNulls(\n payloadStrip: boolean | undefined,\n callOptions: AthenaGatewayCallOptions | undefined,\n defaultValue = true,\n): boolean {\n if (typeof payloadStrip === 'boolean') return payloadStrip\n if (typeof callOptions?.stripNulls === 'boolean') return callOptions.stripNulls\n return defaultValue\n}\n\nfunction stripNullPropertiesFromRows(rows: unknown[]): unknown[] {\n return rows.map(row => {\n if (row == null || typeof row !== 'object' || Array.isArray(row)) {\n return row\n }\n const out: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(row as Record<string, unknown>)) {\n if (value !== null) {\n out[key] = value\n }\n }\n return out\n })\n}\n\nfunction maybeStripNullRows(rows: unknown[], strip: boolean): unknown[] {\n return strip ? stripNullPropertiesFromRows(rows) : rows\n}\n\nfunction successResponse<T>(\n data: T,\n count: number | null | undefined,\n raw: unknown,\n bookmark: string | null,\n): AthenaGatewayResponse<T> {\n const response: AthenaGatewayResponse<T> = {\n ok: true,\n status: 200,\n statusText: 'OK',\n data,\n count: count ?? null,\n error: undefined,\n errorDetails: null,\n raw,\n }\n if (bookmark) {\n // Surface bookmark for callers that inspect raw\n if (raw && typeof raw === 'object' && !Array.isArray(raw)) {\n const rawRecord = raw as Record<string, unknown>\n rawRecord.bookmark = bookmark\n }\n }\n return response\n}\n\nfunction errorResponse<T>(\n status: number,\n code: 'HTTP_ERROR' | 'UNKNOWN_ERROR' | 'INVALID_JSON' | 'NETWORK_ERROR' | 'INVALID_URL',\n message: string,\n endpoint: string,\n method: string,\n hint?: string,\n): AthenaGatewayResponse<T> {\n const error = new AthenaGatewayError({\n code,\n message,\n status,\n endpoint: endpoint as never,\n method: method as never,\n hint,\n })\n return {\n ok: false,\n status,\n statusText: null,\n data: null,\n error: error.message,\n errorDetails: error.toDetails(),\n raw: { error: message, code },\n }\n}\n\nfunction compileErrorResponse<T>(\n error: unknown,\n endpoint: string,\n method: string,\n): AthenaGatewayResponse<T> {\n if (error instanceof D1SqlCompileError) {\n return errorResponse(\n 400,\n 'HTTP_ERROR',\n error.message,\n endpoint,\n method,\n `D1 SQL compile failed (${error.code})`,\n )\n }\n const message = error instanceof Error ? error.message : String(error)\n return errorResponse(500, 'UNKNOWN_ERROR', message, endpoint, method)\n}\n\n/**\n * Gateway-shaped transport that executes against a Worker D1 binding.\n */\nexport function createCloudflareD1GatewayTransport(\n options: CloudflareD1TransportOptions,\n): AthenaGatewayClient {\n const { d1 } = options\n\n async function runCompiled<T>(\n compiled: D1CompiledSql,\n callOptions: AthenaGatewayCallOptions | undefined,\n endpoint: string,\n method: string,\n mapResult?: (rows: unknown[], count: number) => { data: T; count: number | null },\n stripNulls = true,\n ): Promise<AthenaGatewayResponse<T>> {\n try {\n const session = sessionFromOptions(callOptions, options)\n if (compiled.statements && compiled.statements.length > 1) {\n const batch = await executeD1Batch(d1, {\n statements: compiled.statements.map(statement => ({\n query: statement.sql,\n params: statement.params,\n })),\n ...session,\n })\n if (!batch.ok) {\n return errorResponse(400, 'HTTP_ERROR', batch.message, endpoint, method)\n }\n // Sparse multi-row inserts without RETURNING yield empty `results` arrays;\n // each D1 result still reports affected rows on `meta.changes`.\n const rows = maybeStripNullRows(\n batch.results.flatMap(item =>\n Array.isArray(item.results) ? item.results : [],\n ),\n stripNulls,\n )\n const changes = batch.results.reduce((sum, item) => {\n const meta = item?.meta\n const n =\n meta && typeof meta === 'object' && typeof meta.changes === 'number'\n ? meta.changes\n : 0\n return sum + n\n }, 0)\n const count = rows.length > 0 ? rows.length : changes\n const mapped = mapResult?.(rows, count) ?? {\n data: rows as T,\n count,\n }\n return successResponse(mapped.data, mapped.count, batch, batch.bookmark)\n }\n\n const result = await executeD1Query(d1, {\n query: compiled.sql,\n params: compiled.params,\n ...session,\n })\n if (!result.ok) {\n return errorResponse(400, 'HTTP_ERROR', result.message, endpoint, method)\n }\n const rows = maybeStripNullRows(result.rows, stripNulls)\n const mapped = mapResult?.(rows, result.count) ?? {\n data: rows as T,\n count: result.count,\n }\n return successResponse(mapped.data, mapped.count, result, result.bookmark)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return errorResponse(500, 'UNKNOWN_ERROR', message, endpoint, method)\n }\n }\n\n return {\n baseUrl: CLOUDFLARE_EDGE_BASE_URL,\n buildHeaders(callOptions) {\n return { ...(callOptions?.headers ?? {}) }\n },\n async resolveCallOptions(callOptions) {\n return callOptions\n },\n async verifyConnection(\n connectionOptions?: AthenaGatewayConnectionOptions,\n ): Promise<AthenaGatewayConnectionResult> {\n void connectionOptions\n const baseUrl = CLOUDFLARE_EDGE_BASE_URL\n try {\n const result = await executeD1Query(d1, { query: 'SELECT 1 AS ok' })\n if (!result.ok) {\n return {\n ok: false,\n reachable: false,\n status: 500,\n statusText: null,\n baseUrl,\n url: `${baseUrl}/d1`,\n error: result.message,\n errorDetails: null,\n raw: result,\n }\n }\n return {\n ok: true,\n reachable: true,\n status: 200,\n statusText: 'OK',\n baseUrl,\n url: `${baseUrl}/d1`,\n error: undefined,\n errorDetails: null,\n raw: result,\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return {\n ok: false,\n reachable: false,\n status: 0,\n statusText: null,\n baseUrl,\n url: `${baseUrl}/d1`,\n error: message,\n errorDetails: null,\n raw: null,\n }\n }\n },\n async fetchGateway<T>(\n payload: AthenaFetchPayload,\n callOptions?: AthenaGatewayCallOptions,\n ): Promise<AthenaGatewayResponse<T>> {\n try {\n // Reject findMany AST with relation-shaped select early via compile\n if (\n payload &&\n typeof payload === 'object' &&\n 'operation' in (payload as object)\n ) {\n return errorResponse(\n 400,\n 'HTTP_ERROR',\n 'Direct AST operation payloads are unsupported on D1 edge-local',\n '/gateway/fetch',\n 'POST',\n )\n }\n const compiled = compileD1Fetch(payload)\n const stripNulls = resolveStripNulls(payload.strip_nulls, callOptions, true)\n if (payload.head === true) {\n return runCompiled(\n compiled,\n callOptions,\n '/gateway/fetch',\n 'POST',\n rows => ({ data: [] as T, count: extractAthenaCount(rows) }),\n // COUNT rows are meta, not user-facing object rows\n false,\n )\n }\n\n // exact/planned/estimated: total matches independent of LIMIT/OFFSET page size\n const wantsTotalCount =\n payload.count === 'exact' ||\n payload.count === 'planned' ||\n payload.count === 'estimated'\n if (wantsTotalCount) {\n // Page + COUNT must share one D1 session so bookmarks and sequential\n // consistency cover both observations (not two independent withSession calls).\n const session = sessionFromOptions(callOptions, options)\n const countCompiled = compileD1Count(payload)\n const batch = await executeD1Batch(d1, {\n statements: [\n {\n query: compiled.sql,\n params: compiled.params,\n },\n {\n query: countCompiled.sql,\n params: countCompiled.params,\n },\n ],\n ...session,\n })\n if (!batch.ok) {\n return errorResponse(400, 'HTTP_ERROR', batch.message, '/gateway/fetch', 'POST')\n }\n const dataItem = batch.results[0]\n const countItem = batch.results[1]\n if (!dataItem || dataItem.success === false) {\n const message =\n dataItem &&\n typeof (dataItem as { error?: unknown }).error === 'string' &&\n (dataItem as { error: string }).error.trim()\n ? (dataItem as { error: string }).error\n : 'D1 page query failed'\n return errorResponse(400, 'HTTP_ERROR', message, '/gateway/fetch', 'POST')\n }\n // Do not fall back to page length: callers asked for an exact/planned/\n // estimated total, so a failed COUNT must surface as an error.\n if (!countItem || countItem.success === false) {\n const message =\n countItem &&\n typeof (countItem as { error?: unknown }).error === 'string' &&\n (countItem as { error: string }).error.trim()\n ? (countItem as { error: string }).error\n : 'D1 count query failed'\n return errorResponse(400, 'HTTP_ERROR', message, '/gateway/fetch', 'POST')\n }\n const dataRows = Array.isArray(dataItem.results) ? dataItem.results : []\n const countRows = Array.isArray(countItem.results) ? countItem.results : []\n const total = extractAthenaCount(countRows)\n const rows = maybeStripNullRows(dataRows, stripNulls)\n return successResponse(\n rows as T,\n total,\n { data: dataItem, count: countItem, batch },\n batch.bookmark,\n )\n }\n\n return runCompiled(compiled, callOptions, '/gateway/fetch', 'POST', undefined, stripNulls)\n } catch (error) {\n return compileErrorResponse(error, '/gateway/fetch', 'POST')\n }\n },\n async insertGateway<T>(\n payload: AthenaInsertPayload,\n callOptions?: AthenaGatewayCallOptions,\n ): Promise<AthenaGatewayResponse<T>> {\n try {\n const compiled = compileD1Insert(payload)\n const stripNulls = resolveStripNulls(undefined, callOptions, true)\n return runCompiled(compiled, callOptions, '/gateway/insert', 'PUT', undefined, stripNulls)\n } catch (error) {\n return compileErrorResponse(error, '/gateway/insert', 'PUT')\n }\n },\n async updateGateway<T>(\n payload: AthenaUpdatePayload,\n callOptions?: AthenaGatewayCallOptions,\n ): Promise<AthenaGatewayResponse<T>> {\n try {\n const session = sessionFromOptions(callOptions, options)\n const compileOptions = await compileOptionsForBoundedMutation(d1, payload, session)\n const compiled = compileD1Update(payload, compileOptions)\n const stripNulls = resolveStripNulls(payload.strip_nulls, callOptions, true)\n return runCompiled(compiled, callOptions, '/gateway/update', 'POST', undefined, stripNulls)\n } catch (error) {\n return compileErrorResponse(error, '/gateway/update', 'POST')\n }\n },\n async deleteGateway<T>(\n payload: AthenaDeletePayload,\n callOptions?: AthenaGatewayCallOptions,\n ): Promise<AthenaGatewayResponse<T>> {\n try {\n const session = sessionFromOptions(callOptions, options)\n const compileOptions = await compileOptionsForBoundedMutation(d1, payload, session)\n const compiled = compileD1Delete(payload, compileOptions)\n const stripNulls = resolveStripNulls(undefined, callOptions, true)\n return runCompiled(compiled, callOptions, '/gateway/delete', 'DELETE', undefined, stripNulls)\n } catch (error) {\n return compileErrorResponse(error, '/gateway/delete', 'DELETE')\n }\n },\n async rpcGateway<T>(\n payload: AthenaRpcPayload,\n callOptions?: AthenaRpcCallOptions,\n ): Promise<AthenaGatewayResponse<T>> {\n void payload\n void callOptions\n return errorResponse(\n 400,\n 'HTTP_ERROR',\n 'RPC is unsupported on D1 edge-local mode',\n '/gateway/rpc',\n 'POST',\n 'Use flat CRUD or raw query SQL instead',\n )\n },\n async queryGateway<T>(\n payload: AthenaQueryPayload,\n callOptions?: AthenaGatewayCallOptions,\n ): Promise<AthenaGatewayResponse<T>> {\n try {\n const params = payload.params ?? callOptions?.params\n const session = sessionFromOptions(callOptions, options)\n // Shared SDK typed planners may emit Postgres casts (::text) for UUID eq;\n // rewrite to SQLite-safe SQL before D1 execution.\n const query = rewritePostgresSqlForSqlite(payload.query)\n const result = await executeD1Query(d1, {\n query,\n params: Array.isArray(params) ? params : [],\n ...session,\n })\n if (!result.ok) {\n return errorResponse(400, 'HTTP_ERROR', result.message, '/gateway/query', 'POST')\n }\n const stripNulls = resolveStripNulls(undefined, callOptions, true)\n const rows = maybeStripNullRows(result.rows, stripNulls)\n return successResponse(\n rows as T,\n result.count,\n { ...result, query },\n result.bookmark,\n )\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return errorResponse(500, 'UNKNOWN_ERROR', message, '/gateway/query', 'POST')\n }\n },\n }\n}\n","/**\n * L3a local R2 object I/O subset for edge-local mode.\n * Does not implement catalogs, backups, multipart, or signed URLs.\n */\n\nimport type { AthenaStorageModule } from '../../storage/module.ts'\nimport type { R2BucketLike, R2ObjectBodyLike } from '../types.ts'\n\nexport type CloudflareR2StorageOptions = {\n r2: R2BucketLike\n /** Key prefix applied to all object keys (trailing slash normalized). */\n prefix?: string\n}\n\nexport type CloudflareR2PutBody =\n | ReadableStream\n | ArrayBuffer\n | ArrayBufferView\n | string\n | Blob\n | null\n\nexport interface CloudflareR2PutObjectInput {\n key: string\n body: CloudflareR2PutBody\n contentType?: string\n metadata?: Record<string, string>\n}\n\nexport interface CloudflareR2GetObjectResult {\n key: string\n size: number\n contentType?: string\n body: R2ObjectBodyLike\n}\n\nexport interface CloudflareR2ListObjectsInput {\n prefix?: string\n limit?: number\n cursor?: string\n}\n\nexport interface CloudflareR2ListObjectsResult {\n objects: Array<{ key: string; size: number; etag?: string; uploaded?: Date }>\n truncated: boolean\n cursor?: string\n}\n\n/** L3a object methods exposed when an R2 binding is configured. */\nexport interface CloudflareR2ObjectStorage {\n putObject(input: CloudflareR2PutObjectInput): Promise<{ key: string }>\n getObject(input: { key: string }): Promise<CloudflareR2GetObjectResult | null>\n deleteObject(input: { key: string | string[] }): Promise<{ deleted: string[] }>\n listObjects(input?: CloudflareR2ListObjectsInput): Promise<CloudflareR2ListObjectsResult>\n}\n\n/**\n * Storage namespace for edge-local R2: full module shape (unsupported methods throw)\n * plus L3a object helpers.\n */\nexport type CloudflareR2StorageModule = AthenaStorageModule & CloudflareR2ObjectStorage\n\nfunction normalizePrefix(prefix: string | undefined): string {\n if (!prefix?.trim()) return ''\n const normalized = prefix.replace(/^\\/+/, '').replace(/\\/?$/, '/')\n if (normalized.includes('\\0')) {\n throw new Error('storage prefix must not contain null bytes')\n }\n if (normalized.split('/').some(segment => segment === '..')) {\n throw new Error('storage prefix must not contain \"..\" path segments')\n }\n return normalized\n}\n\n/**\n * Normalize and validate an object key before joining with the configured prefix.\n * Rejects empty keys, null bytes, and `..` segments so a tenant prefix cannot be\n * escaped via path-like keys (even though R2 treats keys as opaque strings).\n */\nfunction assertSafeObjectKey(key: string): string {\n if (typeof key !== 'string' || !key.trim()) {\n throw new Error('Object key is required')\n }\n if (key.includes('\\0')) {\n throw new Error('Object key must not contain null bytes')\n }\n const cleaned = key.replace(/^\\/+/, '')\n if (!cleaned) {\n throw new Error('Object key is required')\n }\n const segments = cleaned.split('/')\n if (segments.some(segment => segment === '..')) {\n throw new Error('Object key must not contain \"..\" path segments')\n }\n return cleaned\n}\n\nfunction joinKey(prefix: string, key: string): string {\n return `${prefix}${assertSafeObjectKey(key)}`\n}\n\n/**\n * Map a physical object key back to the logical key consumers pass in/out.\n * Returned keys must be reusable with getObject/deleteObject without double-prefixing.\n */\nfunction toLogicalKey(prefix: string, physicalKey: string): string {\n if (!prefix) return physicalKey\n if (physicalKey.startsWith(prefix)) {\n return physicalKey.slice(prefix.length)\n }\n return physicalKey\n}\n\n/**\n * Public API keys are always logical: always join the configured prefix.\n * Never treat an input that happens to start with the prefix as already physical\n * (that would collapse `a.txt` and `tenant/a.txt` onto the same object).\n */\nfunction toPhysicalKey(prefix: string, key: string): string {\n return joinKey(prefix, key)\n}\n\nfunction unsupported(method: string): never {\n throw new Error(\n `storage.${method} is not available in Cloudflare edge-local R2 object mode. ` +\n 'Only putObject / getObject / deleteObject / listObjects are supported (L3a).',\n )\n}\n\n/**\n * Minimal storage surface backed by an R2 binding.\n * Full AthenaStorageModule methods that need catalogs throw clearly.\n */\nexport function createCloudflareR2StorageModule(\n options: CloudflareR2StorageOptions,\n): CloudflareR2StorageModule {\n const prefix = normalizePrefix(options.prefix)\n const { r2 } = options\n\n const putObject = async (input: CloudflareR2PutObjectInput) => {\n const logical = assertSafeObjectKey(input.key)\n const physical = toPhysicalKey(prefix, logical)\n await r2.put(physical, input.body, {\n httpMetadata: input.contentType ? { contentType: input.contentType } : undefined,\n customMetadata: input.metadata,\n })\n // Return the logical key so put → get/delete round-trips without double-prefix.\n return { key: logical }\n }\n\n const getObject = async (input: { key: string }) => {\n const logical = assertSafeObjectKey(input.key)\n const physical = toPhysicalKey(prefix, logical)\n const object = await r2.get(physical)\n if (!object) return null\n return {\n key: toLogicalKey(prefix, object.key),\n size: object.size,\n contentType: object.httpMetadata?.contentType,\n body: object,\n }\n }\n\n const deleteObject = async (input: { key: string | string[] }) => {\n const logicalKeys = (Array.isArray(input.key) ? input.key : [input.key]).map(key =>\n assertSafeObjectKey(key),\n )\n const physicalKeys = logicalKeys.map(key => toPhysicalKey(prefix, key))\n await r2.delete(physicalKeys.length === 1 ? physicalKeys[0]! : physicalKeys)\n return { deleted: logicalKeys }\n }\n\n const listObjects = async (input?: CloudflareR2ListObjectsInput) => {\n // Empty relative prefix lists under the configured storage prefix only.\n const relative = input?.prefix?.trim() ? assertSafeObjectKey(input.prefix) : ''\n const listPrefix = `${prefix}${relative}`\n const listed = await r2.list({\n prefix: listPrefix || undefined,\n limit: input?.limit,\n cursor: input?.cursor,\n })\n return {\n objects: listed.objects.map(object => ({\n key: toLogicalKey(prefix, object.key),\n size: object.size,\n etag: object.etag,\n uploaded: object.uploaded,\n })),\n truncated: listed.truncated,\n cursor: listed.cursor,\n }\n }\n\n const base: CloudflareR2ObjectStorage = {\n putObject,\n getObject,\n deleteObject,\n listObjects,\n }\n\n return new Proxy(base as CloudflareR2StorageModule, {\n get(target, property, receiver) {\n if (property in target) {\n return Reflect.get(target, property, receiver)\n }\n if (typeof property === 'string') {\n return (...args: unknown[]) => {\n void args\n return unsupported(property)\n }\n }\n return undefined\n },\n })\n}\n","import type { AthenaResult } from './client.ts'\nimport { AthenaGatewayError, isAthenaGatewayError } from './gateway/errors.ts'\nimport type { AthenaGatewayErrorCode, AthenaGatewayErrorDetails } from './gateway/types.ts'\nimport { parseBooleanFlag as parseBooleanFlagUtil } from './utils/parse-boolean-flag.ts'\n\nexport type AthenaErrorKind =\n | 'unique_violation'\n | 'not_found'\n | 'validation'\n | 'auth'\n | 'rate_limit'\n | 'transient'\n | 'unknown'\n\nexport const AthenaErrorKind = {\n UniqueViolation: 'unique_violation',\n NotFound: 'not_found',\n Validation: 'validation',\n Auth: 'auth',\n RateLimit: 'rate_limit',\n Transient: 'transient',\n Unknown: 'unknown',\n} as const\n\nexport type AthenaErrorCode =\n | 'UNIQUE_VIOLATION'\n | 'NOT_FOUND'\n | 'VALIDATION_FAILED'\n | 'AUTH_UNAUTHORIZED'\n | 'AUTH_FORBIDDEN'\n | 'RATE_LIMITED'\n | 'NETWORK_UNAVAILABLE'\n | 'TRANSIENT_FAILURE'\n | 'HTTP_FAILURE'\n | 'UNKNOWN'\n\nexport const AthenaErrorCode = {\n UniqueViolation: 'UNIQUE_VIOLATION',\n NotFound: 'NOT_FOUND',\n ValidationFailed: 'VALIDATION_FAILED',\n AuthUnauthorized: 'AUTH_UNAUTHORIZED',\n AuthForbidden: 'AUTH_FORBIDDEN',\n RateLimited: 'RATE_LIMITED',\n NetworkUnavailable: 'NETWORK_UNAVAILABLE',\n TransientFailure: 'TRANSIENT_FAILURE',\n HttpFailure: 'HTTP_FAILURE',\n Unknown: 'UNKNOWN',\n} as const satisfies Record<string, AthenaErrorCode>\n\nexport type AthenaErrorCategory = 'transport' | 'client' | 'server' | 'database' | 'unknown'\n\nexport const AthenaErrorCategory = {\n Transport: 'transport',\n Client: 'client',\n Server: 'server',\n Database: 'database',\n Unknown: 'unknown',\n} as const satisfies Record<string, AthenaErrorCategory>\n\nexport interface AthenaOperationContext {\n table?: string\n operation?: string\n identity?: string | Record<string, unknown>\n}\n\nexport interface NormalizedAthenaError {\n kind: AthenaErrorKind\n code: AthenaErrorCode\n category: AthenaErrorCategory\n retryable: boolean\n status?: number\n constraint?: string\n table?: string\n operation?: string\n message: string\n raw: unknown\n}\n\nexport interface AthenaErrorInput {\n code: AthenaErrorCode\n kind: AthenaErrorKind\n category: AthenaErrorCategory\n message: string\n status?: number\n retryable?: boolean\n requestId?: string\n context?: AthenaOperationContext\n raw?: unknown\n}\n\nexport interface UnwrapOptions {\n allowNull?: boolean\n context?: AthenaOperationContext\n}\n\nexport interface UnwrapOneOptions extends UnwrapOptions {\n requireExactlyOne?: boolean\n}\n\nexport interface IntCoercionOptions {\n strictBigInt?: boolean\n min?: number\n max?: number\n}\n\nexport type RetryBackoffStrategy =\n | 'linear'\n | 'exponential'\n | ((attempt: number, error: unknown) => number)\n\nexport interface RetryConfig {\n retries: number\n baseDelayMs?: number\n maxDelayMs?: number\n backoff?: RetryBackoffStrategy\n jitter?: boolean | number\n shouldRetry?: (error: unknown, attempt: number) => boolean | Promise<boolean>\n}\n\nexport interface RequireAffectedOptions {\n min?: number\n}\n\n/**\n * Parses a string-based boolean flag with a deterministic fallback.\n *\n * Accepts common truthy/falsey token variants used by env vars and CLI flags.\n */\nexport function parseBooleanFlag(\n rawValue: string | undefined,\n fallback: boolean,\n): boolean {\n return parseBooleanFlagUtil(rawValue, fallback)\n}\n\nexport class AthenaError extends Error {\n readonly code: AthenaErrorCode\n readonly kind: AthenaErrorKind\n readonly category: AthenaErrorCategory\n readonly status?: number\n readonly retryable: boolean\n readonly requestId?: string\n readonly context?: AthenaOperationContext\n readonly raw?: unknown\n\n constructor(input: AthenaErrorInput) {\n super(input.message)\n this.name = 'AthenaError'\n this.code = input.code\n this.kind = input.kind\n this.category = input.category\n this.status = input.status\n this.retryable = input.retryable ?? false\n this.requestId = input.requestId\n this.context = input.context\n this.raw = input.raw\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\n for (const value of values) {\n if (typeof value === 'string' && value.trim().length > 0) {\n return value.trim()\n }\n }\n return undefined\n}\n\nfunction messageFromUnknownError(error: unknown): string | undefined {\n if (typeof error === 'string' && error.trim().length > 0) {\n return error.trim()\n }\n if (error instanceof Error && error.message.trim().length > 0) {\n return error.message.trim()\n }\n if (!isRecord(error)) {\n return undefined\n }\n return firstNonEmptyString(error.message, error.error, error.details)\n}\n\nfunction gatewayCodeFromUnknownError(error: unknown): AthenaGatewayErrorCode | undefined {\n if (!isRecord(error) || typeof error.gatewayCode !== 'string') {\n return undefined\n }\n return error.gatewayCode as AthenaGatewayErrorCode\n}\n\nfunction isAthenaResultErrorLike(\n value: unknown,\n): value is {\n message: string\n athenaCode?: AthenaErrorCode\n kind?: AthenaErrorKind\n category?: AthenaErrorCategory\n retryable?: boolean\n status?: number\n constraint?: string\n table?: string\n operation?: string\n raw?: unknown\n} {\n return (\n isRecord(value) &&\n typeof value.message === 'string' &&\n (value.athenaCode === undefined || isAthenaErrorCode(value.athenaCode)) &&\n (value.kind === undefined || isAthenaErrorKind(value.kind)) &&\n (value.category === undefined || isAthenaErrorCategory(value.category)) &&\n (value.retryable === undefined || typeof value.retryable === 'boolean') &&\n (value.status === undefined || typeof value.status === 'number')\n )\n}\n\nfunction isAthenaErrorKind(value: unknown): value is AthenaErrorKind {\n return (\n value === 'unique_violation' ||\n value === 'not_found' ||\n value === 'validation' ||\n value === 'auth' ||\n value === 'rate_limit' ||\n value === 'transient' ||\n value === 'unknown'\n )\n}\n\nfunction isAthenaErrorCode(value: unknown): value is AthenaErrorCode {\n return (\n value === 'UNIQUE_VIOLATION' ||\n value === 'NOT_FOUND' ||\n value === 'VALIDATION_FAILED' ||\n value === 'AUTH_UNAUTHORIZED' ||\n value === 'AUTH_FORBIDDEN' ||\n value === 'RATE_LIMITED' ||\n value === 'NETWORK_UNAVAILABLE' ||\n value === 'TRANSIENT_FAILURE' ||\n value === 'HTTP_FAILURE' ||\n value === 'UNKNOWN'\n )\n}\n\nfunction isAthenaErrorCategory(value: unknown): value is AthenaErrorCategory {\n return (\n value === 'transport' ||\n value === 'client' ||\n value === 'server' ||\n value === 'database' ||\n value === 'unknown'\n )\n}\n\nfunction isNormalizedAthenaError(value: unknown): value is NormalizedAthenaError {\n return (\n isRecord(value) &&\n isAthenaErrorKind(value.kind) &&\n isAthenaErrorCode(value.code) &&\n isAthenaErrorCategory(value.category) &&\n typeof value.retryable === 'boolean' &&\n typeof value.message === 'string' &&\n 'raw' in value\n )\n}\n\nfunction withContextOverrides(\n normalized: NormalizedAthenaError,\n context?: AthenaOperationContext,\n): NormalizedAthenaError {\n if (!context?.table && !context?.operation) {\n return normalized\n }\n\n return {\n ...normalized,\n table: context.table ?? normalized.table,\n operation: context.operation ?? normalized.operation,\n }\n}\n\nfunction resolveAttachedNormalizedError(resultOrError: unknown): NormalizedAthenaError | undefined {\n if (!isRecord(resultOrError)) return undefined\n if (!('__athenaNormalizedError' in resultOrError)) return undefined\n const candidate = resultOrError.__athenaNormalizedError\n return isNormalizedAthenaError(candidate) ? candidate : undefined\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n const serialized = JSON.stringify(value)\n return serialized ?? String(value)\n } catch {\n return '[unserializable]'\n }\n}\n\nfunction contextHint(context?: AthenaOperationContext): string | undefined {\n if (!context?.identity) return undefined\n const identity =\n typeof context.identity === 'string' ? context.identity : safeStringify(context.identity)\n return `Identity: ${identity}`\n}\n\nfunction isAthenaResultLike(value: unknown): value is AthenaResult<unknown> {\n return (\n isRecord(value) &&\n 'status' in value &&\n 'error' in value &&\n 'data' in value &&\n typeof value.status === 'number'\n )\n}\n\nfunction operationFromDetails(details?: AthenaGatewayErrorDetails | null): string | undefined {\n if (!details?.endpoint) return undefined\n if (details.endpoint === '/gateway/fetch' || details.endpoint === '/gateway/query') return 'select'\n if (details.endpoint === '/gateway/insert') return 'insert'\n if (details.endpoint === '/gateway/update') return 'update'\n if (details.endpoint === '/gateway/delete') return 'delete'\n if (details.endpoint === '/gateway/rpc' || details.endpoint.startsWith('/rpc/')) return 'rpc'\n return undefined\n}\n\nfunction matchRegex(input: string, patterns: RegExp[]): string | undefined {\n for (const pattern of patterns) {\n const match = pattern.exec(input)\n if (match?.[1]) return match[1]\n }\n return undefined\n}\n\nfunction extractConstraint(message: string): string | undefined {\n return matchRegex(message, [\n /unique constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n /constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n ])\n}\n\nfunction extractTable(message: string): string | undefined {\n return matchRegex(message, [\n /(?:table|relation)\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n /on\\s+table\\s+([a-zA-Z0-9_.]+)/i,\n ])\n}\n\nfunction classifyKind(status: number | undefined, code: AthenaGatewayErrorCode | undefined, message: string): AthenaErrorKind {\n const lower = message.toLowerCase()\n const hasUniquePattern =\n lower.includes('unique constraint') ||\n lower.includes('duplicate key') ||\n lower.includes('already exists') ||\n lower.includes('duplicate')\n const hasNotFoundPattern = lower.includes('not found') || lower.includes('no rows')\n const hasValidationPattern =\n lower.includes('validation') || lower.includes('invalid') || lower.includes('malformed')\n const hasAuthPattern =\n lower.includes('unauthorized') || lower.includes('forbidden') || lower.includes('auth')\n const hasRateLimitPattern = lower.includes('rate limit') || lower.includes('too many requests')\n const hasTransientPattern =\n lower.includes('timeout') ||\n lower.includes('temporar') ||\n lower.includes('connection reset') ||\n lower.includes('socket') ||\n lower.includes('deadlock')\n\n if (status === 409 || hasUniquePattern) return 'unique_violation'\n if (status === 404 || hasNotFoundPattern) return 'not_found'\n if (status === 401 || status === 403 || hasAuthPattern) return 'auth'\n if (status === 429 || hasRateLimitPattern) return 'rate_limit'\n if (code === 'INVALID_URL') return 'validation'\n if (status === 400 || status === 422 || hasValidationPattern) return 'validation'\n if (code === 'NETWORK_ERROR' || status === 0 || (status !== undefined && status >= 500) || hasTransientPattern) {\n return 'transient'\n }\n return 'unknown'\n}\n\nfunction toAthenaErrorCode(\n kind: AthenaErrorKind,\n status: number | undefined,\n gatewayCode?: AthenaGatewayErrorCode,\n): AthenaErrorCode {\n if (gatewayCode === 'INVALID_URL') {\n return AthenaErrorCode.ValidationFailed\n }\n\n if (gatewayCode === 'NETWORK_ERROR' || (kind === 'transient' && status === 0)) {\n return AthenaErrorCode.NetworkUnavailable\n }\n\n switch (kind) {\n case 'unique_violation':\n return AthenaErrorCode.UniqueViolation\n case 'not_found':\n return AthenaErrorCode.NotFound\n case 'validation':\n return AthenaErrorCode.ValidationFailed\n case 'rate_limit':\n return AthenaErrorCode.RateLimited\n case 'auth':\n if (status === 403) {\n return AthenaErrorCode.AuthForbidden\n }\n return AthenaErrorCode.AuthUnauthorized\n case 'transient':\n return status !== undefined && status >= 500\n ? AthenaErrorCode.HttpFailure\n : AthenaErrorCode.TransientFailure\n case 'unknown':\n default:\n return status !== undefined && status >= 400\n ? AthenaErrorCode.HttpFailure\n : AthenaErrorCode.Unknown\n }\n}\n\nfunction toAthenaErrorCategory(kind: AthenaErrorKind, status: number | undefined): AthenaErrorCategory {\n if (kind === 'transient' && (status === 0 || status === undefined)) {\n return AthenaErrorCategory.Transport\n }\n if (kind === 'unique_violation') return AthenaErrorCategory.Database\n if (kind === 'validation' || kind === 'auth' || kind === 'not_found') return AthenaErrorCategory.Client\n if (kind === 'rate_limit' || kind === 'transient') return AthenaErrorCategory.Server\n return AthenaErrorCategory.Unknown\n}\n\nfunction isRetryable(kind: AthenaErrorKind, status: number | undefined): boolean {\n if (kind === 'rate_limit' || kind === 'transient') return true\n return status !== undefined && status >= 500\n}\n\nfunction toGatewayCode(kind: AthenaErrorKind, status?: number): AthenaGatewayErrorCode {\n if (kind === 'transient' && (status === 0 || status === undefined)) return 'NETWORK_ERROR'\n if (kind === 'validation') return 'INVALID_JSON'\n if (status !== undefined && status >= 400) return 'HTTP_ERROR'\n return 'UNKNOWN_ERROR'\n}\n\nfunction toAthenaGatewayError(\n source: unknown,\n fallbackMessage: string,\n context?: AthenaOperationContext,\n): AthenaGatewayError {\n if (isAthenaGatewayError(source)) {\n return source\n }\n\n if (isAthenaResultLike(source) && source.errorDetails) {\n const message =\n messageFromUnknownError(source.error) ??\n source.errorDetails.message ??\n fallbackMessage\n return new AthenaGatewayError({\n code: source.errorDetails.code,\n message,\n status: source.status,\n endpoint: source.errorDetails.endpoint,\n method: source.errorDetails.method,\n requestId: source.errorDetails.requestId,\n hint:\n (isRecord(source.error) ? firstNonEmptyString(source.error.hint) : undefined) ??\n source.errorDetails.hint,\n cause:\n (isRecord(source.error) ? firstNonEmptyString(source.error.cause) : undefined) ??\n source.errorDetails.cause,\n })\n }\n\n const normalized = normalizeAthenaError(source, context)\n const message =\n isAthenaResultLike(source) && source.error == null && source.errorDetails == null\n ? fallbackMessage\n : normalized.message || fallbackMessage\n\n return new AthenaGatewayError({\n code: toGatewayCode(normalized.kind, normalized.status),\n message,\n status: normalized.status ?? 0,\n hint:\n normalized.constraint != null\n ? `Constraint: ${normalized.constraint}`\n : contextHint(context),\n cause: typeof normalized.raw === 'string' ? normalized.raw : safeStringify(normalized.raw),\n })\n}\n\n/**\n * Returns `true` when a result is successful (`2xx` status and no `error`).\n */\nexport function isOk<T>(result: AthenaResult<T>): boolean {\n return result.error == null && result.status >= 200 && result.status < 300\n}\n\n/**\n * @deprecated Prefer `result.error` on failed `AthenaResult` values and the\n * structured fields already attached to thrown SDK errors. This helper is\n * retained for compatibility with mixed unknown inputs.\n *\n * Normalizes any Athena failure shape into a stable, typed error envelope.\n *\n * Accepts `AthenaResult`, `AthenaGatewayError`, native `Error`, or unknown values.\n * Optional `context` can override inferred table/operation metadata for clearer diagnostics.\n */\nexport function normalizeAthenaError(\n resultOrError: unknown,\n context?: AthenaOperationContext,\n): NormalizedAthenaError {\n const attached = resolveAttachedNormalizedError(resultOrError)\n if (attached) {\n return withContextOverrides(attached, context)\n }\n\n if (isAthenaResultLike(resultOrError)) {\n if (isAthenaResultErrorLike(resultOrError.error)) {\n return {\n kind: resultOrError.error.kind ?? classifyKind(resultOrError.status, gatewayCodeFromUnknownError(resultOrError.error), resultOrError.error.message),\n code:\n resultOrError.error.athenaCode ??\n toAthenaErrorCode(\n resultOrError.error.kind ??\n classifyKind(\n resultOrError.status,\n gatewayCodeFromUnknownError(resultOrError.error),\n resultOrError.error.message,\n ),\n resultOrError.error.status ?? resultOrError.status,\n gatewayCodeFromUnknownError(resultOrError.error),\n ),\n category:\n resultOrError.error.category ??\n toAthenaErrorCategory(\n resultOrError.error.kind ??\n classifyKind(\n resultOrError.status,\n gatewayCodeFromUnknownError(resultOrError.error),\n resultOrError.error.message,\n ),\n resultOrError.error.status ?? resultOrError.status,\n ),\n retryable:\n resultOrError.error.retryable ??\n isRetryable(\n resultOrError.error.kind ??\n classifyKind(\n resultOrError.status,\n gatewayCodeFromUnknownError(resultOrError.error),\n resultOrError.error.message,\n ),\n resultOrError.error.status ?? resultOrError.status,\n ),\n status: resultOrError.error.status ?? resultOrError.status,\n constraint: resultOrError.error.constraint,\n table: context?.table ?? resultOrError.error.table,\n operation: context?.operation ?? resultOrError.error.operation,\n message: resultOrError.error.message,\n raw: resultOrError.error.raw ?? resultOrError.raw,\n }\n }\n\n const details = resultOrError.errorDetails\n const message =\n messageFromUnknownError(resultOrError.error) ??\n details?.message ??\n `Athena ${context?.operation ?? operationFromDetails(details) ?? 'request'} failed`\n const operation = context?.operation ?? operationFromDetails(details)\n const table = context?.table ?? extractTable(message)\n const constraint = extractConstraint(message)\n const gatewayCode = details?.code ?? gatewayCodeFromUnknownError(resultOrError.error)\n const kind = classifyKind(resultOrError.status, gatewayCode, message)\n const code = toAthenaErrorCode(kind, resultOrError.status, gatewayCode)\n const category = toAthenaErrorCategory(kind, resultOrError.status)\n return {\n kind,\n code,\n category,\n retryable: isRetryable(kind, resultOrError.status),\n status: resultOrError.status,\n constraint,\n table,\n operation,\n message,\n raw: resultOrError.raw,\n }\n }\n\n if (isAthenaGatewayError(resultOrError)) {\n const details = resultOrError.toDetails()\n const operation = context?.operation ?? operationFromDetails(details)\n const table = context?.table ?? extractTable(resultOrError.message)\n const constraint = extractConstraint(resultOrError.message)\n const kind = classifyKind(resultOrError.status, resultOrError.code, resultOrError.message)\n const code = toAthenaErrorCode(kind, resultOrError.status, resultOrError.code)\n const category = toAthenaErrorCategory(kind, resultOrError.status)\n return {\n kind,\n code,\n category,\n retryable: isRetryable(kind, resultOrError.status),\n status: resultOrError.status,\n constraint,\n table,\n operation,\n message: resultOrError.message,\n raw: resultOrError,\n }\n }\n\n if (resultOrError instanceof Error) {\n const maybeStatus =\n isRecord(resultOrError) && typeof resultOrError.status === 'number'\n ? resultOrError.status\n : undefined\n const kind = classifyKind(maybeStatus, undefined, resultOrError.message)\n return {\n kind,\n code: toAthenaErrorCode(kind, maybeStatus),\n category: toAthenaErrorCategory(kind, maybeStatus),\n retryable: isRetryable(kind, maybeStatus),\n status: maybeStatus,\n constraint: extractConstraint(resultOrError.message),\n table: context?.table ?? extractTable(resultOrError.message),\n operation: context?.operation,\n message: resultOrError.message,\n raw: resultOrError,\n }\n }\n\n const message = typeof resultOrError === 'string' ? resultOrError : 'Unknown Athena error'\n const kind = classifyKind(undefined, undefined, message)\n return {\n kind,\n code: toAthenaErrorCode(kind, undefined),\n category: toAthenaErrorCategory(kind, undefined),\n retryable: isRetryable(kind, undefined),\n status: undefined,\n constraint: extractConstraint(message),\n table: context?.table ?? extractTable(message),\n operation: context?.operation,\n message,\n raw: resultOrError,\n }\n}\n\n/**\n * Unwraps a successful result into a row array.\n *\n * - Throws on failed results.\n * - Converts `null` data to an empty array.\n * - Wraps scalar data in a single-element array.\n */\nexport function unwrapRows<T>(\n result: AthenaResult<T[] | T | null>,\n options?: UnwrapOptions,\n): T[] {\n if (!isOk(result)) {\n throw toAthenaGatewayError(result, 'Athena request failed', options?.context)\n }\n if (result.data == null) return []\n return Array.isArray(result.data) ? result.data : [result.data]\n}\n\n/**\n * Unwraps successful result data from `AthenaResult<T | null>`.\n *\n * By default, `null` data throws. Pass `{ allowNull: true }` to permit nullable payloads.\n */\nexport function unwrap<T>(\n result: AthenaResult<T | null>,\n options: UnwrapOptions & { allowNull: true },\n): T | null\nexport function unwrap<T>(result: AthenaResult<T | null>, options?: UnwrapOptions): T\nexport function unwrap<T>(\n result: AthenaResult<T | null>,\n options?: UnwrapOptions,\n): T | null {\n if (!isOk(result)) {\n throw toAthenaGatewayError(result, 'Athena request failed', options?.context)\n }\n if (result.data == null && !options?.allowNull) {\n throw toAthenaGatewayError(result, 'Expected data but received null', options?.context)\n }\n return result.data\n}\n\n/**\n * Unwraps the first row from a successful result that may contain arrays/scalars/null.\n *\n * - Throws on failed results.\n * - Throws when no row exists unless `allowNull: true` is provided.\n * - Optionally enforces exact cardinality via `requireExactlyOne`.\n */\nexport function unwrapOne<T>(\n result: AthenaResult<T[] | T | null>,\n options: UnwrapOneOptions & { allowNull: true },\n): T | null\nexport function unwrapOne<T>(result: AthenaResult<T[] | T | null>, options?: UnwrapOneOptions): T\nexport function unwrapOne<T>(\n result: AthenaResult<T[] | T | null>,\n options?: UnwrapOneOptions,\n): T | null {\n const rows = unwrapRows(result, options)\n if (!rows.length) {\n if (options?.allowNull) return null\n throw toAthenaGatewayError(result, 'Expected one row but received none', options?.context)\n }\n if (options?.requireExactlyOne && rows.length !== 1) {\n throw toAthenaGatewayError(\n result,\n `Expected exactly one row but received ${rows.length}`,\n options.context,\n )\n }\n return rows[0]\n}\n\n/**\n * Asserts that an Athena result is successful.\n *\n * Returns the original result for fluent composition and throws `AthenaGatewayError` on failure.\n */\nexport function requireSuccess<T>(\n result: AthenaResult<T>,\n context?: AthenaOperationContext,\n): AthenaResult<T> {\n if (!isOk(result)) {\n throw toAthenaGatewayError(\n result,\n `Athena ${context?.operation ?? 'request'} failed`,\n context,\n )\n }\n return result\n}\n\n/**\n * Enforces mutation postconditions based on `result.count`.\n *\n * - Validates success first.\n * - Requires a non-null count in the response.\n * - Validates `count >= min` (default: `1`).\n *\n * Useful for guaranteeing that critical writes actually affected rows.\n */\nexport function requireAffected<T>(\n result: AthenaResult<T>,\n options?: RequireAffectedOptions,\n context?: AthenaOperationContext,\n): number {\n requireSuccess(result, context)\n\n const minimum = options?.min ?? 1\n const count = result.count\n if (count == null) {\n throw new AthenaGatewayError({\n code: 'UNKNOWN_ERROR',\n status: result.status,\n message: 'Expected affected row count but response.count is missing',\n hint: 'Set call option { count: \"exact\" } for mutation postcondition checks.',\n cause: safeStringify(result.raw),\n })\n }\n\n if (count < minimum) {\n throw new AthenaGatewayError({\n code: 'UNKNOWN_ERROR',\n status: result.status,\n message: `Expected at least ${minimum} affected rows but received ${count}`,\n hint: contextHint(context),\n cause: safeStringify(result.raw),\n })\n }\n\n return count\n}\n\nfunction applyBounds(value: number, options?: IntCoercionOptions): number | null {\n if (options?.min !== undefined && value < options.min) return null\n if (options?.max !== undefined && value > options.max) return null\n return value\n}\n\nfunction parseIntegerString(value: string): number | null {\n const normalized = value.trim()\n if (!/^[-+]?\\d+$/.test(normalized)) return null\n const parsed = Number(normalized)\n if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) return null\n return parsed\n}\n\n/**\n * Safely coerces `unknown` values into finite integers.\n *\n * Returns `null` when coercion fails or bounds/strict bigint checks are violated.\n */\nexport function coerceInt(value: unknown, options?: IntCoercionOptions): number | null {\n if (value == null) return null\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value) || !Number.isInteger(value)) return null\n return applyBounds(value, options)\n }\n\n if (typeof value === 'string') {\n const parsed = parseIntegerString(value)\n if (parsed == null) return null\n return applyBounds(parsed, options)\n }\n\n if (typeof value === 'bigint') {\n if (options?.strictBigInt) {\n if (value > BigInt(Number.MAX_SAFE_INTEGER) || value < BigInt(Number.MIN_SAFE_INTEGER)) {\n return null\n }\n }\n const parsed = Number(value)\n if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) return null\n return applyBounds(parsed, options)\n }\n\n return null\n}\n\n/**\n * Strict integer assertion wrapper around `coerceInt`.\n *\n * Throws a `TypeError` with the provided label when coercion fails.\n */\nexport function assertInt(value: unknown, label = 'value', options?: IntCoercionOptions): number {\n const parsed = coerceInt(value, options)\n if (parsed == null) {\n throw new TypeError(`${label} must be a finite integer`)\n }\n return parsed\n}\n\nfunction defaultShouldRetry(error: unknown): boolean {\n const normalized = normalizeAthenaError(error)\n return normalized.kind === 'transient' || normalized.kind === 'rate_limit'\n}\n\nfunction computeDelayMs(\n attempt: number,\n error: unknown,\n config: Required<Pick<RetryConfig, 'baseDelayMs' | 'backoff' | 'maxDelayMs' | 'jitter'>>,\n): number {\n const baseDelay = config.baseDelayMs\n const rawDelay =\n typeof config.backoff === 'function'\n ? config.backoff(attempt, error)\n : config.backoff === 'linear'\n ? baseDelay * attempt\n : baseDelay * Math.pow(2, attempt - 1)\n\n const safeDelay = Number.isFinite(rawDelay) ? Math.max(0, rawDelay) : 0\n const clamped = Math.min(config.maxDelayMs, safeDelay)\n const jitterFactor =\n typeof config.jitter === 'number'\n ? Math.max(0, Math.min(1, config.jitter))\n : config.jitter\n ? 0.2\n : 0\n\n if (!jitterFactor) return clamped\n const deviation = clamped * jitterFactor\n const offset = (Math.random() * 2 - 1) * deviation\n return Math.max(0, clamped + offset)\n}\n\nfunction sleep(ms: number): Promise<void> {\n if (ms <= 0) return Promise.resolve()\n return new Promise(resolve => {\n setTimeout(resolve, ms)\n })\n}\n\n/**\n * @deprecated Prefer `retryReads` for standard SDK-managed read\n * retries, or a call-site retry policy when you need custom write/replay\n * behavior. This helper is retained for compatibility.\n *\n * Retries an async operation with configurable backoff and retry policy.\n *\n * `retries` represents additional attempts after the first failure.\n * By default, transient and rate-limit errors are retried.\n */\nexport async function withRetry<T>(config: RetryConfig, fn: () => Promise<T>): Promise<T> {\n const retries = Math.max(0, Math.trunc(config.retries))\n const shouldRetry = config.shouldRetry ?? defaultShouldRetry\n const resolvedConfig = {\n baseDelayMs: config.baseDelayMs ?? 100,\n maxDelayMs: config.maxDelayMs ?? 10_000,\n backoff: config.backoff ?? 'exponential',\n jitter: config.jitter ?? false,\n } satisfies Required<Pick<RetryConfig, 'baseDelayMs' | 'backoff' | 'maxDelayMs' | 'jitter'>>\n\n for (let attempts = 0; attempts <= retries; attempts += 1) {\n try {\n return await fn()\n } catch (error) {\n if (attempts >= retries) {\n throw error\n }\n\n const currentAttempt = attempts + 1\n const retry = await shouldRetry(error, currentAttempt)\n if (!retry) {\n throw error\n }\n\n const delay = computeDelayMs(currentAttempt, error, resolvedConfig)\n await sleep(delay)\n }\n }\n\n throw new Error('withRetry reached an unexpected state')\n}\n","import { normalizeAthenaError, withRetry } from './auxiliaries.ts'\nimport type {\n AthenaOperationContext,\n NormalizedAthenaError,\n RetryConfig,\n} from './auxiliaries.ts'\nimport type {\n AthenaGatewayErrorDetails,\n AthenaGatewayResponse,\n} from './gateway/types.ts'\n\nconst ATHENA_NORMALIZED_ERROR_KEY = '__athenaNormalizedError' as const\n\nconst READ_RETRY_CONFIG: RetryConfig = {\n retries: 2,\n baseDelayMs: 100,\n maxDelayMs: 1_000,\n backoff: 'exponential',\n jitter: true,\n}\n\nexport interface AthenaResult<T> {\n data: T | null\n error: AthenaResultError | null\n statusText?: string | null\n /**\n * @deprecated Prefer `error?.gatewayCode`, `error?.hint`, and related fields on `error`.\n */\n errorDetails?: AthenaGatewayErrorDetails | null\n status: number\n count?: number | null\n raw: unknown\n}\n\nexport interface AthenaResultError {\n message: string\n code: string | null\n athenaCode: NormalizedAthenaError['code']\n gatewayCode?: AthenaGatewayErrorDetails['code'] | null\n kind: NormalizedAthenaError['kind']\n category: NormalizedAthenaError['category']\n retryable: boolean\n details: unknown | null\n hint: string | null\n status: number\n statusText: string | null\n constraint?: string\n table?: string\n operation?: string\n endpoint?: AthenaGatewayErrorDetails['endpoint']\n method?: AthenaGatewayErrorDetails['method']\n requestId?: string\n cause?: string\n raw: unknown\n}\n\nexport type AthenaResultFormatter = <T>(\n response: AthenaGatewayResponse<T>,\n context?: AthenaOperationContext,\n) => AthenaResult<T>\n\nfunction formatResult<T>(response: AthenaGatewayResponse<T>): AthenaResult<T> {\n const result: AthenaResult<T> = {\n data: response.data ?? null,\n error: null,\n errorDetails: response.errorDetails ?? null,\n status: response.status,\n statusText: response.statusText ?? null,\n raw: response.raw,\n }\n if (response.count !== undefined) {\n result.count = response.count\n }\n return result\n}\n\nfunction attachNormalizedError<T>(\n result: AthenaResult<T>,\n normalizedError: NormalizedAthenaError,\n): void {\n Object.defineProperty(result, ATHENA_NORMALIZED_ERROR_KEY, {\n value: normalizedError,\n enumerable: false,\n configurable: true,\n writable: false,\n })\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\n for (const value of values) {\n if (typeof value === 'string' && value.trim().length > 0) {\n return value.trim()\n }\n }\n return undefined\n}\n\nfunction resolveStructuredErrorPayload(raw: unknown): Record<string, unknown> | null {\n if (!isRecord(raw)) return null\n return isRecord(raw.error) ? raw.error : raw\n}\n\nfunction resolveStructuredErrorDetails(\n payload: Record<string, unknown> | null,\n message: string,\n): unknown | null {\n if (!payload || !('details' in payload)) {\n return null\n }\n const details = payload.details\n if (details == null) {\n return null\n }\n if (typeof details === 'string' && details.trim() === message.trim()) {\n return null\n }\n return details\n}\n\nfunction createResultError<T>(\n response: AthenaGatewayResponse<T>,\n result: AthenaResult<T>,\n normalized: NormalizedAthenaError,\n): AthenaResultError {\n const rawRecord = isRecord(response.raw) ? response.raw : null\n const payload = resolveStructuredErrorPayload(response.raw)\n const message =\n firstNonEmptyString(\n response.error,\n payload?.message,\n payload?.error,\n payload?.details,\n response.errorDetails?.message,\n normalized.message,\n ) ?? normalized.message\n const statusText = firstNonEmptyString(response.statusText, rawRecord?.statusText) ?? null\n const hint = firstNonEmptyString(payload?.hint, response.errorDetails?.hint) ?? null\n const code = firstNonEmptyString(payload?.code) ?? normalized.code\n const details =\n resolveStructuredErrorDetails(payload, message) ?? response.errorDetails?.cause ?? null\n\n return {\n message,\n code,\n athenaCode: normalized.code,\n gatewayCode: response.errorDetails?.code ?? null,\n kind: normalized.kind,\n category: normalized.category,\n retryable: normalized.retryable,\n details,\n hint,\n status: result.status,\n statusText,\n constraint: normalized.constraint,\n table: normalized.table,\n operation: normalized.operation,\n endpoint: response.errorDetails?.endpoint,\n method: response.errorDetails?.method,\n requestId: response.errorDetails?.requestId,\n cause: response.errorDetails?.cause,\n raw: result.raw,\n }\n}\n\nexport function createResultFormatter(): AthenaResultFormatter {\n return <T>(\n response: AthenaGatewayResponse<T>,\n context?: AthenaOperationContext,\n ): AthenaResult<T> => {\n const result = formatResult(response)\n if (response.error == null && response.errorDetails == null) {\n return result\n }\n const normalizedError = normalizeAthenaError(\n {\n ...result,\n error: response.error ?? response.errorDetails?.message ?? null,\n },\n context,\n )\n result.error = createResultError(response, result, normalizedError)\n attachNormalizedError(result, normalizedError)\n return result\n }\n}\n\nexport async function executeRead<T>(\n behavior: { retryReads?: boolean } | undefined,\n runner: () => Promise<AthenaResult<T>>,\n): Promise<AthenaResult<T>> {\n if (!behavior?.retryReads) {\n return runner()\n }\n\n let lastRetryableResult: AthenaResult<T> | undefined\n let lastRetrySignal: AthenaResultError | null = null\n try {\n return await withRetry(\n {\n ...READ_RETRY_CONFIG,\n shouldRetry: error =>\n error === lastRetrySignal || normalizeAthenaError(error).retryable,\n },\n async () => {\n const result = await runner()\n if (result.error?.retryable) {\n lastRetryableResult = result\n lastRetrySignal = result.error\n throw lastRetrySignal\n }\n return result\n },\n )\n } catch (error) {\n if (lastRetryableResult && error === lastRetrySignal) {\n return lastRetryableResult\n }\n throw error\n }\n}\n\nexport function toSingleResult<Result>(\n response: AthenaResult<Result>,\n): AthenaResult<Result extends Array<infer Item> ? Item | null : Result | null> {\n const payload = response.data\n const singleData = Array.isArray(payload)\n ? payload.length\n ? payload[0]\n : null\n : (payload ?? null)\n return {\n ...response,\n data: singleData as Result extends Array<infer Item> ? Item | null : Result | null,\n }\n}\n\n","import type {\n AthenaFetchPayload,\n AthenaGatewayCondition,\n AthenaJsonArray,\n AthenaJsonObject,\n AthenaJsonValue,\n AthenaSortBy,\n} from './types.ts'\n\nconst IDENTIFIER_SEGMENT_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/\n\nfunction isIdentifierPath(value: string): boolean {\n const segments = value.split('.').map(segment => segment.trim())\n return segments.length > 1 && segments.every(segment => IDENTIFIER_SEGMENT_PATTERN.test(segment))\n}\n\nfunction extractRelationHead(raw: string): string {\n const trimmed = raw.trim()\n if (!trimmed) return ''\n\n const aliasIndex = trimmed.indexOf(':')\n const withoutAlias = aliasIndex >= 0 ? trimmed.slice(aliasIndex + 1).trim() : trimmed\n const modifierIndex = withoutAlias.indexOf('!')\n return (modifierIndex >= 0 ? withoutAlias.slice(0, modifierIndex) : withoutAlias).trim()\n}\n\nfunction hasSchemaQualifiedRelationToken(select: string): boolean {\n let singleQuoted = false\n let doubleQuoted = false\n let tokenStart = 0\n\n for (let index = 0; index < select.length; index += 1) {\n const char = select[index]\n const next = index + 1 < select.length ? select[index + 1] : ''\n\n if (singleQuoted) {\n if (char === \"'\" && next === \"'\") {\n index += 1\n continue\n }\n if (char === \"'\") {\n singleQuoted = false\n }\n continue\n }\n\n if (doubleQuoted) {\n if (char === '\"' && next === '\"') {\n index += 1\n continue\n }\n if (char === '\"') {\n doubleQuoted = false\n }\n continue\n }\n\n if (char === \"'\") {\n singleQuoted = true\n continue\n }\n\n if (char === '\"') {\n doubleQuoted = true\n continue\n }\n\n if (char === '(') {\n const relationHead = extractRelationHead(select.slice(tokenStart, index))\n if (isIdentifierPath(relationHead)) {\n return true\n }\n tokenStart = index + 1\n continue\n }\n\n if (char === ',' || char === ')') {\n tokenStart = index + 1\n }\n }\n\n return false\n}\n\nfunction toStructuredSelectString(columns: string | string[]): string {\n return Array.isArray(columns) ? columns.join(',') : columns\n}\n\ntype StructuredWhereOperand =\n | AthenaJsonValue\n | AthenaJsonArray\n | AthenaJsonObject\n\nfunction buildStructuredWhere(\n conditions: AthenaGatewayCondition[] | undefined,\n): AthenaJsonObject | null | undefined {\n if (!conditions?.length) return undefined\n\n const where: AthenaJsonObject = {}\n\n for (const condition of conditions) {\n if (!condition.column) {\n return null\n }\n if (condition.value_cast !== undefined) {\n return null\n }\n\n const operand = condition.value as StructuredWhereOperand | undefined\n const operator = condition.operator\n if (operator === 'eq') {\n if (operand === undefined) return null\n } else if (operator === 'neq' || operator === 'gt' || operator === 'lt') {\n if (operand === undefined) return null\n } else if (operator === 'in') {\n if (!Array.isArray(operand)) return null\n } else {\n return null\n }\n\n const existing = where[condition.column]\n if (existing !== undefined && (typeof existing !== 'object' || existing === null || Array.isArray(existing))) {\n return null\n }\n\n const next = (existing as AthenaJsonObject | undefined) ?? {}\n if (Object.prototype.hasOwnProperty.call(next, operator)) {\n return null\n }\n next[operator] = operand as AthenaJsonValue | AthenaJsonArray\n where[condition.column] = next\n }\n\n return where\n}\n\nfunction buildStructuredOrderBy(order: AthenaSortBy | undefined): AthenaJsonObject | undefined {\n if (!order?.field) return undefined\n return {\n [order.field]: order.direction === 'descending' ? 'desc' : 'asc',\n }\n}\n\nexport interface StructuredSelectTransportInput {\n tableName: string\n columns: string | string[]\n conditions?: AthenaGatewayCondition[]\n limit?: number\n offset?: number\n order?: AthenaSortBy\n stripNulls: boolean\n count?: 'exact' | 'planned' | 'estimated'\n head?: boolean\n}\n\nexport interface StructuredSelectTransportResult {\n payload: AthenaFetchPayload\n select: string\n}\n\nexport function buildStructuredSelectTransport(\n input: StructuredSelectTransportInput,\n): StructuredSelectTransportResult | null | { error: string } {\n const select = toStructuredSelectString(input.columns).trim()\n if (!select || select === '*') {\n return null\n }\n\n if (!hasSchemaQualifiedRelationToken(select)) {\n return null\n }\n\n if (input.count !== undefined || input.head !== undefined) {\n return {\n error:\n 'Schema-qualified nested select strings require structured select transport, which does not support count/head options in athena-js yet.',\n }\n }\n\n const where = buildStructuredWhere(input.conditions)\n if (where === null) {\n return {\n error:\n 'Schema-qualified nested select strings only support eq, neq, gt, lt, and in filters in athena-js structured select transport.',\n }\n }\n\n return {\n select,\n payload: {\n table_name: input.tableName,\n select,\n where,\n orderBy: buildStructuredOrderBy(input.order),\n limit: input.limit,\n offset: input.offset,\n strip_nulls: input.stripNulls,\n },\n }\n}\n","import type {\n AthenaConditionArrayValue,\n AthenaConditionOperator,\n AthenaConditionValue,\n AthenaGatewayCondition,\n AthenaJsonValue,\n AthenaSortBy,\n} from './gateway/types.ts'\nimport type {\n AnyModelDef,\n DatabaseDef,\n ModelDef,\n ModelRelationMetadata,\n RegistryDef,\n SchemaDef,\n} from './schema/types.ts'\nimport type { RowOf } from './schema/types.ts'\nimport type { AthenaColumnKey, HasKnownSelectColumns } from './select-column-types.ts'\n\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>\ntype FilterColumnKey<Row> = Extract<keyof NonNullable<Row>, string>\ntype ResolvedFilterColumnKey<Row> = [FilterColumnKey<Row>] extends [never] ? string : FilterColumnKey<Row>\ntype KnownSelectColumnKey<Row> = AthenaColumnKey<Row>\n\nconst UUID_PATTERN =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n\ntype AthenaFilterOperator =\n | 'eq'\n | 'neq'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'like'\n | 'ilike'\n | 'is'\n | 'in'\n | 'contains'\n | 'containedBy'\n\ntype AthenaWherePrimitive = AthenaConditionValue\n\nexport type AthenaWhereOperatorInput = {\n eq?: AthenaConditionValue\n neq?: AthenaConditionValue\n gt?: AthenaConditionValue\n gte?: AthenaConditionValue\n lt?: AthenaConditionValue\n lte?: AthenaConditionValue\n like?: AthenaConditionValue\n ilike?: AthenaConditionValue\n is?: AthenaConditionValue\n in?: AthenaConditionArrayValue\n contains?: AthenaConditionArrayValue\n containedBy?: AthenaConditionArrayValue\n}\n\ntype AthenaWhereColumnInput<Row = AthenaRowShape> = Partial<\n Record<ResolvedFilterColumnKey<Row>, AthenaWherePrimitive | AthenaWhereOperatorInput>\n>\n\ntype AthenaBooleanSafeOperator = Exclude<AthenaFilterOperator, 'in' | 'contains' | 'containedBy'>\n\ntype AthenaWhereBooleanSafeOperatorInput = Partial<\n Record<AthenaBooleanSafeOperator, AthenaConditionValue>\n>\n\ntype AthenaWhereBooleanNotOperatorInput = {\n [K in AthenaBooleanSafeOperator]: {\n [P in K]: AthenaConditionValue\n } & Partial<Record<Exclude<AthenaBooleanSafeOperator, K>, never>>\n}[AthenaBooleanSafeOperator]\n\ntype AthenaStrictBooleanOperand<Keys extends string, Value> = {\n [K in Keys]: {\n [P in K]: Value\n } & Partial<Record<Exclude<Keys, K>, never>>\n}[Keys]\n\ntype AthenaNonEmptyArray<T> = [T, ...T[]]\n\nexport type AthenaWhereBooleanOperand<Row = AthenaRowShape> =\n string extends ResolvedFilterColumnKey<Row>\n ? AthenaWhereColumnInput<Row>\n : AthenaStrictBooleanOperand<\n ResolvedFilterColumnKey<Row>,\n AthenaWherePrimitive | AthenaWhereBooleanSafeOperatorInput\n >\n\ntype AthenaWhereNotOperand<Row = AthenaRowShape> =\n string extends ResolvedFilterColumnKey<Row>\n ? AthenaWhereColumnInput<Row>\n : AthenaStrictBooleanOperand<\n ResolvedFilterColumnKey<Row>,\n AthenaWherePrimitive | AthenaWhereBooleanNotOperatorInput\n >\n\nexport type AthenaWhere<Row = AthenaRowShape> = AthenaWhereColumnInput<Row> & {\n or?: string extends ResolvedFilterColumnKey<Row>\n ? Array<AthenaWhereColumnInput<Row>>\n : AthenaNonEmptyArray<AthenaWhereBooleanOperand<Row>>\n not?: AthenaWhereNotOperand<Row>\n}\n\nexport interface AthenaRelationSelectNode<TSelect extends AthenaSelectShape = AthenaSelectShape> {\n select: TSelect\n as?: string\n via?: string\n schema?: string\n}\n\nexport type AthenaSelectShape = Record<string, true | AthenaRelationSelectNode<AthenaSelectShape>>\n\ntype AthenaAllowedRelationSelectNodeKey = 'select' | 'as' | 'via' | 'schema'\n\n/**\n * Structural validation only (relation node shape). Nested relation target rows\n * are not model-checked here unless a richer context path is wired later.\n */\ntype AthenaStructuralValidatedSelectShape<TSelect> = {\n [K in keyof TSelect]:\n TSelect[K] extends true\n ? true\n : AthenaValidatedRelationSelectNode<TSelect[K]>\n}\n\ntype AthenaValidatedRelationSelectNode<TNode> =\n TNode extends { select: infer TChild }\n ? Exclude<keyof TNode, AthenaAllowedRelationSelectNodeKey> extends never\n ? TNode extends { schema: string; via: string }\n ? never\n : TChild extends Record<string, unknown>\n ? {\n [K in keyof TNode]:\n K extends 'select'\n ? AthenaStructuralValidatedSelectShape<TChild>\n : K extends AthenaAllowedRelationSelectNodeKey\n ? TNode[K]\n : never\n }\n : never\n : never\n : never\n\n/**\n * Compile-time validation for `findMany({ select })`.\n *\n * - When `Row` has known model keys: scalar `true` entries must use those keys.\n * - Relation nodes (`{ select: ... }`) keep structural validation and may use\n * non-row keys (relation names are not row columns).\n * - When `Row` is untyped: free-form keys (same as pre-model behavior).\n */\nexport type AthenaValidatedSelectShape<Row, TSelect> = HasKnownSelectColumns<Row> extends true\n ? {\n [K in keyof TSelect]:\n TSelect[K] extends true\n ? K extends KnownSelectColumnKey<Row>\n ? true\n : never\n : AthenaValidatedRelationSelectNode<TSelect[K]>\n }\n : AthenaStructuralValidatedSelectShape<TSelect>\n\ntype GenericRegistryDef = RegistryDef<\n Record<string, DatabaseDef<Record<string, SchemaDef<Record<string, AnyModelDef>>>>>\n>\n\ntype AthenaOrderByDirectionInput =\n | 'asc'\n | 'desc'\n | 'ascending'\n | 'descending'\n | boolean\n | {\n ascending?: boolean\n }\n\nexport type AthenaOrderBy<Row = AthenaRowShape> =\n | {\n column: ResolvedFilterColumnKey<Row>\n ascending?: boolean\n }\n | Partial<Record<ResolvedFilterColumnKey<Row>, AthenaOrderByDirectionInput>>\n\nexport interface AthenaFindManyOptions<\n Row = AthenaRowShape,\n TSelect extends AthenaSelectShape = AthenaSelectShape,\n> {\n /**\n * Object select tree. Callers should pass through `findMany(...)`, which\n * intersects this with `AthenaValidatedSelectShape<Row, TSelect>` so model\n * column keys are checked after `TSelect` is inferred from the literal.\n */\n select: TSelect\n where?: AthenaWhere<Row>\n orderBy?: AthenaOrderBy<Row>\n limit?: number\n}\n\ntype AthenaModelContext<\n TRegistry extends GenericRegistryDef = GenericRegistryDef,\n TDatabase extends string = string,\n TSchema extends string = string,\n TModel extends AnyModelDef = AnyModelDef,\n> = {\n registry: TRegistry\n database: TDatabase\n schema: TSchema\n model: TModel\n}\n\ntype Simplify<T> = {\n [K in keyof T]: T[K]\n} & {}\n\ntype ContextRegistry<TContext> = TContext extends AthenaModelContext<infer TRegistry, string, string, AnyModelDef>\n ? TRegistry\n : never\n\ntype ContextDatabase<TContext> = TContext extends AthenaModelContext<GenericRegistryDef, infer TDatabase, string, AnyModelDef>\n ? TDatabase\n : never\n\ntype ContextModel<TContext> = TContext extends AthenaModelContext<GenericRegistryDef, string, string, infer TModel>\n ? TModel\n : never\n\ntype ModelMetaOf<TContext> = ContextModel<TContext> extends ModelDef<unknown, unknown, unknown, infer TMeta>\n ? TMeta\n : never\n\ntype ModelRelationsOf<TContext> = NonNullable<ModelMetaOf<TContext>['relations']>\n\ntype SelectedResultKey<\n TKey extends string,\n TValue,\n> = TValue extends { as: infer TAlias extends string } ? TAlias : TKey\n\ntype ScalarSelectionResult<Row, TSelect extends AthenaSelectShape> = {\n [TKey in Extract<keyof TSelect, string> as TSelect[TKey] extends true ? TKey : never]-?: TKey extends keyof NonNullable<Row>\n ? NonNullable<Row>[TKey]\n : unknown\n}\n\ntype RelationByKey<TContext, TKey extends string> = TKey extends keyof ModelRelationsOf<TContext>\n ? ModelRelationsOf<TContext>[TKey]\n : never\n\ntype RelationByVia<TContext, TVia extends string> = {\n [TKey in keyof ModelRelationsOf<TContext>]: ModelRelationsOf<TContext>[TKey] extends infer TRelation\n ? TRelation extends ModelRelationMetadata\n ? TVia extends TRelation['sourceColumns'][number]\n ? TRelation\n : never\n : never\n : never\n}[keyof ModelRelationsOf<TContext>]\n\ntype ResolvedRelation<TContext, TKey extends string, TValue> = RelationByKey<TContext, TKey> extends never\n ? TValue extends { via: infer TVia extends string }\n ? RelationByVia<TContext, TVia>\n : never\n : RelationByKey<TContext, TKey>\n\ntype TargetDatabaseName<TContext, TRelation extends ModelRelationMetadata> = TRelation['targetDatabase'] extends string\n ? TRelation['targetDatabase']\n : ContextDatabase<TContext>\n\ntype ResolveTargetModel<\n TContext,\n TRelation extends ModelRelationMetadata,\n> = ContextRegistry<TContext> extends infer TRegistry\n ? TRegistry extends GenericRegistryDef\n ? TargetDatabaseName<TContext, TRelation> extends keyof TRegistry & string\n ? TRelation['targetSchema'] extends keyof TRegistry[TargetDatabaseName<TContext, TRelation>]['schemas'] & string\n ? TRelation['targetModel'] extends keyof TRegistry[TargetDatabaseName<TContext, TRelation>]['schemas'][TRelation['targetSchema']]['models'] & string\n ? TRegistry[TargetDatabaseName<TContext, TRelation>]['schemas'][TRelation['targetSchema']]['models'][TRelation['targetModel']]\n : never\n : never\n : never\n : never\n : never\n\ntype RelationResultValue<\n TRelation extends ModelRelationMetadata,\n TValue,\n TContext,\n> = TValue extends AthenaRelationSelectNode<infer TChildSelect>\n ? ResolveTargetModel<TContext, TRelation> extends infer TTargetModel\n ? TTargetModel extends AnyModelDef\n ? TRelation['kind'] extends 'one-to-many' | 'many-to-many'\n ? Array<\n AthenaFindManyResult<\n RowOf<TTargetModel>,\n TChildSelect,\n AthenaModelContext<\n ContextRegistry<TContext>,\n TargetDatabaseName<TContext, TRelation>,\n TRelation['targetSchema'],\n TTargetModel\n >\n >\n >\n : AthenaFindManyResult<\n RowOf<TTargetModel>,\n TChildSelect,\n AthenaModelContext<\n ContextRegistry<TContext>,\n TargetDatabaseName<TContext, TRelation>,\n TRelation['targetSchema'],\n TTargetModel\n >\n > | null\n : unknown\n : unknown\n : never\n\ntype RelationSelectionResult<TContext, TSelect extends AthenaSelectShape> = {\n [TKey in Extract<keyof TSelect, string> as TSelect[TKey] extends AthenaRelationSelectNode<AthenaSelectShape>\n ? SelectedResultKey<TKey, TSelect[TKey]>\n : never]-?: ResolvedRelation<TContext, TKey, TSelect[TKey]> extends infer TRelation\n ? TRelation extends ModelRelationMetadata\n ? RelationResultValue<TRelation, TSelect[TKey], TContext>\n : unknown\n : unknown\n}\n\nexport type AthenaFindManyResult<\n Row,\n TSelect extends AthenaSelectShape,\n TContext = unknown,\n> = Simplify<ScalarSelectionResult<Row, TSelect> & RelationSelectionResult<TContext, TSelect>>\n\nconst FILTER_OPERATORS = new Set<AthenaFilterOperator>([\n 'eq',\n 'neq',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'like',\n 'ilike',\n 'is',\n 'in',\n 'contains',\n 'containedBy',\n])\n\nconst BOOLEAN_SAFE_OPERATORS = new Set<AthenaBooleanSafeOperator>([\n 'eq',\n 'neq',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'like',\n 'ilike',\n 'is',\n])\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction isUuidString(value: string): boolean {\n return UUID_PATTERN.test(value.trim())\n}\n\nfunction isUuidIdentifierColumn(column: string): boolean {\n return column === 'id' || /(?:^|_)uuid(?:_|$)/i.test(column) || /_id$/i.test(column)\n}\n\nexport function shouldUseUuidTextComparison(column: string, value: AthenaConditionValue): boolean {\n return typeof value === 'string' && isUuidString(value) && isUuidIdentifierColumn(column)\n}\n\nfunction isRelationSelectNode(value: unknown): value is AthenaRelationSelectNode {\n return isRecord(value) && isRecord(value.select)\n}\n\nfunction normalizeIdentifier(value: string, label: string): string {\n const normalized = value.trim()\n if (!normalized) {\n throw new Error(`${label} must be a non-empty string`)\n }\n return normalized\n}\n\nfunction stringifyFilterValue(value: AthenaConditionValue | AthenaConditionArrayValue | string): string {\n if (Array.isArray(value)) {\n return value.join(',')\n }\n return String(value)\n}\n\nfunction buildGatewayCondition(\n operator: AthenaConditionOperator,\n column?: string,\n value?: AthenaConditionValue | AthenaConditionArrayValue | string,\n): AthenaGatewayCondition {\n const condition: AthenaGatewayCondition = { operator }\n if (column) {\n condition.column = column\n if (operator === 'eq') {\n condition.eq_column = column\n }\n }\n if (value !== undefined) {\n condition.value = value\n if (operator === 'eq') {\n condition.eq_value = value\n }\n }\n if (operator === 'eq' && column && value !== undefined && shouldUseUuidTextComparison(column, value as AthenaConditionValue)) {\n condition.column_cast = 'text'\n condition.eq_column_cast = 'text'\n }\n return condition\n}\n\nfunction compileRelationToken(\n key: string,\n node: AthenaRelationSelectNode,\n): string {\n const nested = compileSelectShape(node.select)\n const propertyKey = normalizeIdentifier(key, 'select relation key')\n if (node.schema && node.via) {\n throw new Error(\n `findMany relation \"${propertyKey}\" cannot combine schema and via yet; use schema with the relation key, or use via without schema`,\n )\n }\n\n const relationTokenBase = normalizeIdentifier(node.via ?? propertyKey, 'select relation token')\n if (node.schema && relationTokenBase.includes('.')) {\n throw new Error(\n `findMany relation \"${propertyKey}\" already resolves to a qualified relation token; do not also set schema`,\n )\n }\n\n const relationSchema = node.schema?.trim()\n const relationToken = relationSchema\n ? `${normalizeIdentifier(relationSchema, 'select relation schema')}.${relationTokenBase}`\n : relationTokenBase\n const alias = node.as?.trim() || (relationToken !== propertyKey ? propertyKey : '')\n const prefix = alias ? `${alias}:` : ''\n return `${prefix}${relationToken}(${nested})`\n}\n\nexport function compileSelectShape(select: AthenaSelectShape): string {\n if (!isRecord(select)) {\n throw new Error('findMany select must be an object')\n }\n\n const tokens: string[] = []\n for (const [rawKey, rawValue] of Object.entries(select)) {\n if (rawValue === undefined) {\n continue\n }\n\n if (rawValue === true) {\n tokens.push(normalizeIdentifier(rawKey, 'select column'))\n continue\n }\n\n if (isRelationSelectNode(rawValue)) {\n tokens.push(compileRelationToken(rawKey, rawValue))\n continue\n }\n\n throw new Error(`Unsupported select node for \"${rawKey}\"`)\n }\n\n if (tokens.length === 0) {\n throw new Error('findMany select requires at least one field')\n }\n\n return tokens.join(',')\n}\n\nexport function selectShapeUsesRelationSchema(select: AthenaSelectShape): boolean {\n if (!isRecord(select)) {\n return false\n }\n\n for (const rawValue of Object.values(select)) {\n if (!isRelationSelectNode(rawValue)) {\n continue\n }\n if (typeof rawValue.schema === 'string' && rawValue.schema.trim().length > 0) {\n return true\n }\n if (selectShapeUsesRelationSchema(rawValue.select)) {\n return true\n }\n }\n\n return false\n}\n\nfunction compileColumnWhere(\n column: string,\n input: AthenaWherePrimitive | AthenaWhereOperatorInput,\n): AthenaGatewayCondition[] {\n const normalizedColumn = normalizeIdentifier(column, 'where column')\n if (!isRecord(input)) {\n return [buildGatewayCondition('eq', normalizedColumn, input)]\n }\n\n const conditions: AthenaGatewayCondition[] = []\n for (const [rawOperator, rawValue] of Object.entries(input)) {\n if (rawValue === undefined) {\n continue\n }\n if (!FILTER_OPERATORS.has(rawOperator as AthenaFilterOperator)) {\n throw new Error(`Unsupported where operator \"${rawOperator}\" on \"${normalizedColumn}\"`)\n }\n if (\n (rawOperator === 'in' || rawOperator === 'contains' || rawOperator === 'containedBy') &&\n !Array.isArray(rawValue)\n ) {\n throw new Error(`where.${normalizedColumn}.${rawOperator} requires an array value`)\n }\n conditions.push(\n buildGatewayCondition(\n rawOperator as AthenaFilterOperator,\n normalizedColumn,\n rawValue as AthenaConditionValue | AthenaConditionArrayValue,\n ),\n )\n }\n\n if (conditions.length === 0) {\n throw new Error(`where.${normalizedColumn} requires at least one operator`)\n }\n\n return conditions\n}\n\nfunction compileBooleanExpressionTerms(\n clause: AthenaWhereBooleanOperand,\n label: 'or' | 'not',\n): string[] {\n if (!isRecord(clause)) {\n throw new Error(`findMany where.${label} clauses must be objects`)\n }\n\n const entries = Object.entries(clause).filter(([, value]) => value !== undefined)\n if (entries.length !== 1) {\n throw new Error(`findMany where.${label} clauses must target exactly one column`)\n }\n\n const [rawColumn, rawValue] = entries[0]\n const column = normalizeIdentifier(rawColumn, `where.${label} column`)\n\n if (!isRecord(rawValue)) {\n return [`${column}.eq.${stringifyFilterValue(rawValue as AthenaConditionValue)}`]\n }\n\n const operatorEntries = Object.entries(rawValue).filter(([, value]) => value !== undefined)\n if (operatorEntries.length === 0) {\n throw new Error(`findMany where.${label}.${column} requires at least one operator`)\n }\n\n if (label === 'not' && operatorEntries.length > 1) {\n throw new Error('findMany where.not only supports a single lossless operator expression')\n }\n\n return operatorEntries.map(([rawOperator, rawOperand]) => {\n if (!BOOLEAN_SAFE_OPERATORS.has(rawOperator as AthenaBooleanSafeOperator)) {\n throw new Error(`findMany where.${label} only supports lossless scalar operators`)\n }\n if (Array.isArray(rawOperand)) {\n throw new Error(`findMany where.${label} does not support array-valued operators`)\n }\n return `${column}.${rawOperator}.${stringifyFilterValue(rawOperand as AthenaConditionValue)}`\n })\n}\n\nexport function compileWhere(where?: AthenaWhere): AthenaGatewayCondition[] | undefined {\n if (where === undefined) {\n return undefined\n }\n if (!isRecord(where)) {\n throw new Error('findMany where must be an object')\n }\n\n const conditions: AthenaGatewayCondition[] = []\n for (const [rawKey, rawValue] of Object.entries(where)) {\n if (rawValue === undefined) {\n continue\n }\n\n if (rawKey === 'or') {\n if (!Array.isArray(rawValue) || rawValue.length === 0) {\n throw new Error('findMany where.or must be a non-empty array')\n }\n const expressions = rawValue.flatMap(value =>\n compileBooleanExpressionTerms(value as AthenaWhereBooleanOperand, 'or'),\n )\n conditions.push(buildGatewayCondition('or', undefined, expressions.join(',')))\n continue\n }\n\n if (rawKey === 'not') {\n const expressions = compileBooleanExpressionTerms(rawValue as AthenaWhereBooleanOperand, 'not')\n if (expressions.length !== 1) {\n throw new Error('findMany where.not must compile to exactly one lossless expression')\n }\n conditions.push(buildGatewayCondition('not', undefined, expressions[0]))\n continue\n }\n\n conditions.push(...compileColumnWhere(rawKey, rawValue as AthenaWherePrimitive | AthenaWhereOperatorInput))\n }\n\n return conditions.length > 0 ? conditions : undefined\n}\n\nfunction resolveOrderDirection(input: AthenaOrderByDirectionInput): AthenaSortBy['direction'] {\n if (typeof input === 'boolean') {\n return input === false ? 'descending' : 'ascending'\n }\n if (typeof input === 'string') {\n const normalized = input.trim().toLowerCase()\n if (normalized === 'asc' || normalized === 'ascending') {\n return 'ascending'\n }\n if (normalized === 'desc' || normalized === 'descending') {\n return 'descending'\n }\n throw new Error(`Unsupported orderBy direction \"${input}\"`)\n }\n return input.ascending === false ? 'descending' : 'ascending'\n}\n\nexport function compileOrderBy<Row = AthenaRowShape>(orderBy?: AthenaOrderBy<Row>): AthenaSortBy | undefined {\n if (orderBy === undefined) {\n return undefined\n }\n if (!isRecord(orderBy)) {\n throw new Error('findMany orderBy must be an object')\n }\n\n if ('column' in orderBy) {\n return {\n field: normalizeIdentifier(String(orderBy.column), 'orderBy column'),\n direction: orderBy.ascending === false ? 'descending' : 'ascending',\n }\n }\n\n const entries = Object.entries(orderBy).filter(([, value]) => value !== undefined)\n if (entries.length === 0) {\n return undefined\n }\n if (entries.length > 1) {\n throw new Error('findMany orderBy only supports a single column in v1')\n }\n\n const [column, input] = entries[0]\n return {\n field: normalizeIdentifier(column, 'orderBy column'),\n direction: resolveOrderDirection(input as AthenaOrderByDirectionInput),\n }\n}\n","import { buildStructuredSelectTransport } from './gateway/structured-select.ts'\nimport type {\n AthenaFetchPayload,\n AthenaGatewayCallOptions,\n AthenaGatewayCondition,\n AthenaJsonObject,\n AthenaSortBy,\n} from './gateway/types.ts'\nimport { shouldUseUuidTextComparison } from './query-ast.ts'\nimport type {\n AthenaOrderBy,\n AthenaSelectShape,\n AthenaWhere,\n AthenaWhereBooleanOperand,\n AthenaWhereOperatorInput,\n} from './query-ast.ts'\n\ntype AthenaFindManyAstOrderColumn<Row> =\n [Extract<keyof NonNullable<Row>, string>] extends [never] ? string : Extract<keyof NonNullable<Row>, string>\n\nexport interface AthenaSelectExecutionState {\n conditions: AthenaGatewayCondition[]\n limit?: number\n offset?: number\n order?: AthenaSortBy\n currentPage?: number\n pageSize?: number\n totalPages?: number\n}\n\nexport type AthenaFindManyAstPayload<\n Row,\n TSelect extends AthenaSelectShape,\n> = {\n table_name: string\n select: TSelect\n where?: AthenaWhere<Row>\n orderBy?: AthenaOrderBy<Row>\n limit?: number\n}\n\nexport interface AthenaResolvedPagination {\n limit?: number\n offset?: number\n}\n\nexport interface AthenaTypedSelectQueryInput {\n tableName: string\n columns: string | string[]\n conditions: AthenaGatewayCondition[]\n limit?: number\n offset?: number\n currentPage?: number\n pageSize?: number\n order?: AthenaSortBy\n}\n\nexport interface AthenaSelectDebugPlan {\n columns: string | string[]\n conditions?: AthenaGatewayCondition[]\n limit?: number\n offset?: number\n currentPage?: number\n pageSize?: number\n order?: AthenaSortBy\n}\n\nexport type AthenaSelectTransportPlan =\n | {\n kind: 'query'\n query: string\n payload: {\n query: string\n }\n }\n | {\n kind: 'fetch'\n payload: AthenaFetchPayload\n debug: AthenaSelectDebugPlan\n }\n\nexport function canUseFindManyAstTransport(state: AthenaSelectExecutionState): boolean {\n return (\n state.conditions.length === 0 &&\n state.offset === undefined &&\n state.currentPage === undefined &&\n state.pageSize === undefined &&\n state.totalPages === undefined\n )\n}\n\nexport function toFindManyAstOrder<Row>(order?: AthenaSortBy): AthenaOrderBy<Row> | undefined {\n if (!order) {\n return undefined\n }\n return {\n column: order.field as AthenaFindManyAstOrderColumn<Row>,\n ascending: order.direction !== 'descending',\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction normalizeFindManyAstColumnPredicate(\n value: unknown,\n): AthenaWhereOperatorInput {\n if (!isRecord(value)) {\n return {\n eq: value as AthenaWhereOperatorInput['eq'],\n }\n }\n\n const normalized: AthenaWhereOperatorInput = {}\n for (const [key, operand] of Object.entries(value)) {\n if (operand !== undefined) {\n normalized[key as keyof AthenaWhereOperatorInput] = operand as never\n }\n }\n return normalized\n}\n\nfunction normalizeFindManyAstBooleanOperand<Row>(\n clause: AthenaWhereBooleanOperand<Row>,\n): AthenaWhereBooleanOperand<Row> {\n const normalized: Record<string, unknown> = {}\n for (const [column, value] of Object.entries(clause as Record<string, unknown>)) {\n if (value === undefined) {\n continue\n }\n normalized[column] = normalizeFindManyAstColumnPredicate(value)\n }\n return normalized as AthenaWhereBooleanOperand<Row>\n}\n\nexport function normalizeFindManyAstWhere<Row>(\n where?: AthenaWhere<Row>,\n): AthenaWhere<Row> | undefined {\n if (!where || !isRecord(where)) {\n return where\n }\n\n const normalized: AthenaJsonObject = {}\n for (const [key, value] of Object.entries(where as Record<string, unknown>)) {\n if (value === undefined) {\n continue\n }\n if (key === 'or' && Array.isArray(value)) {\n normalized.or = value.map(clause =>\n normalizeFindManyAstBooleanOperand(clause as AthenaWhereBooleanOperand<Row>),\n ) as unknown as AthenaJsonObject['or']\n continue\n }\n if (key === 'not' && isRecord(value)) {\n normalized.not = normalizeFindManyAstBooleanOperand(\n value as AthenaWhereBooleanOperand<Row>,\n ) as unknown as AthenaJsonObject['not']\n continue\n }\n normalized[key] = normalizeFindManyAstColumnPredicate(value)\n }\n\n return normalized as AthenaWhere<Row>\n}\n\nfunction predicateRequiresUuidQueryFallback(\n column: string,\n value: unknown,\n): boolean {\n if (!isRecord(value)) {\n return shouldUseUuidTextComparison(column, value as Parameters<typeof shouldUseUuidTextComparison>[1])\n }\n\n const eqValue = value.eq\n return eqValue !== undefined\n && shouldUseUuidTextComparison(column, eqValue as Parameters<typeof shouldUseUuidTextComparison>[1])\n}\n\nfunction booleanOperandRequiresUuidQueryFallback<Row>(\n clause: AthenaWhereBooleanOperand<Row>,\n): boolean {\n for (const [column, value] of Object.entries(clause as Record<string, unknown>)) {\n if (value === undefined) {\n continue\n }\n if (predicateRequiresUuidQueryFallback(column, value)) {\n return true\n }\n }\n return false\n}\n\nexport function findManyAstWhereRequiresLegacyTransport<Row>(\n where?: AthenaWhere<Row>,\n): boolean {\n if (!where || !isRecord(where)) {\n return false\n }\n\n for (const [key, value] of Object.entries(where as Record<string, unknown>)) {\n if (value === undefined) {\n continue\n }\n if (key === 'or' && Array.isArray(value)) {\n if (\n value.some(clause =>\n booleanOperandRequiresUuidQueryFallback(clause as AthenaWhereBooleanOperand<Row>),\n )\n ) {\n return true\n }\n continue\n }\n if (key === 'not' && isRecord(value)) {\n if (booleanOperandRequiresUuidQueryFallback(value as AthenaWhereBooleanOperand<Row>)) {\n return true\n }\n continue\n }\n if (predicateRequiresUuidQueryFallback(key, value)) {\n return true\n }\n }\n\n return false\n}\n\nexport function resolvePagination(input: {\n limit?: number\n offset?: number\n currentPage?: number\n pageSize?: number\n}): AthenaResolvedPagination {\n let limit = input.limit\n let offset = input.offset\n\n if (limit === undefined && input.pageSize !== undefined) {\n limit = Math.max(0, Math.trunc(input.pageSize))\n }\n if (\n offset === undefined &&\n input.pageSize !== undefined &&\n input.currentPage !== undefined &&\n input.currentPage > 0\n ) {\n offset = (Math.trunc(input.currentPage) - 1) * Math.max(0, Math.trunc(input.pageSize))\n }\n\n return { limit, offset }\n}\n\nfunction hasTypedEqualityComparison(conditions: AthenaGatewayCondition[] | undefined): boolean {\n return (\n conditions?.some(\n condition =>\n condition.operator === 'eq' &&\n (condition.value_cast !== undefined || condition.column_cast !== undefined),\n ) ?? false\n )\n}\n\nexport function createSelectTransportPlan(input: {\n tableName: string\n columns: string | string[]\n state: AthenaSelectExecutionState\n options?: AthenaGatewayCallOptions\n buildTypedSelectQuery: (input: AthenaTypedSelectQueryInput) => string | null\n}): AthenaSelectTransportPlan {\n const conditions = input.state.conditions.length\n ? input.state.conditions.map(condition => ({ ...condition }))\n : undefined\n\n const pagination = resolvePagination({\n limit: input.state.limit,\n offset: input.state.offset,\n currentPage: input.state.currentPage,\n pageSize: input.state.pageSize,\n })\n const stripNulls = input.options?.stripNulls ?? true\n const structuredSelectTransport = buildStructuredSelectTransport({\n tableName: input.tableName,\n columns: input.columns,\n conditions,\n limit: pagination.limit,\n offset: pagination.offset,\n order: input.state.order,\n stripNulls,\n count: input.options?.count,\n head: input.options?.head,\n })\n if (structuredSelectTransport && 'error' in structuredSelectTransport) {\n throw new Error(structuredSelectTransport.error)\n }\n if (structuredSelectTransport) {\n const { payload, select } = structuredSelectTransport\n return {\n kind: 'fetch',\n payload,\n debug: {\n columns: select,\n conditions,\n limit: pagination.limit,\n offset: pagination.offset,\n order: input.state.order,\n },\n }\n }\n\n if (hasTypedEqualityComparison(conditions) && !input.options?.head && !input.options?.count && conditions) {\n const query = input.buildTypedSelectQuery({\n tableName: input.tableName,\n columns: input.columns,\n conditions,\n limit: input.state.limit,\n offset: input.state.offset,\n currentPage: input.state.currentPage,\n pageSize: input.state.pageSize,\n order: input.state.order,\n })\n if (query) {\n return {\n kind: 'query',\n query,\n payload: { query },\n }\n }\n }\n\n return {\n kind: 'fetch',\n payload: {\n table_name: input.tableName,\n columns: input.columns,\n conditions,\n limit: input.state.limit,\n offset: input.state.offset,\n current_page: input.state.currentPage,\n page_size: input.state.pageSize,\n total_pages: input.state.totalPages,\n sort_by: input.state.order,\n strip_nulls: stripNulls,\n count: input.options?.count,\n head: input.options?.head,\n },\n debug: {\n columns: input.columns,\n conditions,\n limit: input.state.limit,\n offset: input.state.offset,\n currentPage: input.state.currentPage,\n pageSize: input.state.pageSize,\n order: input.state.order,\n },\n }\n}\n","import type {\n AthenaConditionCastType,\n AthenaConditionValue,\n AthenaDeletePayload,\n AthenaGatewayCondition,\n AthenaInsertPayload,\n AthenaJsonValue,\n AthenaRpcFilter,\n AthenaRpcPayload,\n AthenaSortBy,\n AthenaUpdatePayload,\n} from './gateway/types.ts'\nimport { resolvePagination } from './query-transport.ts'\nimport {\n quoteQualifiedIdentifier,\n quoteSelectColumnToken,\n quoteSelectColumnsExpression,\n} from './sql-identifiers.ts'\n\nconst SAFE_CAST_PATTERN = /^[a-z_][a-z0-9_]*(?:\\[\\])?$/i\n\nfunction normalizeCast(cast: AthenaConditionCastType): string {\n const normalized = cast.trim().toLowerCase()\n if (!SAFE_CAST_PATTERN.test(normalized)) {\n throw new Error(`Invalid cast type \"${cast}\"`)\n }\n return normalized\n}\n\nfunction escapeSqlStringLiteral(value: string): string {\n return value.replace(/'/g, \"''\")\n}\n\nfunction toSqlLiteral(value: AthenaConditionValue): string {\n if (value === null) return 'NULL'\n if (typeof value === 'number') return Number.isFinite(value) ? String(value) : 'NULL'\n if (typeof value === 'boolean') return value ? 'TRUE' : 'FALSE'\n return `'${escapeSqlStringLiteral(value)}'`\n}\n\nfunction withCast(expression: string, cast?: AthenaConditionCastType): string {\n if (!cast) return expression\n return `${expression}::${normalizeCast(cast)}`\n}\n\nfunction buildSelectColumnsClause(columns: string | string[]): string {\n if (Array.isArray(columns)) {\n return columns.map(column => quoteSelectColumnToken(column)).join(', ')\n }\n return quoteSelectColumnsExpression(columns)\n}\n\ninterface ParsedIdentifierSegment {\n normalizedValue: string\n}\n\nfunction parseIdentifierSegment(input: string): ParsedIdentifierSegment | null {\n const trimmed = input.trim()\n if (!trimmed) return null\n\n if (!trimmed.startsWith('\"')) {\n return {\n normalizedValue: trimmed.toLowerCase(),\n }\n }\n\n let value = ''\n let index = 1\n let closed = false\n while (index < trimmed.length) {\n const char = trimmed[index]\n const next = index + 1 < trimmed.length ? trimmed[index + 1] : ''\n if (char === '\"' && next === '\"') {\n value += '\"'\n index += 2\n continue\n }\n if (char === '\"') {\n closed = true\n index += 1\n break\n }\n value += char\n index += 1\n }\n\n if (!closed || trimmed.slice(index).trim().length > 0 || !value.trim()) {\n return null\n }\n\n return {\n normalizedValue: value,\n }\n}\n\nfunction splitQualifiedTableName(tableName: string): { schemaSegment: string } | null {\n const trimmed = tableName.trim()\n let inQuotes = false\n for (let index = 0; index < trimmed.length; index += 1) {\n const char = trimmed[index]\n const next = index + 1 < trimmed.length ? trimmed[index + 1] : ''\n if (char === '\"') {\n if (inQuotes && next === '\"') {\n index += 1\n continue\n }\n inQuotes = !inQuotes\n continue\n }\n if (char === '.' && !inQuotes) {\n const schemaSegment = trimmed.slice(0, index).trim()\n const tableSegment = trimmed.slice(index + 1).trim()\n if (!schemaSegment || !tableSegment) {\n return null\n }\n return { schemaSegment }\n }\n }\n return null\n}\n\nexport function resolveTableNameForCall(tableName: string, schema: string | undefined): string {\n if (!schema) return tableName\n const normalizedSchema = schema.trim()\n if (!normalizedSchema) {\n throw new Error('schema option must be a non-empty string')\n }\n const normalizedTableName = tableName.trim()\n const parsedSchema = parseIdentifierSegment(normalizedSchema)\n if (!parsedSchema) {\n throw new Error('schema option must be a non-empty string')\n }\n const qualified = splitQualifiedTableName(normalizedTableName)\n if (qualified) {\n const parsedTableSchema = parseIdentifierSegment(qualified.schemaSegment)\n const sameSchema = parsedTableSchema\n ? parsedTableSchema.normalizedValue === parsedSchema.normalizedValue\n : normalizedTableName.startsWith(`${normalizedSchema}.`)\n if (sameSchema) {\n return normalizedTableName\n }\n throw new Error(\n `schema option \"${normalizedSchema}\" conflicts with schema-qualified table \"${normalizedTableName}\"`,\n )\n }\n return `${normalizedSchema}.${normalizedTableName}`\n}\n\nfunction conditionToSqlClause(condition: AthenaGatewayCondition): string | null {\n if (!condition.column) return null\n const column = withCast(quoteQualifiedIdentifier(condition.column), condition.column_cast)\n const value = condition.value\n const sqlOperator = {\n eq: '=',\n neq: '!=',\n gt: '>',\n gte: '>=',\n lt: '<',\n lte: '<=',\n like: 'LIKE',\n ilike: 'ILIKE',\n } as const\n\n switch (condition.operator) {\n case 'eq':\n case 'neq':\n case 'gt':\n case 'gte':\n case 'lt':\n case 'lte':\n case 'like':\n case 'ilike': {\n if (Array.isArray(value) || value === undefined) return null\n const rhs = withCast(toSqlLiteral(value), condition.value_cast)\n return `${column} ${sqlOperator[condition.operator]} ${rhs}`\n }\n case 'is': {\n if (value === null) return `${column} IS NULL`\n if (value === true) return `${column} IS TRUE`\n if (value === false) return `${column} IS FALSE`\n return null\n }\n case 'in': {\n if (!Array.isArray(value)) return null\n if (value.length === 0) return 'FALSE'\n const values = value.map(item => withCast(toSqlLiteral(item), condition.value_cast))\n return `${column} IN (${values.join(', ')})`\n }\n default:\n return null\n }\n}\n\nexport function buildTypedSelectQuery(input: {\n tableName: string\n columns: string | string[]\n conditions: AthenaGatewayCondition[]\n limit?: number\n offset?: number\n currentPage?: number\n pageSize?: number\n order?: AthenaSortBy\n}): string | null {\n const whereClauses: string[] = []\n for (const condition of input.conditions) {\n const clause = conditionToSqlClause(condition)\n if (!clause) return null\n whereClauses.push(clause)\n }\n\n let limit = input.limit\n let offset = input.offset\n if (limit === undefined && input.pageSize !== undefined) {\n limit = input.pageSize\n }\n if (\n offset === undefined &&\n input.pageSize !== undefined &&\n input.currentPage !== undefined &&\n input.currentPage > 0\n ) {\n offset = (input.currentPage - 1) * input.pageSize\n }\n\n const sqlParts = [\n `SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\n ]\n\n if (whereClauses.length > 0) {\n sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\n }\n\n if (input.order?.field) {\n const direction = input.order.direction === 'descending' ? 'DESC' : 'ASC'\n sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(input.order.field)} ${direction}`)\n }\n\n if (limit !== undefined) {\n sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`)\n }\n\n if (offset !== undefined) {\n sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`)\n }\n\n return `${sqlParts.join(' ')};`\n}\n\nfunction sanitizeSqlComment(comment: string): string {\n return comment.replace(/\\*\\//g, '* /')\n}\n\nfunction toSqlJsonLiteral(value: AthenaJsonValue | undefined): string {\n if (value === undefined) return 'DEFAULT'\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return toSqlLiteral(value)\n }\n return `'${escapeSqlStringLiteral(JSON.stringify(value))}'::jsonb`\n}\n\nfunction conditionToDebugSqlClause(condition: AthenaGatewayCondition): string {\n const exact = conditionToSqlClause(condition)\n if (exact) return exact\n\n const rawCondition = sanitizeSqlComment(JSON.stringify(condition))\n if (!condition.column) {\n return `TRUE /* unsupported condition: ${rawCondition} */`\n }\n\n const column = withCast(quoteQualifiedIdentifier(condition.column), condition.column_cast)\n const value = condition.value\n const rhs = withCast(toSqlJsonLiteral(value as AthenaJsonValue | undefined), condition.value_cast)\n\n switch (condition.operator) {\n case 'contains':\n return `${column} @> ${rhs}`\n case 'containedBy':\n return `${column} <@ ${rhs}`\n case 'not':\n return `TRUE /* NOT expression passthrough: ${rawCondition} */`\n case 'or':\n return `TRUE /* OR expression passthrough: ${rawCondition} */`\n default:\n return `TRUE /* unsupported condition: ${rawCondition} */`\n }\n}\n\nfunction appendOrderLimitOffset(\n sqlParts: string[],\n order?: AthenaSortBy,\n limit?: number,\n offset?: number,\n) {\n if (order?.field) {\n const direction = order.direction === 'descending' ? 'DESC' : 'ASC'\n sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(order.field)} ${direction}`)\n }\n if (limit !== undefined) {\n sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`)\n }\n if (offset !== undefined) {\n sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`)\n }\n}\n\nexport function buildDebugSelectQuery(input: {\n tableName: string\n columns: string | string[]\n conditions?: AthenaGatewayCondition[]\n limit?: number\n offset?: number\n currentPage?: number\n pageSize?: number\n order?: AthenaSortBy\n}): string {\n const sqlParts = [\n `SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\n ]\n if (input.conditions?.length) {\n const whereClauses = input.conditions.map(conditionToDebugSqlClause)\n sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\n }\n const pagination = resolvePagination(input)\n appendOrderLimitOffset(sqlParts, input.order, pagination.limit, pagination.offset)\n return `${sqlParts.join(' ')};`\n}\n\nfunction resolveDebugTableIdentifier(tableName: string | undefined): string {\n if (!tableName?.trim()) {\n return '\"__unknown_table__\"'\n }\n return quoteQualifiedIdentifier(tableName)\n}\n\nexport function buildInsertDebugSql(payload: AthenaInsertPayload): string {\n const rows = Array.isArray(payload.insert_body)\n ? payload.insert_body\n : [payload.insert_body]\n const columns: string[] = []\n const seen = new Set<string>()\n for (const row of rows) {\n for (const column of Object.keys(row)) {\n if (seen.has(column)) continue\n seen.add(column)\n columns.push(column)\n }\n }\n\n const sqlParts = [`INSERT INTO ${quoteQualifiedIdentifier(payload.table_name)}`]\n\n if (!rows.length || !columns.length) {\n sqlParts.push('DEFAULT VALUES')\n if (rows.length > 1) {\n sqlParts.push(`/* trace: ${rows.length} rows collapsed to DEFAULT VALUES */`)\n }\n } else {\n const valuesClause = rows\n .map(row => {\n const values = columns.map(column => {\n const hasColumn = Object.prototype.hasOwnProperty.call(row, column)\n if (!hasColumn) {\n return payload.default_to_null ? 'NULL' : 'DEFAULT'\n }\n const rowValue = (row as Record<string, AthenaJsonValue | undefined>)[column]\n return toSqlJsonLiteral(rowValue)\n })\n return `(${values.join(', ')})`\n })\n .join(', ')\n const columnClause = columns.map(column => quoteQualifiedIdentifier(column)).join(', ')\n sqlParts.push(`(${columnClause})`)\n sqlParts.push(`VALUES ${valuesClause}`)\n }\n\n if (payload.on_conflict) {\n const conflictColumns = Array.isArray(payload.on_conflict)\n ? payload.on_conflict.map(column => quoteQualifiedIdentifier(column)).join(', ')\n : payload.on_conflict\n if (payload.update_body && Object.keys(payload.update_body).length > 0) {\n const assignments = Object.entries(payload.update_body).map(([column, value]) =>\n `${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`,\n )\n sqlParts.push(`ON CONFLICT (${conflictColumns}) DO UPDATE SET ${assignments.join(', ')}`)\n } else {\n sqlParts.push(`ON CONFLICT (${conflictColumns}) DO NOTHING`)\n }\n }\n\n if (payload.columns) {\n sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`)\n }\n\n return `${sqlParts.join(' ')};`\n}\n\nexport function buildUpdateDebugSql(payload: AthenaUpdatePayload): string {\n const assignments = Object.entries(payload.update_body).map(([column, value]) =>\n `${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`,\n )\n const sqlParts = [\n `UPDATE ${resolveDebugTableIdentifier(payload.table_name)} SET ${assignments.length ? assignments.join(', ') : '/* empty set */'}`,\n ]\n if (payload.conditions?.length) {\n const whereClauses = payload.conditions.map(conditionToDebugSqlClause)\n sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\n }\n const pagination = resolvePagination({\n limit: payload.limit,\n offset: payload.offset,\n currentPage: payload.current_page,\n pageSize: payload.page_size,\n })\n appendOrderLimitOffset(sqlParts, payload.sort_by, pagination.limit, pagination.offset)\n if (payload.columns) {\n sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`)\n }\n return `${sqlParts.join(' ')};`\n}\n\nexport function buildDeleteDebugSql(payload: AthenaDeletePayload): string {\n const sqlParts = [`DELETE FROM ${quoteQualifiedIdentifier(payload.table_name)}`]\n const whereClauses: string[] = []\n if (payload.resource_id) {\n whereClauses.push(`\"resource_id\" = ${toSqlLiteral(payload.resource_id)}`)\n }\n if (payload.conditions?.length) {\n whereClauses.push(...payload.conditions.map(conditionToDebugSqlClause))\n }\n if (whereClauses.length) {\n sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\n }\n const pagination = resolvePagination({\n limit: payload.limit,\n offset: payload.offset,\n currentPage: payload.current_page,\n pageSize: payload.page_size,\n })\n appendOrderLimitOffset(sqlParts, payload.sort_by, pagination.limit, pagination.offset)\n if (payload.columns) {\n sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`)\n }\n return `${sqlParts.join(' ')};`\n}\n\nfunction rpcFilterToSqlClause(filter: AthenaRpcFilter): string {\n const column = quoteQualifiedIdentifier(filter.column)\n const value = filter.value\n switch (filter.operator) {\n case 'eq':\n case 'neq':\n case 'gt':\n case 'gte':\n case 'lt':\n case 'lte':\n case 'like':\n case 'ilike': {\n if (value === undefined || Array.isArray(value)) {\n return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\n }\n const operatorMap = {\n eq: '=',\n neq: '!=',\n gt: '>',\n gte: '>=',\n lt: '<',\n lte: '<=',\n like: 'LIKE',\n ilike: 'ILIKE',\n } as const\n return `${column} ${operatorMap[filter.operator]} ${toSqlLiteral(value)}`\n }\n case 'is':\n if (value === null) return `${column} IS NULL`\n if (value === true) return `${column} IS TRUE`\n if (value === false) return `${column} IS FALSE`\n return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\n case 'in':\n if (!Array.isArray(value)) {\n return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\n }\n if (value.length === 0) return 'FALSE'\n return `${column} IN (${value.map(item => toSqlLiteral(item)).join(', ')})`\n default:\n return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\n }\n}\n\nexport function buildRpcDebugSql(payload: AthenaRpcPayload): string {\n const argsEntries = payload.args ? Object.entries(payload.args) : []\n const argsClause = argsEntries\n .map(([key, value]) => `${quoteQualifiedIdentifier(key)} => ${toSqlJsonLiteral(value as AthenaJsonValue)}`)\n .join(', ')\n const functionRef = payload.schema\n ? `${quoteQualifiedIdentifier(payload.schema)}.${quoteQualifiedIdentifier(payload.function)}`\n : quoteQualifiedIdentifier(payload.function)\n const sqlParts = [\n `SELECT ${payload.select ? quoteSelectColumnsExpression(payload.select) : '*'} FROM ${functionRef}(${argsClause})`,\n ]\n if (payload.filters?.length) {\n sqlParts.push(`WHERE ${payload.filters.map(rpcFilterToSqlClause).join(' AND ')}`)\n }\n if (payload.order?.column) {\n const direction = payload.order.ascending === false ? 'DESC' : 'ASC'\n sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(payload.order.column)} ${direction}`)\n }\n if (payload.limit !== undefined) {\n sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(payload.limit))}`)\n }\n if (payload.offset !== undefined) {\n sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(payload.offset))}`)\n }\n return `${sqlParts.join(' ')};`\n}\n\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 \"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 \"zod\": \"^4.0.1\"\n },\n \"description\": \"Athena JS SDK\",\n \"devDependencies\": {\n \"@biomejs/biome\": \"^2.5.4\",\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 \"@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 \"ultracite\": \"^7.9.4\"\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 \"./cloudflare\": {\n \"default\": \"./dist/cloudflare.js\",\n \"import\": \"./dist/cloudflare.js\",\n \"require\": \"./dist/cloudflare.cjs\",\n \"types\": \"./dist/cloudflare.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 \"./env\": {\n \"default\": \"./dist/env.js\",\n \"import\": \"./dist/env.js\",\n \"require\": \"./dist/env.cjs\",\n \"types\": \"./dist/env.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\": \"ultracite check\",\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 \"fix\": \"ultracite fix\",\n \"format\": \"ultracite fix\",\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 \"cloudflare\": [\n \"dist/cloudflare.d.ts\"\n ],\n \"cookies\": [\n \"dist/cookies.d.ts\"\n ],\n \"env\": [\n \"dist/env.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.5.1\"\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 (\n (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env?.NODE_ENV ===\n 'production'\n )\n}\n\nfunction getEnvironmentSecret(): string | undefined {\n const env = (globalThis as {\n process?: {\n env?: {\n ATHENA_AUTH_SECRET?: string\n BETTER_AUTH_SECRET?: string\n AUTH_SECRET?: string\n }\n }\n }).process?.env\n if (!env) {\n return undefined\n }\n return env.ATHENA_AUTH_SECRET || env.BETTER_AUTH_SECRET || 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 { BackendConfig } from './gateway/types.ts'\nimport { normalizeAthenaGatewayBaseUrl } from './gateway/url.ts'\nimport { buildSdkHeaderValue } from './sdk-version.ts'\nimport {\n buildAthenaRequestHeaders,\n hasHeaderIgnoreCase,\n} from './utils/athena-request-headers.ts'\n\nconst SDK_NAME = 'xylex-group/athena'\n\nexport type AthenaRequestService = 'db' | 'auth' | 'chat' | 'storage'\nexport type AthenaRequestMethod =\n | 'GET'\n | 'POST'\n | 'PUT'\n | 'PATCH'\n | 'DELETE'\n | 'HEAD'\n | 'OPTIONS'\n\nexport interface AthenaRequestQueryValueMap {\n [key: string]:\n | string\n | number\n | boolean\n | null\n | undefined\n | Array<string | number | boolean | null | undefined>\n}\n\nexport interface AthenaRequestOptions {\n service?: AthenaRequestService\n url?: string\n path?: string\n method?: AthenaRequestMethod\n headers?: Record<string, string>\n /** Per-request override for the canonical `X-Athena-Key` header. */\n apiKey?: string | null\n query?: AthenaRequestQueryValueMap\n body?: RequestInit['body'] | Record<string, unknown> | unknown[] | null\n signal?: AbortSignal\n credentials?: RequestInit['credentials']\n responseType?: 'json' | 'text' | 'response'\n}\n\nexport interface AthenaRequestResponse<T = unknown> {\n ok: boolean\n status: number\n statusText: string\n headers: Headers\n data: T | string | null\n raw: Response\n}\n\nexport interface AthenaRawRequestConfig {\n baseUrl?: string\n authUrl?: string\n chatUrl?: string\n storageUrl?: string\n apiKey?: string\n client?: string | null\n backend?: BackendConfig\n pgUri?: string | null\n jdbcUrl?: string | null\n headers?: Record<string, string>\n}\n\nexport interface AthenaRawRequestContext {\n userId?: string | null\n organizationId?: string | null\n headers?: Record<string, string>\n cookie?: string | null\n bearerToken?: string | null\n sessionToken?: string | null\n forceNoCache?: boolean\n}\n\nfunction parseArbitraryResponseBody(rawText: string, contentType: string | null): unknown {\n if (!rawText) {\n return null\n }\n if (contentType?.toLowerCase().includes('application/json')) {\n try {\n return JSON.parse(rawText)\n } catch {\n return rawText\n }\n }\n const trimmed = rawText.trim()\n if ((trimmed.startsWith('{') && trimmed.endsWith('}')) || (trimmed.startsWith('[') && trimmed.endsWith(']'))) {\n try {\n return JSON.parse(trimmed)\n } catch {\n return rawText\n }\n }\n return rawText\n}\n\nfunction toRequestQueryString(query?: AthenaRequestQueryValueMap): string {\n if (!query) return ''\n const params = new URLSearchParams()\n for (const [key, rawValue] of Object.entries(query)) {\n const values = Array.isArray(rawValue) ? rawValue : [rawValue]\n for (const value of values) {\n if (value === undefined) continue\n params.append(key, value === null ? '' : String(value))\n }\n }\n const serialized = params.toString()\n return serialized ? `?${serialized}` : ''\n}\n\nfunction isJsonBody(body: AthenaRequestOptions['body']): boolean {\n return (\n body !== undefined &&\n body !== null &&\n !(body instanceof FormData) &&\n !(body instanceof Blob) &&\n !(body instanceof URLSearchParams) &&\n !(body instanceof ArrayBuffer) &&\n !ArrayBuffer.isView(body) &&\n typeof body !== 'string'\n )\n}\n\nexport function createAthenaRequest(\n config: AthenaRawRequestConfig,\n resolveContext: () =>\n | AthenaRawRequestContext\n | undefined\n | Promise<AthenaRawRequestContext | undefined>,\n): <T = unknown>(options: AthenaRequestOptions) => Promise<AthenaRequestResponse<T>> {\n return async <T = unknown>(options: AthenaRequestOptions): Promise<AthenaRequestResponse<T>> => {\n const context = await resolveContext()\n const method = options.method ?? 'GET'\n const responseType = options.responseType ?? 'json'\n const service = options.service ?? 'db'\n const absoluteUrl = options.url?.trim()\n const baseUrlByService: Record<AthenaRequestService, string | undefined> = {\n db: config.baseUrl,\n auth: config.authUrl,\n chat: config.chatUrl,\n storage: config.storageUrl,\n }\n\n const queryString = toRequestQueryString(options.query)\n let targetUrl: string\n if (absoluteUrl) {\n // Absolute URLs bypass gateway base-url normalization so query/hash are preserved\n // and auth-only / storage-only clients can still call arbitrary endpoints.\n try {\n const parsed = new URL(absoluteUrl)\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new Error('not http(s)')\n }\n } catch {\n throw new Error(\n `client.request(...) url must be an absolute http(s) URL. Received ${JSON.stringify(options.url)}.`,\n )\n }\n targetUrl = `${absoluteUrl}${queryString}`\n } else {\n const resolvedBaseUrl = baseUrlByService[service]\n if (!resolvedBaseUrl) {\n throw new Error(\n `Athena ${service} base URL is not configured. Pass createClient({ url }) for unified routing or set the service-specific URL first.`,\n )\n }\n\n const normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(resolvedBaseUrl, {\n label: `Athena ${service} base URL`,\n })\n const path = options.path?.trim()\n if (!path) {\n throw new Error('client.request(...) requires either an absolute url or a non-empty path.')\n }\n const normalizedPath = path.startsWith('/') ? path : `/${path}`\n targetUrl = `${normalizedBaseUrl}${normalizedPath}${queryString}`\n }\n\n const requestProfile =\n service === 'auth'\n ? 'auth'\n : service === 'chat'\n ? 'chat'\n : service === 'storage'\n ? 'storage'\n : 'gateway'\n const headers = buildAthenaRequestHeaders({\n profile: requestProfile,\n sdkHeaderValue: buildSdkHeaderValue(SDK_NAME),\n apiKey: options.apiKey ?? config.apiKey,\n client: config.client,\n userId: context?.userId,\n organizationId: context?.organizationId,\n backend: config.backend,\n pgUri: config.pgUri,\n jdbcUrl: config.jdbcUrl,\n bearerToken: context?.bearerToken,\n cookie: context?.cookie,\n sessionToken: context?.sessionToken,\n forceNoCache: context?.forceNoCache,\n configHeaders: {\n ...(config.headers ?? {}),\n ...(context?.headers ?? {}),\n },\n callHeaders: options.headers,\n accept: service === 'chat' ? 'application/json' : undefined,\n contentType:\n service === 'auth' || service === 'db' || service === 'storage'\n ? 'application/json'\n : undefined,\n stripNulls: service === 'db' ? true : undefined,\n })\n\n const shouldSendJsonBody = isJsonBody(options.body)\n if (shouldSendJsonBody && !hasHeaderIgnoreCase(headers, 'Content-Type')) {\n headers['Content-Type'] = 'application/json'\n }\n\n const response = await fetch(targetUrl, {\n method,\n headers,\n body:\n options.body === undefined || options.body === null\n ? undefined\n : shouldSendJsonBody\n ? JSON.stringify(options.body)\n : (options.body as RequestInit['body']),\n signal: options.signal,\n credentials: options.credentials,\n })\n\n if (responseType === 'response') {\n return {\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n data: null,\n raw: response,\n }\n }\n\n const rawText = await response.text()\n const parsed =\n responseType === 'text'\n ? rawText\n : parseArbitraryResponseBody(rawText, response.headers.get('content-type'))\n\n return {\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n data: parsed as T | string | null,\n raw: response,\n }\n }\n}\n\n","import type {\n AthenaGatewayBaseOptions,\n AthenaGatewayCallOptions,\n AthenaGatewayConnectionOptions,\n AthenaGatewayConnectionResult,\n AthenaGatewayEndpointPath,\n AthenaGatewayErrorDetails,\n AthenaGatewayMethod,\n AthenaRpcCallOptions,\n AthenaRpcPayload,\n AthenaGatewayResponse,\n} from \"./types.js\";\nimport type {\n AthenaDeletePayload,\n AthenaFetchPayload,\n AthenaInsertPayload,\n AthenaRpcFilter,\n AthenaUpdatePayload,\n AthenaQueryPayload,\n} from \"./types.js\";\nimport { AthenaGatewayError } from \"./errors.ts\";\nimport {\n ATHENA_DEFAULT_BASE_URL,\n buildAthenaGatewayUrl,\n normalizeAthenaGatewayBaseUrl,\n} from \"./url.ts\";\nimport { buildServiceRequestHeaders } from \"../utils/athena-request-headers.ts\";\nimport { buildSdkHeaderValue } from \"../sdk-version.ts\";\n\nconst DEFAULT_CLIENT = \"DEFAULT_CLIENT\";\nconst SDK_NAME = \"xylex-group/athena\";\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME);\nfunction parseResponseBody(rawText: string, contentType: string | null) {\n if (!rawText) {\n return { parsed: null as unknown, parseFailed: false };\n }\n\n const contentTypeSuggestsJson =\n contentType?.toLowerCase().includes(\"application/json\") ?? false;\n const looksJson =\n contentTypeSuggestsJson || rawText.startsWith(\"{\") || rawText.startsWith(\"[\");\n\n if (!looksJson) {\n return { parsed: rawText as unknown, parseFailed: false };\n }\n\n try {\n return { parsed: JSON.parse(rawText) as unknown, parseFailed: false };\n } catch {\n return { parsed: rawText as unknown, parseFailed: true };\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nfunction resolveStructuredErrorPayload(payload: unknown): Record<string, unknown> | null {\n if (!isRecord(payload)) return null;\n return isRecord(payload.error) ? payload.error : payload;\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n return (\n headers.get(\"x-request-id\") ??\n headers.get(\"x-correlation-id\") ??\n headers.get(\"x-athena-request-id\") ??\n undefined\n );\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\n const structuredPayload = resolveStructuredErrorPayload(payload);\n if (structuredPayload) {\n const messageCandidates = [structuredPayload.message, structuredPayload.error, structuredPayload.details];\n for (const candidate of messageCandidates) {\n const resolved = nonEmptyString(candidate);\n if (resolved) return resolved;\n }\n }\n\n const rawMessage = nonEmptyString(payload);\n if (rawMessage) return rawMessage;\n\n return fallback;\n}\n\nfunction resolveErrorHint(payload: unknown): string | undefined {\n const structuredPayload = resolveStructuredErrorPayload(payload);\n return structuredPayload ? nonEmptyString(structuredPayload.hint) : undefined;\n}\n\nfunction resolveStatusText(response: Response, payload: unknown): string | null {\n const rawStatusText = nonEmptyString(response.statusText);\n if (rawStatusText) return rawStatusText;\n const payloadRecord = isRecord(payload) ? payload : null;\n return payloadRecord ? nonEmptyString(payloadRecord.statusText) ?? null : null;\n}\n\nfunction detailsFromError(error: AthenaGatewayError): AthenaGatewayErrorDetails {\n return error.toDetails();\n}\n\ninterface AthenaFindManyAstPayload {\n table_name: string;\n select: Record<string, unknown>;\n where?: Record<string, unknown>;\n orderBy?: Record<string, unknown>;\n limit?: number;\n}\n\nfunction toQueryScalar(value: unknown): string {\n if (value === null || value === undefined) return \"null\";\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n if (typeof value === \"number\") return Number.isFinite(value) ? String(value) : \"null\";\n return String(value);\n}\n\nfunction toQueryArray(values: unknown[]): string {\n return `{${values.map(toQueryScalar).join(\",\")}}`;\n}\n\nfunction toRpcArgumentQueryValue(value: unknown): string {\n if (Array.isArray(value)) return toQueryArray(value);\n if (value && typeof value === \"object\") return JSON.stringify(value);\n return toQueryScalar(value);\n}\n\nfunction toRpcFilterQueryValue(filter: AthenaRpcFilter): string {\n const value = filter.value;\n switch (filter.operator) {\n case \"in\": {\n if (!Array.isArray(value)) {\n throw new AthenaGatewayError({\n code: \"UNKNOWN_ERROR\",\n message: `RPC filter \"${filter.column}\" with operator \"in\" requires an array value`,\n status: 0,\n });\n }\n return `in.${toQueryArray(value)}`;\n }\n case \"is\":\n return `is.${toQueryScalar(value)}`;\n case \"eq\":\n case \"neq\":\n case \"gt\":\n case \"gte\":\n case \"lt\":\n case \"lte\":\n case \"like\":\n case \"ilike\":\n return `${filter.operator}.${toQueryScalar(value)}`;\n }\n}\n\nfunction buildRpcGetEndpoint(payload: AthenaRpcPayload): AthenaGatewayEndpointPath {\n const functionName = (payload.function_name ?? payload.function).trim();\n if (!functionName) {\n throw new AthenaGatewayError({\n code: \"UNKNOWN_ERROR\",\n message: \"rpc requires a function name\",\n status: 0,\n endpoint: \"/gateway/rpc\",\n method: \"GET\",\n });\n }\n\n const query = new URLSearchParams();\n if (payload.schema) query.set(\"schema\", payload.schema);\n if (payload.select) query.set(\"select\", payload.select);\n if (payload.count) query.set(\"count\", payload.count);\n if (payload.head) query.set(\"head\", \"true\");\n if (typeof payload.limit === \"number\") query.set(\"limit\", String(payload.limit));\n if (typeof payload.offset === \"number\") query.set(\"offset\", String(payload.offset));\n if (payload.order?.column) {\n query.set(\n \"order\",\n payload.order.ascending === false\n ? `${payload.order.column}.desc`\n : payload.order.column,\n );\n }\n\n if (payload.args) {\n for (const [key, value] of Object.entries(payload.args)) {\n query.set(key, toRpcArgumentQueryValue(value));\n }\n }\n\n if (payload.filters?.length) {\n for (const filter of payload.filters) {\n if (payload.args && Object.prototype.hasOwnProperty.call(payload.args, filter.column)) {\n throw new AthenaGatewayError({\n code: \"UNKNOWN_ERROR\",\n message: `RPC filter \"${filter.column}\" conflicts with RPC argument \"${filter.column}\" in GET mode`,\n status: 0,\n });\n }\n query.append(filter.column, toRpcFilterQueryValue(filter));\n }\n }\n\n const endpoint = `/rpc/${encodeURIComponent(functionName)}`;\n const queryText = query.toString();\n const withQuery = queryText ? `${endpoint}?${queryText}` : endpoint;\n return withQuery as AthenaGatewayEndpointPath;\n}\n\nfunction buildHeaders(\n config: AthenaGatewayBaseOptions,\n options?: AthenaGatewayCallOptions,\n): Record<string, string> {\n return buildServiceRequestHeaders(\"gateway\", SDK_HEADER_VALUE, config, options, {\n client: options?.client ?? config.client ?? DEFAULT_CLIENT,\n stripNulls: options?.stripNulls ?? true,\n });\n}\n\nfunction toInvalidUrlResponse<T>(\n error: unknown,\n endpoint: AthenaGatewayEndpointPath,\n method: AthenaGatewayMethod,\n): AthenaGatewayResponse<T> {\n const message = error instanceof Error ? error.message : String(error);\n const gatewayError =\n error instanceof AthenaGatewayError\n ? error\n : new AthenaGatewayError({\n code: \"INVALID_URL\",\n message,\n status: 0,\n endpoint,\n method,\n cause: message,\n hint: \"Set ATHENA_URL to a full http(s) URL before running queries.\",\n });\n\n return {\n ok: false,\n status: 0,\n statusText: null,\n data: null,\n error: gatewayError.message,\n errorDetails: detailsFromError(\n new AthenaGatewayError({\n code: gatewayError.code,\n message: gatewayError.message,\n status: gatewayError.status,\n endpoint,\n method,\n requestId: gatewayError.requestId,\n hint: gatewayError.hint,\n cause: gatewayError.causeDetail,\n }),\n ),\n raw: null,\n };\n}\n\nfunction resolveGatewayBaseUrl(input?: string | null) {\n return normalizeAthenaGatewayBaseUrl(input, {\n defaultBaseUrl: ATHENA_DEFAULT_BASE_URL,\n });\n}\n\nfunction resolveProbePath(path?: string) {\n if (!path) return \"/\";\n if (!path.startsWith(\"/\")) {\n throw new AthenaGatewayError({\n code: \"INVALID_URL\",\n message: `Athena gateway probe path must start with \"/\". Received ${JSON.stringify(path)}.`,\n status: 0,\n hint: 'Use a leading slash such as \"/\" or \"/health\".',\n });\n }\n return path;\n}\n\nfunction mergeConnectionHeaders(\n baseHeaders: Record<string, string>,\n headers?: Record<string, string>,\n): Record<string, string> {\n const merged = {\n ...baseHeaders,\n ...(headers ?? {}),\n };\n\n if (!merged[\"X-Athena-Sdk\"] && !merged[\"x-athena-sdk\"]) {\n merged[\"X-Athena-Sdk\"] = SDK_HEADER_VALUE;\n }\n\n return merged;\n}\n\nasync function performConnectionCheck(\n baseUrl: string,\n requestHeaders: Record<string, string>,\n options?: AthenaGatewayConnectionOptions,\n): Promise<AthenaGatewayConnectionResult> {\n const path = resolveProbePath(options?.path);\n const url = buildAthenaGatewayUrl(baseUrl, path);\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: mergeConnectionHeaders(requestHeaders, options?.headers),\n signal: options?.signal,\n });\n const rawText = await response.text();\n const requestId = resolveRequestId(response.headers);\n const parsedBody = parseResponseBody(\n rawText ?? \"\",\n response.headers.get(\"content-type\"),\n );\n\n if (parsedBody.parseFailed) {\n const invalidJsonError = new AthenaGatewayError({\n code: \"INVALID_JSON\",\n message: \"Gateway probe returned malformed JSON\",\n status: response.status,\n method: \"GET\",\n requestId,\n hint: \"Verify the gateway response body is valid JSON.\",\n cause: rawText.slice(0, 300),\n });\n return {\n ok: false,\n reachable: true,\n status: response.status,\n statusText: resolveStatusText(response, parsedBody.parsed),\n baseUrl,\n url,\n error: invalidJsonError.message,\n errorDetails: detailsFromError(invalidJsonError),\n raw: parsedBody.parsed,\n };\n }\n\n const parsed = parsedBody.parsed;\n if (!response.ok) {\n const httpError = new AthenaGatewayError({\n code: \"HTTP_ERROR\",\n message: resolveErrorMessage(\n parsed,\n `Athena gateway GET ${path} failed with status ${response.status}`,\n ),\n status: response.status,\n method: \"GET\",\n requestId,\n hint: resolveErrorHint(parsed),\n });\n\n return {\n ok: false,\n reachable: true,\n status: response.status,\n statusText: resolveStatusText(response, parsed),\n baseUrl,\n url,\n error: httpError.message,\n errorDetails: detailsFromError(httpError),\n raw: parsed,\n };\n }\n\n return {\n ok: true,\n reachable: true,\n status: response.status,\n statusText: resolveStatusText(response, parsed),\n baseUrl,\n url,\n error: undefined,\n errorDetails: null,\n raw: parsed,\n };\n } catch (callError) {\n const message = callError instanceof Error ? callError.message : String(callError);\n const networkError = new AthenaGatewayError({\n code: \"NETWORK_ERROR\",\n message: `Network error while probing Athena gateway ${url}: ${message}`,\n method: \"GET\",\n cause: message,\n hint: \"Check gateway URL, DNS, and network reachability.\",\n });\n return {\n ok: false,\n reachable: false,\n status: 0,\n statusText: null,\n baseUrl,\n url,\n error: networkError.message,\n errorDetails: detailsFromError(networkError),\n raw: null,\n };\n }\n}\n\nexport async function verifyAthenaGatewayUrl(\n baseUrl: string,\n options?: AthenaGatewayConnectionOptions,\n): Promise<AthenaGatewayConnectionResult> {\n const normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(baseUrl);\n return performConnectionCheck(normalizedBaseUrl, { \"X-Athena-Sdk\": SDK_HEADER_VALUE }, options);\n}\n\nasync function callAthena<T>(\n config: AthenaGatewayBaseOptions,\n endpoint: AthenaGatewayEndpointPath,\n method: AthenaGatewayMethod,\n payload: unknown,\n options?: AthenaGatewayCallOptions,\n): Promise<AthenaGatewayResponse<T>> {\n let baseUrl: string;\n try {\n baseUrl = resolveGatewayBaseUrl(options?.baseUrl ?? config.baseUrl);\n } catch (error) {\n return toInvalidUrlResponse<T>(error, endpoint, method);\n }\n\n const url = buildAthenaGatewayUrl(baseUrl, endpoint);\n const headers = buildHeaders(config, options);\n\n try {\n const requestInit: RequestInit = {\n method,\n headers,\n };\n if (method !== \"GET\") {\n requestInit.body = JSON.stringify(payload);\n }\n\n const response = await fetch(url, requestInit);\n\n const rawText = await response.text();\n const requestId = resolveRequestId(response.headers);\n const parsedBody = parseResponseBody(\n rawText ?? \"\",\n response.headers.get(\"content-type\"),\n );\n\n if (parsedBody.parseFailed) {\n const invalidJsonError = new AthenaGatewayError({\n code: \"INVALID_JSON\",\n message: \"Gateway returned malformed JSON\",\n status: response.status,\n endpoint,\n method,\n requestId,\n hint: \"Verify the gateway response body is valid JSON.\",\n cause: rawText.slice(0, 300),\n });\n return {\n ok: false,\n status: response.status,\n statusText: resolveStatusText(response, parsedBody.parsed),\n data: null,\n error: invalidJsonError.message,\n errorDetails: detailsFromError(invalidJsonError),\n raw: parsedBody.parsed,\n };\n }\n\n const parsed = parsedBody.parsed;\n const parsedPayload = isRecord(parsed) ? parsed : null;\n\n if (!response.ok) {\n const httpError = new AthenaGatewayError({\n code: \"HTTP_ERROR\",\n message: resolveErrorMessage(\n parsed,\n `Athena gateway ${method} ${endpoint} failed with status ${response.status}`,\n ),\n status: response.status,\n endpoint,\n method,\n requestId,\n hint: resolveErrorHint(parsed),\n });\n\n return {\n ok: false,\n status: response.status,\n statusText: resolveStatusText(response, parsed),\n data: null,\n error: httpError.message,\n errorDetails: detailsFromError(httpError),\n raw: parsed,\n };\n }\n\n // Unwrap envelope: API may return { data: [...], error: null } (e.g. when cached)\n // vs raw array when uncached. Use inner data when present to avoid double nesting.\n const payloadData =\n parsedPayload && \"data\" in parsedPayload\n ? (parsedPayload.data as T)\n : (parsed as T);\n const payloadCount =\n parsedPayload && \"count\" in parsedPayload\n ? typeof parsedPayload.count === \"number\" || parsedPayload.count === null\n ? (parsedPayload.count as number | null)\n : undefined\n : undefined;\n\n return {\n ok: true,\n status: response.status,\n statusText: resolveStatusText(response, parsed),\n data: payloadData ?? null,\n count: payloadCount,\n error: undefined,\n errorDetails: null,\n raw: parsed,\n };\n } catch (callError) {\n const message = callError instanceof Error ? callError.message : String(callError);\n const networkError = new AthenaGatewayError({\n code: \"NETWORK_ERROR\",\n message: `Network error while calling ${method} ${endpoint}: ${message}`,\n endpoint,\n method,\n cause: message,\n hint: \"Check gateway URL, DNS, and network reachability.\",\n });\n return {\n ok: false,\n status: 0,\n statusText: null,\n data: null,\n error: networkError.message,\n errorDetails: detailsFromError(networkError),\n raw: null,\n };\n }\n}\n\nexport interface AthenaGatewayClient {\n baseUrl: string;\n buildHeaders(options?: AthenaGatewayCallOptions): Record<string, string>;\n resolveCallOptions(\n options?: AthenaGatewayCallOptions,\n ): Promise<AthenaGatewayCallOptions | undefined>;\n verifyConnection(\n options?: AthenaGatewayConnectionOptions,\n ): Promise<AthenaGatewayConnectionResult>;\n fetchGateway<T>(\n payload: AthenaFetchPayload | AthenaFindManyAstPayload,\n options?: AthenaGatewayCallOptions,\n ): Promise<AthenaGatewayResponse<T>>;\n insertGateway<T>(\n payload: AthenaInsertPayload,\n options?: AthenaGatewayCallOptions,\n ): Promise<AthenaGatewayResponse<T>>;\n updateGateway<T>(\n payload: AthenaUpdatePayload,\n options?: AthenaGatewayCallOptions,\n ): Promise<AthenaGatewayResponse<T>>;\n deleteGateway<T>(\n payload: AthenaDeletePayload,\n options?: AthenaGatewayCallOptions,\n ): Promise<AthenaGatewayResponse<T>>;\n rpcGateway<T>(\n payload: AthenaRpcPayload,\n options?: AthenaRpcCallOptions,\n ): Promise<AthenaGatewayResponse<T>>;\n queryGateway<T>(\n payload: AthenaQueryPayload,\n options?: AthenaGatewayCallOptions,\n ): Promise<AthenaGatewayResponse<T>>;\n}\n\nexport function createAthenaGatewayClient(\n config: AthenaGatewayBaseOptions = {},\n): AthenaGatewayClient {\n const normalizedBaseUrl = resolveGatewayBaseUrl(config.baseUrl);\n const normalizedConfig: AthenaGatewayBaseOptions = {\n ...config,\n baseUrl: normalizedBaseUrl,\n };\n\n return {\n baseUrl: normalizedBaseUrl,\n buildHeaders(options) {\n return buildHeaders(normalizedConfig, options);\n },\n async resolveCallOptions(options) {\n return options;\n },\n verifyConnection(options) {\n return performConnectionCheck(\n normalizedBaseUrl,\n buildHeaders(normalizedConfig),\n options,\n );\n },\n fetchGateway(payload, options) {\n return callAthena(normalizedConfig, \"/gateway/fetch\", \"POST\", payload, options);\n },\n insertGateway(payload, options) {\n return callAthena(normalizedConfig, \"/gateway/insert\", \"PUT\", payload, options);\n },\n updateGateway(payload, options) {\n return callAthena(normalizedConfig, \"/gateway/update\", \"POST\", payload, options);\n },\n deleteGateway(payload, options) {\n return callAthena(normalizedConfig, \"/gateway/delete\", \"DELETE\", payload, options);\n },\n rpcGateway(payload, options) {\n if (options?.get) {\n const endpoint = buildRpcGetEndpoint(payload);\n return callAthena(normalizedConfig, endpoint, \"GET\", null, options);\n }\n return callAthena(normalizedConfig, \"/gateway/rpc\", \"POST\", payload, options);\n },\n queryGateway(payload, options) {\n return callAthena(normalizedConfig, \"/gateway/query\", \"POST\", payload, options);\n },\n };\n}\n\ntype AthenaGatewayCallOptionsResolver = () =>\n | AthenaGatewayCallOptions\n | undefined\n | Promise<AthenaGatewayCallOptions | undefined>;\n\nfunction mergeGatewayCallOptions(\n base?: AthenaGatewayCallOptions,\n override?: AthenaGatewayCallOptions,\n): AthenaGatewayCallOptions | undefined {\n if (!base && !override) return undefined;\n return {\n ...base,\n ...override,\n headers:\n base?.headers || override?.headers\n ? { ...(base?.headers ?? {}), ...(override?.headers ?? {}) }\n : undefined,\n };\n}\n\n/**\n * Creates a request-context view over one immutable gateway transport.\n * The resolver runs once for every operation; the underlying transport and\n * normalized route configuration are never reconstructed.\n */\nexport function createAthenaGatewayClientView(\n transport: AthenaGatewayClient,\n resolveContext: AthenaGatewayCallOptionsResolver,\n): AthenaGatewayClient {\n const resolveCallOptions = async (\n options?: AthenaGatewayCallOptions,\n ): Promise<AthenaGatewayCallOptions | undefined> =>\n mergeGatewayCallOptions(await resolveContext(), options);\n\n return {\n baseUrl: transport.baseUrl,\n buildHeaders(options) {\n return transport.buildHeaders(options);\n },\n resolveCallOptions,\n async verifyConnection(options) {\n const context = await resolveCallOptions();\n const contextHeaders = transport.buildHeaders(context);\n return transport.verifyConnection({\n ...options,\n headers: {\n ...contextHeaders,\n ...(options?.headers ?? {}),\n },\n });\n },\n async fetchGateway(payload, options) {\n return transport.fetchGateway(payload, await resolveCallOptions(options));\n },\n async insertGateway(payload, options) {\n return transport.insertGateway(payload, await resolveCallOptions(options));\n },\n async updateGateway(payload, options) {\n return transport.updateGateway(payload, await resolveCallOptions(options));\n },\n async deleteGateway(payload, options) {\n return transport.deleteGateway(payload, await resolveCallOptions(options));\n },\n async rpcGateway(payload, options) {\n return transport.rpcGateway(payload, await resolveCallOptions(options));\n },\n async queryGateway(payload, options) {\n return transport.queryGateway(payload, await resolveCallOptions(options));\n },\n };\n}\n","export interface AthenaAuthAdminLimits {\n maxAdminJsonBytes: number\n maxAdminJsonDepth: number\n maxTemplateVariables: number\n maxTemplateVariableLength: number\n}\n\nexport const ATHENA_AUTH_MAX_ADMIN_JSON_BYTES = 32 * 1024\nexport const ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH = 8\nexport const ATHENA_AUTH_MAX_TEMPLATE_VARIABLES = 64\nexport const ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH = 128\n\nexport const ATHENA_AUTH_ADMIN_LIMITS = {\n maxAdminJsonBytes: ATHENA_AUTH_MAX_ADMIN_JSON_BYTES,\n maxAdminJsonDepth: ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH,\n maxTemplateVariables: ATHENA_AUTH_MAX_TEMPLATE_VARIABLES,\n maxTemplateVariableLength: ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH,\n} as const satisfies AthenaAuthAdminLimits\n\nfunction describeTemplateVariableTarget(target?: string) {\n const normalized = target?.trim()\n return normalized && normalized.length > 0\n ? normalized\n : 'Athena auth admin email template variables'\n}\n\nexport function assertAthenaAuthTemplateVariables(\n variables: unknown,\n target?: string,\n): asserts variables is string[] {\n const label = describeTemplateVariableTarget(target)\n if (!Array.isArray(variables)) {\n throw new Error(`${label} must be an array of strings.`)\n }\n\n if (variables.length > ATHENA_AUTH_MAX_TEMPLATE_VARIABLES) {\n throw new Error(\n `${label} cannot contain more than ${ATHENA_AUTH_MAX_TEMPLATE_VARIABLES} entries.`,\n )\n }\n\n variables.forEach((variable, index) => {\n if (typeof variable !== 'string') {\n throw new Error(\n `${label} must contain only strings. Received ${typeof variable} at index ${index}.`,\n )\n }\n\n if (variable.length > ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH) {\n throw new Error(\n `${label} cannot contain entries longer than ${ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH} characters. Received ${variable.length} characters at index ${index}.`,\n )\n }\n })\n}\n","import type {\n AthenaAuthEmailTemplateBuilder,\n AthenaAuthEmailTemplateCreateFromDefinitionInput,\n AthenaAuthEmailTemplateDefinition,\n AthenaAuthEmailTemplateUpdateFromDefinitionInput,\n AthenaAuthLooseRecord,\n AthenaAuthReactEmailComponent,\n AthenaAuthReactEmailConfig,\n AthenaAuthReactEmailEventPhase,\n AthenaAuthReactEmailProps,\n AthenaAuthReactEmailRenderEvent,\n AthenaAuthReactEmailRenderInput,\n AthenaAuthReactEmailRenderOptions,\n} from './types.ts'\n\ntype ReactEmailRenderModule = {\n render: (element: unknown) => string | Promise<string>\n toPlainText?: (html: string) => string | Promise<string>\n pretty?: (html: string) => string | Promise<string>\n}\n\nexport interface AthenaAuthRenderedReactEmail {\n html: string\n text?: string\n}\n\nexport interface AthenaAuthReactEmailPayload {\n react?: AthenaAuthReactEmailRenderInput\n}\n\nexport interface AthenaAuthReactEmailRuntimeOptions {\n route?: string\n defaults?: AthenaAuthReactEmailRenderOptions\n observe?: (event: AthenaAuthReactEmailRenderEvent) => void\n}\n\ninterface ResolvePayloadFieldsInput {\n htmlField: string\n textField: string\n variablesField?: string\n}\n\nlet reactEmailRenderModulePromise: Promise<ReactEmailRenderModule> | undefined\n\nfunction isRecord(value: unknown): value is AthenaAuthLooseRecord {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction isFunction(value: unknown): value is (...args: unknown[]) => unknown {\n return typeof value === 'function'\n}\n\nfunction toStringOrUndefined(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined\n return value\n}\n\nfunction nowIsoString() {\n return new Date().toISOString()\n}\n\nfunction emitReactEmailEvent(\n observe: ((event: AthenaAuthReactEmailRenderEvent) => void) | undefined,\n phase: AthenaAuthReactEmailEventPhase,\n input: Omit<AthenaAuthReactEmailRenderEvent, 'phase' | 'timestamp'> = {},\n) {\n if (!observe) return\n try {\n observe({\n phase,\n timestamp: nowIsoString(),\n ...input,\n })\n } catch {\n // Observability hooks are non-blocking.\n }\n}\n\nfunction mergeRenderDefaults(\n input: AthenaAuthReactEmailRenderInput,\n defaults?: AthenaAuthReactEmailRenderOptions,\n): AthenaAuthReactEmailRenderInput {\n return {\n ...input,\n pretty: input.pretty ?? defaults?.pretty,\n includePlainText: input.includePlainText ?? defaults?.includePlainText,\n }\n}\n\nfunction mergeRuntimeOptions(\n options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig,\n): AthenaAuthReactEmailRuntimeOptions | undefined {\n if (!options) return undefined\n return {\n defaults: options.defaults,\n observe: options.observe,\n route: 'route' in options ? options.route : undefined,\n }\n}\n\nasync function resolveReactEmailRenderModule(): Promise<ReactEmailRenderModule> {\n if (!reactEmailRenderModulePromise) {\n reactEmailRenderModulePromise = (async () => {\n try {\n const loaded = await import('@react-email/render')\n if (!isFunction(loaded.render)) {\n throw new Error('missing render(...) export')\n }\n return {\n render: loaded.render as ReactEmailRenderModule['render'],\n toPlainText: isFunction(loaded.toPlainText)\n ? (loaded.toPlainText as ReactEmailRenderModule['toPlainText'])\n : undefined,\n pretty: isFunction(loaded.pretty)\n ? (loaded.pretty as ReactEmailRenderModule['pretty'])\n : undefined,\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new Error(\n `React Email rendering requires @react-email/render. Install it in your project (for example: pnpm add @react-email/render). Loader error: ${message}`,\n )\n }\n })()\n }\n\n if (!reactEmailRenderModulePromise) {\n throw new Error('React Email renderer module failed to initialize')\n }\n\n return reactEmailRenderModulePromise\n}\n\nasync function resolveReactEmailElement(input: AthenaAuthReactEmailRenderInput): Promise<unknown> {\n if (input.element != null) {\n return input.element\n }\n if (!input.component) {\n throw new Error('react email payload requires either `element` or `component`')\n }\n\n try {\n const reactModule = await import('react')\n if (typeof reactModule.createElement !== 'function') {\n throw new Error('react createElement(...) export is unavailable')\n }\n return reactModule.createElement(\n input.component as Parameters<typeof reactModule.createElement>[0],\n input.props ?? {},\n )\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new Error(\n `React Email component rendering requires react runtime support. Install react in your project. Loader error: ${message}`,\n )\n }\n}\n\nexport function createAuthReactEmailInput<\n TProps extends AthenaAuthReactEmailProps = AthenaAuthReactEmailProps,\n>(\n component: AthenaAuthReactEmailComponent<TProps>,\n props: TProps,\n overrides: Omit<AthenaAuthReactEmailRenderInput, 'component' | 'props' | 'element'> = {},\n): AthenaAuthReactEmailRenderInput {\n return {\n ...overrides,\n component: component as AthenaAuthReactEmailComponent,\n props,\n }\n}\n\nexport function defineAuthEmailTemplate<\n TProps extends AthenaAuthReactEmailProps = AthenaAuthReactEmailProps,\n>(\n definition: AthenaAuthEmailTemplateDefinition<TProps>,\n): AthenaAuthEmailTemplateBuilder<TProps> {\n const react: AthenaAuthEmailTemplateBuilder<TProps>['react'] = (props, overrides) =>\n createAuthReactEmailInput(definition.component, props, {\n ...definition.defaults,\n ...overrides,\n })\n\n return {\n component: definition.component,\n react,\n toTemplateCreate: (input: AthenaAuthEmailTemplateCreateFromDefinitionInput<TProps>) => {\n const templateKey = input.templateKey ?? definition.templateKey\n const subjectTemplate = input.subjectTemplate ?? definition.subjectTemplate\n if (!templateKey) {\n throw new Error('defineAuthEmailTemplate.toTemplateCreate requires templateKey')\n }\n if (!subjectTemplate) {\n throw new Error('defineAuthEmailTemplate.toTemplateCreate requires subjectTemplate')\n }\n\n const { props, react: reactOverrides, ...rest } = input\n return {\n ...rest,\n templateKey,\n subjectTemplate,\n react: react(props, reactOverrides),\n }\n },\n toTemplateUpdate: (input: AthenaAuthEmailTemplateUpdateFromDefinitionInput<TProps>) => {\n const { props, react: reactOverrides, ...rest } = input\n return {\n ...rest,\n react: react(props, reactOverrides),\n }\n },\n }\n}\n\nexport async function renderAthenaReactEmail(\n input: AthenaAuthReactEmailRenderInput,\n options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig,\n): Promise<AthenaAuthRenderedReactEmail> {\n if (!isRecord(input)) {\n throw new Error('react email payload must be an object')\n }\n\n const runtimeOptions = mergeRuntimeOptions(options)\n const start = Date.now()\n emitReactEmailEvent(runtimeOptions?.observe, 'render:start', {\n route: runtimeOptions?.route,\n message: 'Rendering react email payload',\n })\n\n try {\n const normalizedInput = mergeRenderDefaults(input, runtimeOptions?.defaults)\n const element = await resolveReactEmailElement(normalizedInput)\n const renderModule = await resolveReactEmailRenderModule()\n const htmlValue = await renderModule.render(element)\n const renderedHtml = typeof htmlValue === 'string' ? htmlValue : String(htmlValue ?? '')\n if (!renderedHtml.trim()) {\n throw new Error('react email renderer returned an empty HTML string')\n }\n\n let html = renderedHtml\n if (normalizedInput.pretty && renderModule.pretty) {\n const prettyValue = await renderModule.pretty(renderedHtml)\n if (typeof prettyValue === 'string' && prettyValue.trim().length > 0) {\n html = prettyValue\n }\n }\n\n const explicitText = toStringOrUndefined(normalizedInput.text)\n if (explicitText !== undefined) {\n emitReactEmailEvent(runtimeOptions?.observe, 'render:success', {\n route: runtimeOptions?.route,\n durationMs: Date.now() - start,\n message: 'Rendered react email with explicit text',\n })\n return {\n html,\n text: explicitText,\n }\n }\n\n if (normalizedInput.includePlainText === false || !renderModule.toPlainText) {\n emitReactEmailEvent(runtimeOptions?.observe, 'render:success', {\n route: runtimeOptions?.route,\n durationMs: Date.now() - start,\n message: 'Rendered react email without plain-text derivation',\n })\n return { html }\n }\n\n const plainTextValue = await renderModule.toPlainText(html)\n const plainText = toStringOrUndefined(plainTextValue)\n emitReactEmailEvent(runtimeOptions?.observe, 'render:success', {\n route: runtimeOptions?.route,\n durationMs: Date.now() - start,\n message: plainText ? 'Rendered react email with derived plain text' : 'Rendered react email HTML only',\n })\n if (plainText === undefined) {\n return { html }\n }\n\n return {\n html,\n text: plainText,\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n emitReactEmailEvent(runtimeOptions?.observe, 'render:error', {\n route: runtimeOptions?.route,\n durationMs: Date.now() - start,\n error: message,\n message: 'Failed to render react email payload',\n })\n throw error\n }\n}\n\nexport async function resolveReactEmailPayloadFields<\n TInput extends AthenaAuthReactEmailPayload,\n>(\n input: TInput,\n fields: ResolvePayloadFieldsInput,\n options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig,\n): Promise<Omit<TInput, 'react'>> {\n const { react, ...payloadWithoutReact } = input\n if (!react) {\n return payloadWithoutReact as Omit<TInput, 'react'>\n }\n\n const rendered = await renderAthenaReactEmail(react, options)\n const payload: AthenaAuthLooseRecord = {\n ...(payloadWithoutReact as AthenaAuthLooseRecord),\n }\n\n payload[fields.htmlField] = rendered.html\n\n const currentTextValue = payload[fields.textField]\n if (\n rendered.text !== undefined &&\n (currentTextValue === undefined || currentTextValue === null || currentTextValue === '')\n ) {\n payload[fields.textField] = rendered.text\n }\n\n if (\n fields.variablesField &&\n (payload[fields.variablesField] === undefined || payload[fields.variablesField] === null) &&\n isRecord(react.props)\n ) {\n const derivedVariables = Object.keys(react.props)\n if (derivedVariables.length > 0) {\n payload[fields.variablesField] = derivedVariables\n }\n }\n\n return payload as Omit<TInput, 'react'>\n}\n","import type {\n AthenaAdminHasPermissionRequest,\n AthenaAdminRevokeUserSessionRequest,\n AthenaAdminRevokeUserSessionsRequest,\n AthenaAdminSuccessResponse,\n AthenaAdminHasPermissionResponse,\n AthenaApiKeyDeleteAllExpiredResponse,\n AthenaAuthCallOptions,\n AthenaAuthClientConfig,\n AthenaAuthEndpointPath,\n AthenaAuthErrorCode,\n AthenaAuthErrorDetails,\n AthenaAuthFetchCompatibleInput,\n AthenaAuthGetUserResponse,\n AthenaAuthGenericInput,\n AthenaAuthGenericQueryInput,\n AthenaAuthBindings,\n AthenaAuthEmailListQuery,\n AthenaAuthEmailListResponse,\n AthenaAuthGuardResult,\n AthenaAuthHealthResponse,\n AthenaAuthOkResponse,\n AthenaAuthLinkedAccount,\n AthenaAuthOrganizationBindings,\n AthenaAuthOrganization,\n AthenaAuthOrganizationCheckSlugRequest,\n AthenaAuthOrganizationCreateRequest,\n AthenaAuthOrganizationDeleteRequest,\n AthenaAuthOrganizationGetFullQuery,\n AthenaAuthOrganizationGetInvitationQuery,\n AthenaAuthOrganizationInvitation,\n AthenaAuthOrganizationInvitationActionRequest,\n AthenaAuthOrganizationInviteMemberRequest,\n AthenaAuthOrganizationLeaveRequest,\n AthenaAuthOrganizationListInvitationsQuery,\n AthenaAuthOrganizationListMembersQuery,\n AthenaAuthOrganizationListUserInvitationsQuery,\n AthenaAuthOrganizationMember,\n AthenaAuthOrganizationRemoveMemberRequest,\n AthenaAuthOrganizationSetActiveRequest,\n AthenaAuthOrganizationUpdateMemberRoleRequest,\n AthenaAuthOrganizationUpdateRequest,\n AthenaAuthMethod,\n AthenaAuthQueryValue,\n AthenaAuthRequestInput,\n AthenaAuthReactEmailRenderInput,\n AthenaAuthResult,\n InternalAthenaAuthModule,\n AthenaAuthSession,\n AthenaAuthSessionResponse,\n AthenaAuthSignInResponse,\n AthenaAuthSignOutResponse,\n AthenaAuthSocialRedirectResponse,\n AthenaAuthStatusResponse,\n AthenaAuthUser,\n AthenaChangeEmailRequest,\n AthenaChangePasswordRequest,\n AthenaDeleteUserCallbackRequest,\n AthenaDeleteUserRequest,\n AthenaDeleteUserResponse,\n AthenaEmailSignInRequest,\n AthenaEmailSignUpRequest,\n AthenaForgetPasswordRequest,\n AthenaLinkSocialRequest,\n AthenaOAuthAccountTokenRequest,\n AthenaOAuthTokenBundle,\n AthenaResetPasswordRequest,\n AthenaSendVerificationEmailRequest,\n AthenaSocialSignInRequest,\n AthenaTwoFactorGenerateBackupCodesRequest,\n AthenaTwoFactorGenerateBackupCodesResponse,\n AthenaUnlinkAccountRequest,\n AthenaUpdateUserRequest,\n AthenaVerifyEmailRequest,\n AthenaUsernameSignInRequest,\n} from './types.ts'\nimport { assertAthenaAuthTemplateVariables } from './limits.ts'\nimport { resolveReactEmailPayloadFields } from './react-email.ts'\nimport { buildSdkHeaderValue } from '../sdk-version.ts'\nimport { buildServiceRequestHeaders } from '../utils/athena-request-headers.ts'\n\nconst DEFAULT_AUTH_BASE_URL = 'http://localhost:3001/api/auth'\nconst SDK_NAME = 'xylex-group/athena-auth'\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME)\n\ntype AuthRequestContext = {\n endpoint: AthenaAuthEndpointPath\n method: AthenaAuthMethod\n}\n\nexport interface InternalAuthModuleRuntimeOptions {\n resolveCallOptions?: () =>\n | AthenaAuthCallOptions\n | undefined\n | Promise<AthenaAuthCallOptions | undefined>\n}\n\ntype InternalErrorInput = AuthRequestContext & {\n code: AthenaAuthErrorCode\n status: number\n message: string\n requestId?: string\n hint?: string\n cause?: string\n}\n\nfunction normalizeBaseUrl(baseUrl?: string): string {\n return (baseUrl ?? DEFAULT_AUTH_BASE_URL).replace(/\\/$/, '')\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction parseResponseBody(rawText: string, contentType: string | null) {\n if (!rawText) {\n return { parsed: null as unknown, parseFailed: false }\n }\n\n const contentTypeSuggestsJson =\n contentType?.toLowerCase().includes('application/json') ?? false\n const looksJson =\n contentTypeSuggestsJson || rawText.startsWith('{') || rawText.startsWith('[')\n\n if (!looksJson) {\n return { parsed: rawText as unknown, parseFailed: false }\n }\n\n try {\n return { parsed: JSON.parse(rawText) as unknown, parseFailed: false }\n } catch {\n return { parsed: rawText as unknown, parseFailed: true }\n }\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n return (\n headers.get('x-request-id') ??\n headers.get('x-correlation-id') ??\n headers.get('x-athena-request-id') ??\n undefined\n )\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\n if (isRecord(payload)) {\n const messageCandidates = [payload.error, payload.message, payload.details]\n for (const candidate of messageCandidates) {\n if (typeof candidate === 'string' && candidate.trim().length > 0) {\n return candidate.trim()\n }\n }\n }\n\n if (typeof payload === 'string' && payload.trim().length > 0) {\n return payload.trim()\n }\n\n return fallback\n}\n\nfunction toErrorDetails(input: InternalErrorInput): AthenaAuthErrorDetails {\n return {\n code: input.code,\n message: input.message,\n status: input.status,\n endpoint: input.endpoint,\n method: input.method,\n requestId: input.requestId,\n hint: input.hint,\n cause: input.cause,\n }\n}\n\nfunction mergeCallOptions(\n base?: AthenaAuthCallOptions,\n override?: AthenaAuthCallOptions,\n): AthenaAuthCallOptions | undefined {\n if (!base && !override) return undefined\n return {\n ...base,\n ...override,\n headers: {\n ...(base?.headers ?? {}),\n ...(override?.headers ?? {}),\n },\n }\n}\n\nfunction copyDefinedField(\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n targetKey: string,\n sourceKey: string,\n): void {\n if (!(sourceKey in source)) {\n return\n }\n const value = source[sourceKey]\n if (value !== undefined) {\n target[targetKey] = value\n }\n}\n\nfunction normalizeEmailTemplateAttachmentsValue(value: unknown): unknown {\n if (typeof value === 'string' || value == null) {\n return value\n }\n\n if (Array.isArray(value)) {\n return value.map(item => normalizeEmailTemplateAttachmentsValue(item))\n }\n\n if (typeof value !== 'object') {\n return value\n }\n\n const attachment = { ...(value as Record<string, unknown>) }\n copyDefinedField(attachment, attachment, 'file_url', 'fileUrl')\n delete attachment.fileUrl\n return attachment\n}\n\nfunction normalizeAdminEmailTemplatePayload(payload: Record<string, unknown>): Record<string, unknown> {\n const normalized = { ...payload }\n\n copyDefinedField(normalized, payload, 'template_key', 'templateKey')\n copyDefinedField(normalized, payload, 'event_type', 'eventType')\n copyDefinedField(normalized, payload, 'subject_template', 'subjectTemplate')\n copyDefinedField(normalized, payload, 'text_template', 'textTemplate')\n copyDefinedField(normalized, payload, 'html_template', 'htmlTemplate')\n copyDefinedField(normalized, payload, 'variable_bindings', 'variableBindings')\n copyDefinedField(normalized, payload, 'attachment_failure_mode', 'attachmentFailureMode')\n copyDefinedField(normalized, payload, 'is_active', 'isActive')\n\n if (Object.hasOwn(payload, 'attachments')) {\n normalized.attachments = normalizeEmailTemplateAttachmentsValue(payload.attachments)\n }\n\n delete normalized.templateKey\n delete normalized.eventType\n delete normalized.subjectTemplate\n delete normalized.textTemplate\n delete normalized.htmlTemplate\n delete normalized.variableBindings\n delete normalized.attachmentFailureMode\n delete normalized.isActive\n\n return normalized\n}\n\nfunction toReactEmailTemplateCompatibilityInput<TInput extends AthenaAuthFetchCompatibleInput & {\n react?: AthenaAuthReactEmailRenderInput\n}>(input: TInput): TInput {\n const payload = input as Record<string, unknown>\n const compatibility = { ...payload }\n\n copyDefinedField(compatibility, payload, 'templateKey', 'template_key')\n copyDefinedField(compatibility, payload, 'eventType', 'event_type')\n copyDefinedField(compatibility, payload, 'subjectTemplate', 'subject_template')\n copyDefinedField(compatibility, payload, 'textTemplate', 'text_template')\n copyDefinedField(compatibility, payload, 'htmlTemplate', 'html_template')\n copyDefinedField(compatibility, payload, 'variableBindings', 'variable_bindings')\n copyDefinedField(compatibility, payload, 'attachmentFailureMode', 'attachment_failure_mode')\n copyDefinedField(compatibility, payload, 'isActive', 'is_active')\n\n return compatibility as unknown as TInput\n}\n\nfunction normalizeAdminEmailTemplateSendPayload(payload: Record<string, unknown>): Record<string, unknown> {\n const normalized = { ...payload }\n\n copyDefinedField(normalized, payload, 'template_id', 'templateId')\n copyDefinedField(normalized, payload, 'recipient_email', 'recipientEmail')\n copyDefinedField(normalized, payload, 'render_variables', 'renderVariables')\n copyDefinedField(normalized, payload, 'user_id', 'userId')\n copyDefinedField(normalized, payload, 'organization_id', 'organizationId')\n copyDefinedField(normalized, payload, 'session_token', 'sessionToken')\n copyDefinedField(normalized, payload, 'attachment_failure_mode', 'attachmentFailureMode')\n\n if (Object.hasOwn(payload, 'attachments')) {\n normalized.attachments = normalizeEmailTemplateAttachmentsValue(payload.attachments)\n }\n\n delete normalized.templateId\n delete normalized.recipientEmail\n delete normalized.renderVariables\n delete normalized.userId\n delete normalized.organizationId\n delete normalized.sessionToken\n delete normalized.attachmentFailureMode\n\n return normalized\n}\n\nfunction toSessionGuardFailure(\n sessionResult: AthenaAuthResult<AthenaAuthSessionResponse>,\n): AthenaAuthGuardResult {\n if (sessionResult.status === 401 || sessionResult.data == null) {\n return {\n ok: false,\n reason: 'unauthorized',\n status: 401,\n error: sessionResult.error ?? 'Unauthorized',\n sessionResult,\n }\n }\n\n return {\n ok: false,\n reason: 'upstream_error',\n status: sessionResult.status,\n error: sessionResult.error ?? 'Failed to resolve current session',\n sessionResult,\n }\n}\n\nfunction toPermissionGuardFailure(\n permissionResult: AthenaAuthResult<AthenaAdminHasPermissionResponse>,\n sessionResult: AthenaAuthResult<AthenaAuthSessionResponse>,\n): AthenaAuthGuardResult {\n if (permissionResult.status === 401) {\n return {\n ok: false,\n reason: 'unauthorized',\n status: 401,\n error: permissionResult.error ?? 'Unauthorized',\n sessionResult,\n permissionResult,\n }\n }\n\n if (permissionResult.status === 403) {\n return {\n ok: false,\n reason: 'forbidden',\n status: 403,\n error: permissionResult.error ?? 'Forbidden',\n sessionResult,\n permissionResult,\n }\n }\n\n return {\n ok: false,\n reason: 'upstream_error',\n status: permissionResult.status,\n error: permissionResult.error ?? 'Failed to resolve permission check',\n sessionResult,\n permissionResult,\n }\n}\n\nfunction extractFetchOptions<T extends AthenaAuthFetchCompatibleInput | undefined>(input: T) {\n if (!input) {\n return {\n payload: undefined,\n fetchOptions: undefined,\n }\n }\n\n const { fetchOptions, ...rest } = input\n const hasPayloadKeys = Object.keys(rest).length > 0\n return {\n payload: hasPayloadKeys ? rest : undefined,\n fetchOptions,\n }\n}\n\nfunction buildHeaders(\n config: AthenaAuthClientConfig,\n options?: AthenaAuthCallOptions,\n): Record<string, string> {\n return buildServiceRequestHeaders('auth', SDK_HEADER_VALUE, config, options)\n}\n\nfunction appendQueryParam(searchParams: URLSearchParams, key: string, value: AthenaAuthQueryValue) {\n if (value === undefined || value === null) return\n if (Array.isArray(value)) {\n value.forEach(item => {\n searchParams.append(key, String(item))\n })\n return\n }\n searchParams.append(key, String(value))\n}\n\nfunction buildRequestUrl(\n baseUrl: string,\n endpoint: AthenaAuthEndpointPath,\n query?: Record<string, AthenaAuthQueryValue>,\n) {\n const url = `${baseUrl}${endpoint}`\n if (!query || Object.keys(query).length === 0) return url\n const searchParams = new URLSearchParams()\n Object.entries(query).forEach(([key, value]) => appendQueryParam(searchParams, key, value))\n const queryText = searchParams.toString()\n return queryText ? `${url}?${queryText}` : url\n}\n\nfunction inferDefaultMethod(endpoint: AthenaAuthEndpointPath): AthenaAuthMethod {\n if (endpoint.startsWith('/reset-password/')) {\n return 'GET'\n }\n\n switch (endpoint) {\n case '/get-session':\n case '/list-sessions':\n case '/verify-email':\n case '/change-email/verify':\n case '/delete-user/verify':\n case '/email-list':\n case '/email/list':\n case '/delete-user/callback':\n case '/list-accounts':\n case '/passkey/generate-register-options':\n case '/passkey/list-user-passkeys':\n case '/.well-known/webauthn':\n case '/admin/list-users':\n case '/admin/athena-client/list':\n case '/admin/audit-log/list':\n case '/admin/email/get':\n case '/admin/email-failure/list':\n case '/admin/email-failure/get':\n case '/admin/email-template/get':\n case '/admin/email-template/list':\n case '/admin/email/list':\n case '/api-key/get':\n case '/api-key/list':\n case '/organization/get-full-organization':\n case '/organization/list':\n case '/organization/get-invitation':\n case '/organization/list-invitations':\n case '/organization/list-user-invitations':\n case '/organization/list-members':\n case '/organization/get-active-member':\n case '/health':\n case '/ok':\n case '/error':\n return 'GET'\n default:\n return 'POST'\n }\n}\n\nasync function callAuthEndpoint<T>(\n config: AthenaAuthClientConfig,\n context: AuthRequestContext,\n body?: unknown,\n query?: Record<string, AthenaAuthQueryValue>,\n options?: AthenaAuthCallOptions,\n): Promise<AthenaAuthResult<T>> {\n const baseUrl = normalizeBaseUrl(options?.baseUrl ?? config.baseUrl)\n const url = buildRequestUrl(baseUrl, context.endpoint, query)\n const headers = buildHeaders(config, options)\n const credentials = options?.credentials ?? config.credentials ?? 'include'\n const requestInit: RequestInit = {\n method: context.method,\n headers,\n credentials,\n signal: options?.signal,\n }\n\n if (context.method !== 'GET') {\n requestInit.body = JSON.stringify(body ?? {})\n }\n\n const fetcher = config.fetch ?? globalThis.fetch\n if (!fetcher) {\n const details = toErrorDetails({\n code: 'UNKNOWN_ERROR',\n message: 'No fetch implementation available for auth client',\n status: 0,\n endpoint: context.endpoint,\n method: context.method,\n hint: 'Use Node 18+ or provide `fetch` through createClient({ auth: { fetch } })',\n })\n return {\n ok: false,\n status: 0,\n data: null,\n error: details.message,\n errorDetails: details,\n raw: null,\n }\n }\n\n try {\n const response = await fetcher(url, requestInit)\n const rawText = await response.text()\n const requestId = resolveRequestId(response.headers)\n const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\n\n if (parsedBody.parseFailed) {\n const details = toErrorDetails({\n code: 'INVALID_JSON',\n message: 'Auth server returned malformed JSON',\n status: response.status,\n endpoint: context.endpoint,\n method: context.method,\n requestId,\n hint: 'Verify the auth endpoint response body is valid JSON.',\n cause: rawText.slice(0, 300),\n })\n return {\n ok: false,\n status: response.status,\n data: null,\n error: details.message,\n errorDetails: details,\n raw: parsedBody.parsed,\n }\n }\n\n const parsed = parsedBody.parsed\n\n if (!response.ok) {\n const details = toErrorDetails({\n code: 'HTTP_ERROR',\n message: resolveErrorMessage(\n parsed,\n `Auth endpoint ${context.method} ${context.endpoint} failed with status ${response.status}`,\n ),\n status: response.status,\n endpoint: context.endpoint,\n method: context.method,\n requestId,\n })\n return {\n ok: false,\n status: response.status,\n data: null,\n error: details.message,\n errorDetails: details,\n raw: parsed,\n }\n }\n\n return {\n ok: true,\n status: response.status,\n data: (parsed as T) ?? null,\n error: null,\n errorDetails: null,\n raw: parsed,\n }\n } catch (callError) {\n const message = callError instanceof Error ? callError.message : String(callError)\n const details = toErrorDetails({\n code: 'NETWORK_ERROR',\n message: `Network error while calling ${context.method} ${context.endpoint}: ${message}`,\n status: 0,\n endpoint: context.endpoint,\n method: context.method,\n cause: message,\n hint: 'Check auth server URL, DNS, and network reachability.',\n })\n return {\n ok: false,\n status: 0,\n data: null,\n error: details.message,\n errorDetails: details,\n raw: null,\n }\n }\n}\n\nfunction executePostWithCompatibleInput<TPayload extends AthenaAuthFetchCompatibleInput, TResult>(\n config: AthenaAuthClientConfig,\n context: AuthRequestContext,\n input: TPayload,\n options?: AthenaAuthCallOptions,\n) {\n const { payload, fetchOptions } = extractFetchOptions(input)\n const mergedOptions = mergeCallOptions(fetchOptions, options)\n return callAuthEndpoint<TResult>(config, context, payload ?? {}, undefined, mergedOptions)\n}\n\nfunction executePostWithOptionalInput<TResult>(\n config: AthenaAuthClientConfig,\n context: AuthRequestContext,\n input?: AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n) {\n const { fetchOptions } = extractFetchOptions(input)\n const mergedOptions = mergeCallOptions(fetchOptions, options)\n return callAuthEndpoint<TResult>(config, context, {}, undefined, mergedOptions)\n}\n\nfunction executeGetWithCompatibleInput<TResult>(\n config: AthenaAuthClientConfig,\n context: AuthRequestContext,\n input?: AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n) {\n const { fetchOptions } = extractFetchOptions(input)\n const mergedOptions = mergeCallOptions(fetchOptions, options)\n return callAuthEndpoint<TResult>(config, context, undefined, undefined, mergedOptions)\n}\n\nfunction executeGetWithQueryCompatibleInput<\n TQuery extends object,\n TResult,\n>(\n config: AthenaAuthClientConfig,\n context: AuthRequestContext,\n input?: { query?: TQuery } & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n) {\n const { payload, fetchOptions } = extractFetchOptions(input)\n const mergedOptions = mergeCallOptions(fetchOptions, options)\n const query = (payload as { query?: Record<string, AthenaAuthQueryValue> } | undefined)?.query\n return callAuthEndpoint<TResult>(\n config,\n context,\n undefined,\n query,\n mergedOptions,\n )\n}\n\n/**\n * Internal auth-module assembly used by the root client factory.\n */\nexport function createAuthModule(\n config: AthenaAuthClientConfig = {},\n runtimeOptions: InternalAuthModuleRuntimeOptions = {},\n): InternalAthenaAuthModule {\n const normalizedBaseUrl = normalizeBaseUrl(config.baseUrl)\n const resolvedConfig: AthenaAuthClientConfig = {\n ...config,\n baseUrl: normalizedBaseUrl,\n }\n\n const request = async <T = unknown>(\n input: AthenaAuthRequestInput,\n options?: AthenaAuthCallOptions,\n ): Promise<AthenaAuthResult<T>> => {\n const method = input.method ?? (input.body !== undefined ? 'POST' : inferDefaultMethod(input.endpoint))\n const contextOptions = await runtimeOptions.resolveCallOptions?.()\n const mergedOptions = mergeCallOptions(\n mergeCallOptions(contextOptions, input.fetchOptions),\n options,\n )\n return await callAuthEndpoint<T>(\n resolvedConfig,\n { endpoint: input.endpoint, method },\n input.body,\n input.query,\n mergedOptions,\n )\n }\n\n const postGeneric = <T = unknown>(\n endpoint: AthenaAuthEndpointPath,\n input?: (AthenaAuthFetchCompatibleInput & object),\n options?: AthenaAuthCallOptions,\n ) => {\n const { payload, fetchOptions } = extractFetchOptions(input)\n return request<T>(\n {\n endpoint,\n method: 'POST',\n body: payload ?? {},\n fetchOptions,\n },\n options,\n )\n }\n\n const getGeneric = <T = unknown>(\n endpoint: AthenaAuthEndpointPath,\n input?: AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) => {\n const { fetchOptions } = extractFetchOptions(input)\n return request<T>(\n {\n endpoint,\n method: 'GET',\n fetchOptions,\n },\n options,\n )\n }\n\n const getWithQuery = <\n T = unknown,\n TQuery extends object = Record<string, AthenaAuthQueryValue>,\n >(\n endpoint: AthenaAuthEndpointPath,\n input?: AthenaAuthFetchCompatibleInput & {\n query?: TQuery\n },\n options?: AthenaAuthCallOptions,\n ) => {\n const { payload, fetchOptions } = extractFetchOptions(input)\n const query = (payload as { query?: TQuery } | undefined)?.query as\n | Record<string, AthenaAuthQueryValue>\n | undefined\n return request<T>(\n {\n endpoint,\n method: 'GET',\n query,\n fetchOptions,\n },\n options,\n )\n }\n\n const withReactEmailRoute = (route: AthenaAuthEndpointPath) => ({\n ...resolvedConfig.reactEmail,\n route,\n })\n\n const resolveAdminEmailPayload = <TInput extends AthenaAuthFetchCompatibleInput & {\n react?: AthenaAuthReactEmailRenderInput\n }>(\n route: '/admin/email/create' | '/admin/email/update',\n input: TInput,\n ) =>\n resolveReactEmailPayloadFields(input, {\n htmlField: 'htmlBody',\n textField: 'textBody',\n }, withReactEmailRoute(route))\n\n const resolveAdminEmailTemplatePayload = <TInput extends AthenaAuthFetchCompatibleInput & {\n react?: AthenaAuthReactEmailRenderInput\n }>(\n route: '/admin/email-template/create' | '/admin/email-template/update',\n input: TInput,\n ) =>\n resolveReactEmailPayloadFields(toReactEmailTemplateCompatibilityInput(input), {\n htmlField: 'htmlTemplate',\n textField: 'textTemplate',\n variablesField: 'variables',\n }, withReactEmailRoute(route)).then(payload => {\n const normalizedPayload = normalizeAdminEmailTemplatePayload(payload as Record<string, unknown>)\n if ('variables' in payload && payload.variables !== undefined && payload.variables !== null) {\n assertAthenaAuthTemplateVariables(\n payload.variables,\n `${route} variables`,\n )\n }\n return normalizedPayload\n })\n\n const requireSession: AthenaAuthBindings['requireSession'] = async (input, options) => {\n const sessionInput = input?.fetchOptions\n ? { fetchOptions: input.fetchOptions }\n : undefined\n const sessionResult = await getGeneric<AthenaAuthSessionResponse>(\n '/get-session',\n sessionInput,\n options,\n )\n\n if (!sessionResult.ok || sessionResult.data == null) {\n return toSessionGuardFailure(sessionResult)\n }\n\n return {\n ok: true,\n session: sessionResult.data,\n }\n }\n\n const getUser: AthenaAuthBindings['getUser'] = async (input, options) => {\n const sessionResult = await getGeneric<AthenaAuthSessionResponse>(\n '/get-session',\n input,\n options,\n )\n\n if (!sessionResult.ok) {\n return {\n ...sessionResult,\n data: null,\n }\n }\n\n return {\n ...sessionResult,\n data: {\n user: sessionResult.data?.user ?? null,\n } satisfies AthenaAuthGetUserResponse,\n }\n }\n\n const requirePermission = async (\n endpoint: '/admin/has-permission' | '/organization/has-permission',\n input: AthenaAdminHasPermissionRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ): Promise<AthenaAuthGuardResult> => {\n const sessionGuard = await requireSession(\n input?.fetchOptions ? { fetchOptions: input.fetchOptions } : undefined,\n options,\n )\n\n if (!sessionGuard.ok) {\n return sessionGuard\n }\n\n const permissionResult = await postGeneric<AthenaAdminHasPermissionResponse>(\n endpoint,\n input,\n options,\n )\n\n if (!permissionResult.ok) {\n return toPermissionGuardFailure(permissionResult, {\n ok: true,\n status: 200,\n data: sessionGuard.session,\n error: null,\n errorDetails: null,\n raw: sessionGuard.session,\n })\n }\n\n if (!permissionResult.data?.success) {\n return {\n ok: false,\n reason: 'forbidden',\n status: 403,\n error: permissionResult.data?.error ?? 'Forbidden',\n sessionResult: {\n ok: true,\n status: 200,\n data: sessionGuard.session,\n error: null,\n errorDetails: null,\n raw: sessionGuard.session,\n },\n permissionResult,\n }\n }\n\n return sessionGuard\n }\n\n const listUserEmailsWithFallback: AthenaAuthBindings['user']['email']['list'] = async (input, options) => {\n const primary = await getWithQuery<AthenaAuthEmailListResponse, AthenaAuthEmailListQuery>(\n '/email/list',\n input,\n options,\n )\n if (primary.ok || primary.status !== 404 || primary.errorDetails?.code !== 'HTTP_ERROR') {\n return primary\n }\n return getWithQuery<AthenaAuthEmailListResponse, AthenaAuthEmailListQuery>(\n '/email-list',\n input,\n options,\n )\n }\n\n const healthWithFallback: AthenaAuthBindings['health'] = async (input, options) => {\n const primary = await getGeneric<AthenaAuthHealthResponse>('/health', input, options)\n if (primary.ok || primary.status !== 404 || primary.errorDetails?.code !== 'HTTP_ERROR') {\n return primary\n }\n\n const fallback = await getGeneric<AthenaAuthOkResponse>('/ok', input, options)\n if (!fallback.ok) {\n return {\n ...fallback,\n data: null,\n }\n }\n\n const fallbackStatus =\n isRecord(fallback.data) && typeof fallback.data.ok === 'boolean'\n ? (fallback.data.ok ? 'ok' : 'error')\n : 'ok'\n\n return {\n ...fallback,\n data: {\n status: fallbackStatus,\n },\n }\n }\n\n const signOut = (\n input?: AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithOptionalInput<AthenaAuthSignOutResponse>(\n resolvedConfig,\n { endpoint: '/sign-out', method: 'POST' },\n input,\n options,\n )\n\n const revokeSessions = (\n input?: AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithOptionalInput<AthenaAuthStatusResponse>(\n resolvedConfig,\n { endpoint: '/revoke-sessions', method: 'POST' },\n input,\n options,\n )\n\n const revokeOtherSessions = (\n input?: AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithOptionalInput<AthenaAuthStatusResponse>(\n resolvedConfig,\n { endpoint: '/revoke-other-sessions', method: 'POST' },\n input,\n options,\n )\n\n const revokeSession = (\n input: { token: string } & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithCompatibleInput<typeof input, AthenaAuthStatusResponse>(\n resolvedConfig,\n { endpoint: '/revoke-session', method: 'POST' },\n input,\n options,\n )\n\n const deleteUser = (\n input?: AthenaDeleteUserRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) => {\n const { payload, fetchOptions } = extractFetchOptions(input)\n const mergedOptions = mergeCallOptions(fetchOptions, options)\n return callAuthEndpoint<AthenaDeleteUserResponse>(\n resolvedConfig,\n { endpoint: '/delete-user', method: 'POST' },\n payload ?? {},\n undefined,\n mergedOptions,\n )\n }\n\n const deleteUserCallback = (\n input?: AthenaDeleteUserCallbackRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) => {\n const { payload, fetchOptions } = extractFetchOptions(input)\n const mergedOptions = mergeCallOptions(fetchOptions, options)\n const query = (payload ?? {}) as AthenaDeleteUserCallbackRequest\n return callAuthEndpoint<AthenaDeleteUserResponse>(\n resolvedConfig,\n { endpoint: '/delete-user/callback', method: 'GET' },\n undefined,\n {\n token: query.token,\n callbackURL: query.callbackURL,\n },\n mergedOptions,\n )\n }\n\n const resolveResetPasswordToken = (\n input: { token: string; callbackURL?: string } & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) => {\n const { payload, fetchOptions } = extractFetchOptions(input)\n const mergedOptions = mergeCallOptions(fetchOptions, options)\n const query = payload as { token?: string; callbackURL?: string } | undefined\n const token = query?.token?.trim()\n if (!token) {\n throw new Error('resolveResetPasswordToken requires a non-empty token')\n }\n const endpoint = `/reset-password/${encodeURIComponent(token)}` as AthenaAuthEndpointPath\n return callAuthEndpoint<{ token?: string }>(\n resolvedConfig,\n { endpoint, method: 'GET' },\n undefined,\n query?.callbackURL ? { callbackURL: query.callbackURL } : undefined,\n mergedOptions,\n )\n }\n\n const organization: AthenaAuthOrganizationBindings = {\n create: (input, options) =>\n executePostWithCompatibleInput<\n AthenaAuthOrganizationCreateRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthOrganization\n >(\n resolvedConfig,\n { endpoint: '/organization/create', method: 'POST' },\n input,\n options,\n ),\n update: (input, options) =>\n executePostWithCompatibleInput<\n AthenaAuthOrganizationUpdateRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthOrganization\n >(\n resolvedConfig,\n { endpoint: '/organization/update', method: 'POST' },\n input,\n options,\n ),\n delete: (input, options) =>\n executePostWithCompatibleInput<\n AthenaAuthOrganizationDeleteRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthStatusResponse\n >(\n resolvedConfig,\n { endpoint: '/organization/delete', method: 'POST' },\n input,\n options,\n ),\n setActive: (input, options) =>\n executePostWithCompatibleInput<\n AthenaAuthOrganizationSetActiveRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthStatusResponse\n >(\n resolvedConfig,\n { endpoint: '/organization/set-active', method: 'POST' },\n input,\n options,\n ),\n list: (input, options) =>\n getGeneric<AthenaAuthOrganization[]>(\n '/organization/list',\n input,\n options,\n ),\n getFull: (input, options) =>\n executeGetWithQueryCompatibleInput<AthenaAuthOrganizationGetFullQuery, {\n organization: AthenaAuthOrganization\n members?: AthenaAuthOrganizationMember[]\n invitations?: AthenaAuthOrganizationInvitation[]\n }>(\n resolvedConfig,\n { endpoint: '/organization/get-full-organization', method: 'GET' },\n input,\n options,\n ),\n checkSlug: (input, options) =>\n executePostWithCompatibleInput<\n AthenaAuthOrganizationCheckSlugRequest & AthenaAuthFetchCompatibleInput,\n { available: boolean }\n >(\n resolvedConfig,\n { endpoint: '/organization/check-slug', method: 'POST' },\n input,\n options,\n ),\n leave: (input, options) =>\n executePostWithCompatibleInput<\n AthenaAuthOrganizationLeaveRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthStatusResponse\n >(\n resolvedConfig,\n { endpoint: '/organization/leave', method: 'POST' },\n input,\n options,\n ),\n listUserInvitations: (input, options) =>\n executeGetWithQueryCompatibleInput<\n AthenaAuthOrganizationListUserInvitationsQuery,\n AthenaAuthOrganizationInvitation[]\n >(\n resolvedConfig,\n { endpoint: '/organization/list-user-invitations', method: 'GET' },\n input,\n options,\n ),\n hasPermission: (input, options) =>\n postGeneric<AthenaAdminHasPermissionResponse>(\n '/organization/has-permission',\n input,\n options,\n ),\n requirePermission: (input, options) =>\n requirePermission('/organization/has-permission', input, options),\n invitation: {\n cancel: (input, options) =>\n executePostWithCompatibleInput<\n AthenaAuthOrganizationInvitationActionRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthStatusResponse\n >(\n resolvedConfig,\n { endpoint: '/organization/cancel-invitation', method: 'POST' },\n input,\n options,\n ),\n accept: (input, options) =>\n executePostWithCompatibleInput<\n AthenaAuthOrganizationInvitationActionRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthStatusResponse\n >(\n resolvedConfig,\n { endpoint: '/organization/accept-invitation', method: 'POST' },\n input,\n options,\n ),\n get: (input, options) =>\n executeGetWithQueryCompatibleInput<\n AthenaAuthOrganizationGetInvitationQuery,\n AthenaAuthOrganizationInvitation\n >(\n resolvedConfig,\n { endpoint: '/organization/get-invitation', method: 'GET' },\n input,\n options,\n ),\n reject: (input, options) =>\n executePostWithCompatibleInput<\n AthenaAuthOrganizationInvitationActionRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthStatusResponse\n >(\n resolvedConfig,\n { endpoint: '/organization/reject-invitation', method: 'POST' },\n input,\n options,\n ),\n list: (input, options) =>\n executeGetWithQueryCompatibleInput<\n AthenaAuthOrganizationListInvitationsQuery,\n AthenaAuthOrganizationInvitation[]\n >(\n resolvedConfig,\n { endpoint: '/organization/list-invitations', method: 'GET' },\n input,\n options,\n ),\n },\n member: {\n remove: (input, options) =>\n executePostWithCompatibleInput<\n AthenaAuthOrganizationRemoveMemberRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthStatusResponse\n >(\n resolvedConfig,\n { endpoint: '/organization/remove-member', method: 'POST' },\n input,\n options,\n ),\n updateRole: (input, options) =>\n executePostWithCompatibleInput<\n AthenaAuthOrganizationUpdateMemberRoleRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthStatusResponse\n >(\n resolvedConfig,\n { endpoint: '/organization/update-member-role', method: 'POST' },\n input,\n options,\n ),\n invite: (input, options) =>\n executePostWithCompatibleInput<\n AthenaAuthOrganizationInviteMemberRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthOrganizationInvitation\n >(\n resolvedConfig,\n { endpoint: '/organization/invite-member', method: 'POST' },\n input,\n options,\n ),\n getActive: (input, options) =>\n executeGetWithCompatibleInput<AthenaAuthOrganizationMember>(\n resolvedConfig,\n { endpoint: '/organization/get-active-member', method: 'GET' },\n input,\n options,\n ),\n list: (input, options) =>\n executeGetWithQueryCompatibleInput<\n AthenaAuthOrganizationListMembersQuery,\n AthenaAuthOrganizationMember[]\n >(\n resolvedConfig,\n { endpoint: '/organization/list-members', method: 'GET' },\n input,\n options,\n ),\n },\n }\n\n const authResetPassword = Object.assign(\n (\n input: AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithCompatibleInput<\n AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthStatusResponse\n >(\n resolvedConfig,\n { endpoint: '/reset-password', method: 'POST' },\n input,\n options,\n ),\n {\n token: resolveResetPasswordToken,\n },\n )\n\n const sessionRevokeBinding: AthenaAuthBindings['session']['revoke'] = (\n input,\n options,\n ) => {\n if (Array.isArray(input)) {\n if (input.length === 0) {\n throw new Error('session.revoke requires at least one session token')\n }\n if (input.length === 1) {\n return revokeSession(input[0], options)\n }\n return revokeSessions(undefined, options)\n }\n\n const parsed = input as AthenaAuthGenericInput & {\n token?: string\n tokens?: string[]\n }\n const tokens = Array.isArray(parsed.tokens)\n ? parsed.tokens.filter(token => token.trim().length > 0)\n : undefined\n\n if (tokens && tokens.length > 1) {\n return revokeSessions(\n parsed.fetchOptions ? { fetchOptions: parsed.fetchOptions } : undefined,\n options,\n )\n }\n\n if (tokens && tokens.length === 1) {\n return revokeSession(\n { token: tokens[0], fetchOptions: parsed.fetchOptions },\n options,\n )\n }\n\n const token = parsed.token?.trim()\n if (!token) {\n throw new Error('session.revoke requires a non-empty token or a non-empty token list')\n }\n\n return revokeSession(\n {\n token,\n fetchOptions: parsed.fetchOptions,\n },\n options,\n )\n }\n\n const adminUserSessionRevokeBinding: AthenaAuthBindings['admin']['user']['session']['revoke'] = (\n input,\n options,\n ) => {\n const requireUserId = (userId: string | undefined): string => {\n const trimmed = String(userId ?? '').trim()\n if (!trimmed) {\n throw new Error('admin.user.session.revoke requires a non-empty userId')\n }\n return trimmed\n }\n\n const requireSinglePluralUserId = (\n sessions: AthenaAdminRevokeUserSessionRequest[],\n ): AthenaAdminRevokeUserSessionsRequest => {\n const uniqueUserIds = [...new Set(sessions.map(session => requireUserId(session.userId)))]\n if (uniqueUserIds.length !== 1) {\n throw new Error('admin.user.session.revoke requires the same userId across plural payloads')\n }\n return { userId: uniqueUserIds[0] }\n }\n\n if (Array.isArray(input)) {\n if (input.length === 0) {\n throw new Error('admin.user.session.revoke requires at least one payload item')\n }\n if (input.length === 1) {\n return postGeneric<AthenaAdminSuccessResponse>(\n '/admin/revoke-user-session',\n {\n ...input[0],\n userId: requireUserId(input[0].userId),\n } as AthenaAuthGenericInput,\n options,\n )\n }\n return postGeneric<AthenaAdminSuccessResponse>(\n '/admin/revoke-user-sessions',\n requireSinglePluralUserId(input),\n options,\n )\n }\n\n const parsed = input as AthenaAuthGenericInput & {\n sessions?: AthenaAdminRevokeUserSessionRequest[]\n sessionToken?: string\n userId?: string\n }\n const sessions = parsed.sessions\n\n if (sessions && sessions.length === 0) {\n throw new Error('admin.user.session.revoke requires at least one payload item')\n }\n\n if (sessions && sessions.length === 1) {\n return postGeneric<AthenaAdminSuccessResponse>(\n '/admin/revoke-user-session',\n {\n ...sessions[0],\n userId: requireUserId(sessions[0].userId),\n fetchOptions: parsed.fetchOptions,\n } as AthenaAuthGenericInput,\n options,\n )\n }\n\n if (sessions && sessions.length > 1) {\n return postGeneric<AthenaAdminSuccessResponse>(\n '/admin/revoke-user-sessions',\n {\n ...requireSinglePluralUserId(sessions),\n fetchOptions: parsed.fetchOptions,\n } as AthenaAuthGenericInput,\n options,\n )\n }\n\n const normalizedUserId = requireUserId(parsed.userId)\n\n if (!parsed.sessionToken) {\n return postGeneric<AthenaAdminSuccessResponse>(\n '/admin/revoke-user-sessions',\n {\n userId: normalizedUserId,\n fetchOptions: parsed.fetchOptions,\n } as AthenaAuthGenericInput,\n options,\n )\n }\n return postGeneric<AthenaAdminSuccessResponse>(\n '/admin/revoke-user-session',\n {\n ...parsed,\n userId: normalizedUserId,\n } as AthenaAuthGenericInput,\n options,\n )\n }\n\n const auth: AthenaAuthBindings = {\n getSession: (input, options) => getGeneric('/get-session', input, options),\n getUser,\n requireSession,\n signOut,\n forgetPassword: (input, options) => postGeneric('/forget-password', input, options),\n resetPassword: authResetPassword,\n setPassword: (input, options) => postGeneric('/set-password', input, options),\n verifyEmail: (input, options) => {\n const queryInput: AthenaAuthGenericQueryInput = {\n query: {\n token: input.token,\n callbackURL: input.callbackURL,\n },\n fetchOptions: input.fetchOptions,\n }\n return getWithQuery<{ user: AthenaAuthUser; status: boolean }>(\n '/verify-email',\n queryInput,\n options,\n )\n },\n sendVerificationEmail: (input, options) => postGeneric('/send-verification-email', input, options),\n changeEmail: (input, options) => postGeneric('/change-email', input, options),\n changeEmailVerify: (input, options) => getWithQuery('/change-email/verify', input, options),\n deleteUserVerify: (input, options) => getWithQuery('/delete-user/verify', input, options),\n changePassword: (input, options) => postGeneric('/change-password', input, options),\n // Better Auth UI flat method aliases (also nested under session/account/social/user).\n listSessions: (input, options) => getGeneric('/list-sessions', input, options),\n revokeSession: sessionRevokeBinding,\n revokeOtherSessions,\n listAccounts: (input, options) => getGeneric('/list-accounts', input, options),\n unlinkAccount: (input, options) => postGeneric('/unlink-account', input, options),\n linkSocial: (input, options) => postGeneric('/link-social', input, options),\n updateUser: (input, options) => postGeneric('/update-user', input, options),\n user: {\n update: (input, options) => postGeneric('/update-user', input, options),\n delete: (input, options) => postGeneric('/delete-user', input, options),\n email: {\n list: listUserEmailsWithFallback,\n },\n },\n session: {\n list: (input, options) => getGeneric('/list-sessions', input, options),\n revoke: sessionRevokeBinding,\n revokeOther: revokeOtherSessions,\n },\n social: {\n link: (input, options) => postGeneric('/link-social', input, options),\n },\n account: {\n list: (input, options) => getGeneric('/list-accounts', input, options),\n unlink: (input, options) => postGeneric('/unlink-account', input, options),\n },\n deleteUser: {\n callback: deleteUserCallback,\n },\n refreshToken: (input, options) => postGeneric('/refresh-token', input, options),\n getAccessToken: (input, options) => postGeneric('/get-access-token', input, options),\n health: healthWithFallback,\n ok: (input, options) => getGeneric('/ok', input, options),\n error: (input, options) => getGeneric('/error', input, options),\n twoFactor: {\n getTotpUri: (input, options) => postGeneric('/two-factor/get-totp-uri', input, options),\n verifyTotp: (input, options) => postGeneric('/two-factor/verify-totp', input, options),\n sendOtp: (input, options) => postGeneric('/two-factor/send-otp', input, options),\n verifyOtp: (input, options) => postGeneric('/two-factor/verify-otp', input, options),\n verifyBackupCode: (input, options) => postGeneric('/two-factor/verify-backup-code', input, options),\n generateBackupCodes: (input, options) =>\n executePostWithCompatibleInput<\n AthenaTwoFactorGenerateBackupCodesRequest & AthenaAuthFetchCompatibleInput,\n AthenaTwoFactorGenerateBackupCodesResponse\n >(\n resolvedConfig,\n { endpoint: '/two-factor/generate-backup-codes', method: 'POST' },\n input,\n options,\n ),\n enable: (input, options) => postGeneric('/two-factor/enable', input, options),\n disable: (input, options) => postGeneric('/two-factor/disable', input, options),\n },\n passkey: {\n generateRegisterOptions: (input, options) =>\n getGeneric('/passkey/generate-register-options', input, options),\n generateAuthenticateOptions: (input, options) =>\n postGeneric('/passkey/generate-authenticate-options', input, options),\n verifyRegistration: (input, options) =>\n postGeneric('/passkey/verify-registration', input, options),\n verifyAuthentication: (input, options) =>\n postGeneric('/passkey/verify-authentication', input, options),\n listUserPasskeys: (input, options) => getGeneric('/passkey/list-user-passkeys', input, options),\n deletePasskey: (input, options) => postGeneric('/passkey/delete-passkey', input, options),\n updatePasskey: (input, options) => postGeneric('/passkey/update-passkey', input, options),\n getRelatedOrigins: (input, options) => getGeneric('/.well-known/webauthn', input, options),\n },\n admin: {\n role: {\n set: (input, options) => postGeneric('/admin/set-role', input, options),\n },\n user: {\n list: (input, options) => getWithQuery('/admin/list-users', input, options),\n create: (input, options) => postGeneric('/admin/create-user', input, options),\n unban: (input, options) => postGeneric('/admin/unban-user', input, options),\n ban: (input, options) => postGeneric('/admin/ban-user', input, options),\n impersonate: (input, options) => postGeneric('/admin/impersonate-user', input, options),\n stopImpersonating: (input, options) => postGeneric('/admin/stop-impersonating', input, options),\n remove: (input, options) => postGeneric('/admin/remove-user', input, options),\n setPassword: (input, options) => postGeneric('/admin/set-user-password', input, options),\n session: {\n list: (input, options) => postGeneric('/admin/list-user-sessions', input, options),\n revoke: adminUserSessionRevokeBinding,\n },\n },\n hasPermission: (input, options) =>\n postGeneric<AthenaAdminHasPermissionResponse>('/admin/has-permission', input, options),\n requirePermission: (input, options) =>\n requirePermission('/admin/has-permission', input, options),\n apiKey: {\n create: (input, options) => postGeneric('/admin/api-key/create', input, options),\n },\n athenaClient: {\n create: (input, options) => postGeneric('/admin/athena-client/create', input, options),\n list: (input, options) => getWithQuery('/admin/athena-client/list', input, options),\n },\n auditLog: {\n list: (input, options) => getWithQuery('/admin/audit-log/list', input, options),\n },\n email: {\n list: (input, options) => getWithQuery('/admin/email/list', input, options),\n get: (input, options) => getWithQuery('/admin/email/get', input, options),\n create: async (input, options) =>\n postGeneric(\n '/admin/email/create',\n await resolveAdminEmailPayload('/admin/email/create', input),\n options,\n ),\n update: async (input, options) =>\n postGeneric(\n '/admin/email/update',\n await resolveAdminEmailPayload('/admin/email/update', input),\n options,\n ),\n delete: (input, options) => postGeneric('/admin/email/delete', input, options),\n failure: {\n list: (input, options) => getWithQuery('/admin/email-failure/list', input, options),\n get: (input, options) => getWithQuery('/admin/email-failure/get', input, options),\n create: (input, options) => postGeneric('/admin/email-failure/create', input, options),\n update: (input, options) => postGeneric('/admin/email-failure/update', input, options),\n delete: (input, options) => postGeneric('/admin/email-failure/delete', input, options),\n },\n template: {\n list: (input, options) => getWithQuery('/admin/email-template/list', input, options),\n get: (input, options) => getWithQuery('/admin/email-template/get', input, options),\n create: async (input, options) =>\n postGeneric(\n '/admin/email-template/create',\n await resolveAdminEmailTemplatePayload('/admin/email-template/create', input),\n options,\n ),\n update: async (input, options) =>\n postGeneric(\n '/admin/email-template/update',\n await resolveAdminEmailTemplatePayload('/admin/email-template/update', input),\n options,\n ),\n delete: (input, options) => postGeneric('/admin/email-template/delete', input, options),\n send: (input, options) =>\n postGeneric(\n '/admin/email-template/send',\n normalizeAdminEmailTemplateSendPayload(extractFetchOptions(input).payload as Record<string, unknown>),\n options,\n ),\n },\n eventType: {\n list: (input, options) => getWithQuery('/admin/email-event-type/list', input, options),\n },\n },\n emailTemplate: {\n get: (input, options) => getWithQuery('/admin/email-template/get', input, options),\n create: async (input, options) =>\n postGeneric(\n '/admin/email-template/create',\n await resolveAdminEmailTemplatePayload('/admin/email-template/create', input),\n options,\n ),\n delete: (input, options) => postGeneric('/admin/email-template/delete', input, options),\n list: (input, options) => getWithQuery('/admin/email-template/list', input, options),\n update: async (input, options) =>\n postGeneric(\n '/admin/email-template/update',\n await resolveAdminEmailTemplatePayload('/admin/email-template/update', input),\n options,\n ),\n send: (input, options) =>\n postGeneric(\n '/admin/email-template/send',\n normalizeAdminEmailTemplateSendPayload(extractFetchOptions(input).payload as Record<string, unknown>),\n options,\n ),\n },\n emailEventType: {\n list: (input, options) => getWithQuery('/admin/email-event-type/list', input, options),\n },\n },\n apiKey: {\n create: (input, options) => postGeneric('/api-key/create', input, options),\n get: (input, options) => getWithQuery('/api-key/get', input, options),\n update: (input, options) => postGeneric('/api-key/update', input, options),\n delete: (input, options) => postGeneric('/api-key/delete', input, options),\n list: (input, options) => getWithQuery('/api-key/list', input, options),\n verify: (input, options) => postGeneric('/api-key/verify', input, options),\n deleteAllExpired: (input, options) =>\n executePostWithOptionalInput<AthenaApiKeyDeleteAllExpiredResponse>(\n resolvedConfig,\n { endpoint: '/api-key/delete-all-expired-api-keys', method: 'POST' },\n input,\n options,\n ),\n },\n signIn: {\n email: (input, options) => postGeneric('/sign-in/email', input, options),\n username: (input, options) => postGeneric('/sign-in/username', input, options),\n social: (input, options) => postGeneric('/sign-in/social', input, options),\n },\n signUp: {\n email: (input, options) => postGeneric('/sign-up/email', input, options),\n },\n organization,\n callback: {\n provider: (input, options) => {\n const { payload, fetchOptions } = extractFetchOptions(input)\n const parsed = payload as {\n provider?: string\n code?: string\n state?: string\n } | undefined\n const provider = String(parsed?.provider ?? '').trim()\n if (!provider) {\n throw new Error('callback.provider requires a non-empty provider value')\n }\n const code = String(parsed?.code ?? '').trim()\n const state = String(parsed?.state ?? '').trim()\n if (!code || !state) {\n throw new Error('callback.provider requires non-empty code and state values')\n }\n const endpoint = `/callback/${encodeURIComponent(provider)}` as AthenaAuthEndpointPath\n return request({\n endpoint,\n method: 'GET',\n query: {\n code,\n state,\n },\n fetchOptions,\n }, options)\n },\n },\n }\n\n return {\n baseUrl: normalizedBaseUrl,\n request,\n signIn: {\n email: (\n input: AthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithCompatibleInput<\n AthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthSignInResponse\n >(\n resolvedConfig,\n { endpoint: '/sign-in/email', method: 'POST' },\n input,\n options,\n ),\n username: (\n input: AthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithCompatibleInput<\n AthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthSignInResponse\n >(\n resolvedConfig,\n { endpoint: '/sign-in/username', method: 'POST' },\n input,\n options,\n ),\n social: (\n input: AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithCompatibleInput<\n AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthSocialRedirectResponse | AthenaAuthSignInResponse\n >(\n resolvedConfig,\n { endpoint: '/sign-in/social', method: 'POST' },\n input,\n options,\n ),\n },\n signUp: {\n email: (\n input: AthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithCompatibleInput<\n AthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthSignInResponse\n >(\n resolvedConfig,\n { endpoint: '/sign-up/email', method: 'POST' },\n input,\n options,\n ),\n },\n signOut,\n logout: signOut,\n getSession: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\n executeGetWithCompatibleInput<AthenaAuthSessionResponse>(\n resolvedConfig,\n { endpoint: '/get-session', method: 'GET' },\n input,\n options,\n ),\n getUser,\n requireSession,\n listSessions: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\n executeGetWithCompatibleInput<AthenaAuthSession[]>(\n resolvedConfig,\n { endpoint: '/list-sessions', method: 'GET' },\n input,\n options,\n ),\n revokeSession,\n clearSession: revokeSession,\n revokeSessions,\n clearSessions: revokeSessions,\n revokeOtherSessions,\n clearOtherSessions: revokeOtherSessions,\n forgetPassword: (\n input: AthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithCompatibleInput<\n AthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthStatusResponse\n >(\n resolvedConfig,\n { endpoint: '/forget-password', method: 'POST' },\n input,\n options,\n ),\n resetPassword: (\n input: AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithCompatibleInput<\n AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthStatusResponse\n >(\n resolvedConfig,\n { endpoint: '/reset-password', method: 'POST' },\n input,\n options,\n ),\n resolveResetPasswordToken,\n verifyEmail: (\n input: AthenaVerifyEmailRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) => {\n const { payload, fetchOptions } = extractFetchOptions(input)\n const mergedOptions = mergeCallOptions(fetchOptions, options)\n const query = payload as AthenaVerifyEmailRequest | undefined\n return callAuthEndpoint<{ user: AthenaAuthUser; status: boolean }>(\n resolvedConfig,\n { endpoint: '/verify-email', method: 'GET' },\n undefined,\n query\n ? {\n token: query.token,\n callbackURL: query.callbackURL,\n }\n : undefined,\n mergedOptions,\n )\n },\n sendVerificationEmail: (\n input: AthenaSendVerificationEmailRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithCompatibleInput<\n AthenaSendVerificationEmailRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthStatusResponse\n >(\n resolvedConfig,\n { endpoint: '/send-verification-email', method: 'POST' },\n input,\n options,\n ),\n changeEmail: (\n input: AthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithCompatibleInput<\n AthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\n { status: boolean; message?: string | null }\n >(\n resolvedConfig,\n { endpoint: '/change-email', method: 'POST' },\n input,\n options,\n ),\n changePassword: (\n input: AthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithCompatibleInput<\n AthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\n { token?: string | null; user: AthenaAuthUser }\n >(\n resolvedConfig,\n { endpoint: '/change-password', method: 'POST' },\n input,\n options,\n ),\n updateUser: (\n input: AthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithCompatibleInput<\n AthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthStatusResponse\n >(\n resolvedConfig,\n { endpoint: '/update-user', method: 'POST' },\n input,\n options,\n ),\n deleteUser,\n deleteUserCallback,\n linkSocial: (\n input: AthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithCompatibleInput<\n AthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthSocialRedirectResponse\n >(\n resolvedConfig,\n { endpoint: '/link-social', method: 'POST' },\n input,\n options,\n ),\n listAccounts: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\n executeGetWithCompatibleInput<AthenaAuthLinkedAccount[]>(\n resolvedConfig,\n { endpoint: '/list-accounts', method: 'GET' },\n input,\n options,\n ),\n unlinkAccount: (\n input: AthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithCompatibleInput<\n AthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\n AthenaAuthStatusResponse\n >(\n resolvedConfig,\n { endpoint: '/unlink-account', method: 'POST' },\n input,\n options,\n ),\n refreshToken: (\n input: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithCompatibleInput<\n AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n AthenaOAuthTokenBundle\n >(\n resolvedConfig,\n { endpoint: '/refresh-token', method: 'POST' },\n input,\n options,\n ),\n getAccessToken: (\n input: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithCompatibleInput<\n AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n AthenaOAuthTokenBundle\n >(\n resolvedConfig,\n { endpoint: '/get-access-token', method: 'POST' },\n input,\n options,\n ),\n organization,\n auth,\n }\n}\n","import type {\n AthenaStorageDirectUploadConfig,\n AthenaStoragePutBody,\n} from './module.ts'\n\ninterface DirectUploadProgress {\n loaded: number\n}\n\ninterface DirectUploadXhr {\n readonly upload: {\n onprogress: ((event: { loaded: number }) => void) | null\n }\n readonly status: number\n readonly statusText: string\n readonly response: unknown\n onload: (() => void) | null\n onerror: (() => void) | null\n onabort: (() => void) | null\n open(method: string, url: string): void\n setRequestHeader(key: string, value: string): void\n getAllResponseHeaders(): string\n send(body: unknown): void\n abort(): void\n}\n\ndeclare const XMLHttpRequest: (new () => DirectUploadXhr) | undefined\n\nconst SERVICE = 's3'\nconst TERMINATOR = 'aws4_request'\n\nexport async function putDirectStorageUploadBody(\n config: AthenaStorageDirectUploadConfig,\n bucket: string | undefined,\n storageKey: string,\n body: AthenaStoragePutBody,\n uploadHeaders: Record<string, string>,\n signal: AbortSignal | undefined,\n onProgress: (progress: DirectUploadProgress) => void,\n): Promise<Response> {\n if (config.bucket && bucket && config.bucket !== bucket) {\n throw new Error(\n `athena.storage.file.upload direct mode bucket mismatch: configured ${config.bucket} but Athena returned ${bucket}`,\n )\n }\n const target = createDirectUploadTarget(config, bucket, storageKey)\n const bytes = await bodyToArrayBuffer(body)\n const payloadHash = await sha256Hex(bytes)\n const headers = new Headers(uploadHeaders)\n if (isBlobBody(body) && body.type && !headers.has('Content-Type')) {\n headers.set('Content-Type', body.type)\n }\n\n const signed = await signDirectUploadRequest(config, target, headers, payloadHash)\n if (typeof XMLHttpRequest !== 'undefined') {\n return putWithXhr(target.toString(), signed, body, signal, onProgress)\n }\n\n onProgress({ loaded: 0 })\n const response = await fetch(target, {\n method: 'PUT',\n headers: signed.requestHeaders,\n body: body as RequestInit['body'],\n signal,\n })\n if (!response.ok) {\n throw new Error(`athena.storage.file.upload failed with status ${response.status}`)\n }\n onProgress({ loaded: bytes.byteLength })\n return response\n}\n\nfunction createDirectUploadTarget(\n config: AthenaStorageDirectUploadConfig,\n bucket: string | undefined,\n storageKey: string,\n): URL {\n const resolvedBucket = config.bucket ?? bucket\n if (!resolvedBucket?.trim()) {\n throw new Error(\n 'athena.storage.file.upload direct mode requires a bucket in storage.directUpload or the server upload response',\n )\n }\n if (!storageKey.trim()) {\n throw new Error('athena.storage.file.upload direct mode requires a storage key')\n }\n\n let endpoint: URL\n try {\n endpoint = new URL(config.endpoint)\n } catch (error) {\n throw new Error(\n `athena.storage.file.upload direct mode received an invalid endpoint: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n if (endpoint.search || endpoint.hash) {\n throw new Error('athena.storage.file.upload direct mode endpoint must not contain a query or hash')\n }\n\n const endpointPath = endpoint.pathname.replace(/\\/+$/, '')\n const pathParts = config.forcePathStyle === false\n ? [endpointPath, storageKey]\n : [endpointPath, resolvedBucket, storageKey]\n if (config.forcePathStyle === false) {\n endpoint.hostname = `${resolvedBucket}.${endpoint.hostname}`\n }\n endpoint.pathname = pathParts\n .filter(Boolean)\n .flatMap(part => part.split('/'))\n .map(awsEncode)\n .join('/')\n .replace(/^([^/])/, '/$1')\n return endpoint\n}\n\nasync function signDirectUploadRequest(\n config: AthenaStorageDirectUploadConfig,\n target: URL,\n inputHeaders: Headers,\n payloadHash: string,\n): Promise<{ requestHeaders: Record<string, string> }> {\n const accessKeyId = config.accessKeyId.trim()\n const secretAccessKey = config.secretAccessKey.trim()\n if (!accessKeyId || !secretAccessKey) {\n throw new Error(\n 'athena.storage.file.upload direct mode requires accessKeyId and secretAccessKey',\n )\n }\n\n const now = new Date()\n const amzDate = formatAmzDate(now)\n const shortDate = amzDate.slice(0, 8)\n const region = config.region?.trim() || 'auto'\n const headers: Record<string, string> = {}\n inputHeaders.forEach((value, key) => {\n if (key.toLowerCase() !== 'authorization' && key.toLowerCase() !== 'host') {\n headers[key.toLowerCase()] = value.trim().replace(/\\s+/g, ' ')\n }\n })\n headers['x-amz-content-sha256'] = payloadHash\n headers['x-amz-date'] = amzDate\n if (config.sessionToken?.trim()) {\n headers['x-amz-security-token'] = config.sessionToken.trim()\n }\n\n const canonicalHeaders = Object.keys(headers)\n .sort()\n .map(key => `${key}:${headers[key]}\\n`)\n .join('')\n const signedHeaders = Object.keys(headers).sort().join(';')\n const canonicalRequest = [\n 'PUT',\n target.pathname,\n '',\n `host:${target.host}\\n${canonicalHeaders}`,\n `host;${signedHeaders}`,\n payloadHash,\n ].join('\\n')\n const credentialScope = `${shortDate}/${region}/${SERVICE}/${TERMINATOR}`\n const stringToSign = [\n 'AWS4-HMAC-SHA256',\n amzDate,\n credentialScope,\n await sha256Hex(canonicalRequest),\n ].join('\\n')\n const dateKey = await hmac(`AWS4${secretAccessKey}`, shortDate)\n const regionKey = await hmac(dateKey, region)\n const serviceKey = await hmac(regionKey, SERVICE)\n const signingKey = await hmac(serviceKey, TERMINATOR)\n const signature = await hmacHex(signingKey, stringToSign)\n headers.authorization = `AWS4-HMAC-SHA256 Credential=${accessKeyId}/${credentialScope}, SignedHeaders=host;${signedHeaders}, Signature=${signature}`\n\n return { requestHeaders: headers }\n}\n\nasync function putWithXhr(\n url: string,\n signed: { requestHeaders: Record<string, string> },\n body: AthenaStoragePutBody,\n signal: AbortSignal | undefined,\n onProgress: (progress: DirectUploadProgress) => void,\n): Promise<Response> {\n const Xhr = XMLHttpRequest\n if (Xhr === undefined) {\n return Promise.reject(new Error('athena.storage.file.upload direct mode requires XMLHttpRequest in this runtime'))\n }\n return new Promise((resolve, reject) => {\n const xhr = new Xhr()\n const abort = () => xhr.abort()\n xhr.open('PUT', url)\n Object.entries(signed.requestHeaders).forEach(([key, value]) => xhr.setRequestHeader(key, value))\n xhr.upload.onprogress = event => onProgress({ loaded: event.loaded })\n xhr.onload = () => {\n signal?.removeEventListener('abort', abort)\n if (xhr.status < 200 || xhr.status >= 300) {\n reject(new Error(`athena.storage.file.upload failed with status ${xhr.status}`))\n return\n }\n onProgress({ loaded: bodySize(body) })\n resolve(new Response(xhr.response as ConstructorParameters<typeof Response>[0], {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseXhrHeaders(xhr.getAllResponseHeaders()),\n }))\n }\n xhr.onerror = () => {\n signal?.removeEventListener('abort', abort)\n reject(new Error('athena.storage.file.upload failed with a network error'))\n }\n xhr.onabort = () => {\n signal?.removeEventListener('abort', abort)\n reject(new DOMException('Upload aborted', 'AbortError'))\n }\n if (signal) {\n if (signal.aborted) {\n abort()\n return\n }\n signal.addEventListener('abort', abort, { once: true })\n }\n xhr.send(body)\n })\n}\n\nfunction isBlobBody(body: AthenaStoragePutBody): body is Blob {\n return typeof Blob !== 'undefined' && body instanceof Blob\n}\n\nasync function bodyToArrayBuffer(body: AthenaStoragePutBody): Promise<ArrayBuffer> {\n if (isBlobBody(body)) return body.arrayBuffer()\n if (body instanceof ArrayBuffer) return body\n if (ArrayBuffer.isView(body)) {\n return body.buffer.slice(body.byteOffset, body.byteOffset + body.byteLength) as ArrayBuffer\n }\n throw new Error('athena.storage.file.upload direct mode does not support ReadableStream bodies')\n}\n\nfunction bodySize(body: AthenaStoragePutBody): number {\n if (isBlobBody(body)) return body.size\n if (body instanceof ArrayBuffer) return body.byteLength\n if (ArrayBuffer.isView(body)) return body.byteLength\n return 0\n}\n\nfunction awsEncode(value: string): string {\n return encodeURIComponent(value).replace(/[!'()*]/g, character => `%${character.charCodeAt(0).toString(16).toUpperCase()}`)\n}\n\nfunction formatAmzDate(date: Date): string {\n return date.toISOString().replace(/[:-]|\\.\\d{3}/g, '')\n}\n\nasync function sha256Hex(value: string | ArrayBuffer): Promise<string> {\n const bytes = typeof value === 'string' ? new TextEncoder().encode(value) : value\n const digest = await crypto.subtle.digest('SHA-256', bytes)\n return toHex(new Uint8Array(digest))\n}\n\nasync function hmac(key: string | ArrayBuffer, value: string): Promise<ArrayBuffer> {\n const keyBytes = typeof key === 'string' ? new TextEncoder().encode(key) : key\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyBytes,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign'],\n )\n return crypto.subtle.sign('HMAC', cryptoKey, new TextEncoder().encode(value))\n}\n\nasync function hmacHex(key: ArrayBuffer, value: string): Promise<string> {\n return toHex(new Uint8Array(await hmac(key, value)))\n}\n\nfunction toHex(bytes: Uint8Array): string {\n return Array.from(bytes, byte => byte.toString(16).padStart(2, '0')).join('')\n}\n\nfunction parseXhrHeaders(rawHeaders: string): Headers {\n const headers = new Headers()\n rawHeaders.trim().split(/[\\r\\n]+/).forEach(line => {\n const separator = line.indexOf(':')\n if (separator > 0) {\n headers.set(line.slice(0, separator).trim(), line.slice(separator + 1).trim())\n }\n })\n return headers\n}\n","import type {\n AthenaStorageBinaryCallOptions,\n AthenaStorageCallOptions,\n AthenaStorageDirectUploadConfig,\n CreateStorageUploadUrlRequest,\n GetStorageFileUrlQuery,\n ListStorageFilesRequest,\n ManagedFileRecord,\n StorageBatchUploadUrlResponse,\n StorageFileMutationResponse,\n StorageListFilesResponse,\n StorageMultipartAbortRequest,\n StorageMultipartCompleteRequest,\n StorageMultipartCreateRequest,\n StorageMultipartSignPartRequest,\n StorageServerSideEncryptionOptions,\n StorageUploadUrlResponse,\n} from './module.ts'\nimport { putDirectStorageUploadBody } from './direct-upload.ts'\n\n/** Files at or above this size use multipart unless `forceSinglePut` is set. */\nexport const DEFAULT_MULTIPART_THRESHOLD_BYTES = 32 * 1024 * 1024\n/** Chunk size for multipart uploads (S3 requires >= 5 MiB except the last part). */\nexport const DEFAULT_MULTIPART_PART_SIZE_BYTES = 8 * 1024 * 1024\nconst MIN_MULTIPART_PART_SIZE_BYTES = 5 * 1024 * 1024\n\nexport type AthenaStorageTemplateValue = string | number | boolean | null | undefined\nexport type AthenaStorageTemplateVars = Record<string, AthenaStorageTemplateValue>\nexport type AthenaStorageEnv = Record<string, string | undefined>\nexport type AthenaStorageUploadHeaders = ConstructorParameters<typeof Headers>[0]\nexport type AthenaStoragePrefixPath =\n | string\n | ((context: AthenaStoragePathContext) => string | null | undefined)\n\nexport interface AthenaStoragePathContext {\n vars: AthenaStorageTemplateVars\n env: AthenaStorageEnv\n organizationId?: string\n organization_id?: string\n userId?: string\n user_id?: string\n resourceId?: string\n resource_id?: string\n}\n\nexport interface AthenaStorageFileConfig {\n /**\n * Prefix applied by high-level file helpers before storage keys are sent to Athena.\n * Supports tokens such as `{organization_id}`, `{organizationId}`, `{env.NODE_ENV}`,\n * and `${ATHENA_STORAGE_PREFIX}`.\n */\n prefixPath?: AthenaStoragePrefixPath\n vars?: AthenaStorageTemplateVars\n env?: AthenaStorageEnv\n directUpload?: AthenaStorageDirectUploadConfig\n}\n\nexport type AthenaStorageUploadSource = Blob | ArrayBuffer | Uint8Array\n\nexport interface AthenaStorageUploadConstraints {\n maxFiles?: number\n allowedExtensions?: readonly string[]\n extensions?: readonly string[]\n maxFileSizeMb?: number\n maxFileSizeBytes?: number\n}\n\nexport interface AthenaStorageUploadProgress {\n phase: 'preparing' | 'uploading' | 'complete'\n fileIndex: number\n fileCount: number\n fileName: string\n loaded: number\n total: number\n percent: number\n aggregateLoaded: number\n aggregateTotal: number\n aggregatePercent: number\n /** Present when the active file is uploading via multipart. */\n multipart?: {\n uploadId: string\n partNumber: number\n partCount: number\n }\n}\n\nexport type AthenaStorageUploadProgressHandler = (progress: AthenaStorageUploadProgress) => void\n\nexport interface AthenaStorageFileUploadInput extends AthenaStorageUploadConstraints, StorageServerSideEncryptionOptions {\n s3_id: string\n bucket?: string\n files: AthenaStorageUploadSource | ArrayLike<AthenaStorageUploadSource> | readonly AthenaStorageUploadSource[]\n storage_key?: string\n storageKey?: string\n storageKeyTemplate?: string\n prefixPath?: AthenaStoragePrefixPath\n fileName?: string\n name?: string\n original_name?: string\n resource_id?: string\n resourceId?: string\n organization_id?: string\n organizationId?: string\n user_id?: string\n userId?: string\n mime_type?: string\n content_type?: string\n public?: boolean\n metadata?: Record<string, unknown>\n vars?: AthenaStorageTemplateVars\n env?: AthenaStorageEnv\n uploadHeaders?: AthenaStorageUploadHeaders\n onProgress?: AthenaStorageUploadProgressHandler\n /** Override auto-multipart threshold (default 32 MiB). */\n multipartThresholdBytes?: number\n /** Override multipart chunk size (default 8 MiB, minimum 5 MiB). */\n multipartPartSizeBytes?: number\n /** Always use a single PUT even when the file exceeds the multipart threshold. */\n forceSinglePut?: boolean\n /** Always use multipart even when the file is below the threshold. */\n forceMultipart?: boolean\n}\n\nexport interface AthenaStorageUploadedFile {\n file: ManagedFileRecord\n upload: StorageUploadUrlResponse['upload']\n source: AthenaStorageUploadSource\n fileName: string\n storage_key: string\n response: Response\n}\n\nexport interface AthenaStorageFileUploadResult {\n files: AthenaStorageUploadedFile[]\n count: number\n}\n\nexport interface AthenaStorageFileListInput extends Omit<ListStorageFilesRequest, 'prefix'> {\n prefix?: string\n prefixPath?: AthenaStoragePrefixPath\n vars?: AthenaStorageTemplateVars\n env?: AthenaStorageEnv\n organization_id?: string\n organizationId?: string\n user_id?: string\n userId?: string\n resource_id?: string\n resourceId?: string\n}\n\nexport interface AthenaStorageFileDownloadInput extends GetStorageFileUrlQuery {\n fileId?: string\n fileIds?: readonly string[]\n}\n\nexport type AthenaStorageFileDeleteInput = string | readonly string[]\n\nexport interface AthenaStorageFileModule {\n upload(\n input: AthenaStorageFileUploadInput,\n options?: AthenaStorageCallOptions,\n ): Promise<AthenaStorageFileUploadResult>\n uploadMultipart(\n input: AthenaStorageFileUploadInput,\n options?: AthenaStorageCallOptions,\n ): Promise<AthenaStorageFileUploadResult>\n download(\n fileId: string,\n query?: GetStorageFileUrlQuery,\n options?: AthenaStorageBinaryCallOptions,\n ): Promise<Response>\n download(\n fileIds: readonly string[],\n query?: GetStorageFileUrlQuery,\n options?: AthenaStorageBinaryCallOptions,\n ): Promise<Response[]>\n download(\n input: AthenaStorageFileDownloadInput,\n options?: AthenaStorageBinaryCallOptions,\n ): Promise<Response | Response[]>\n list(\n input: AthenaStorageFileListInput,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageListFilesResponse>\n delete(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n delete(fileIds: readonly string[], options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse[]>\n}\n\nexport interface AthenaStorageFileBaseModule {\n createStorageUploadUrl(\n input: CreateStorageUploadUrlRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageUploadUrlResponse>\n createStorageUploadUrls(\n input: { files: CreateStorageUploadUrlRequest[] },\n options?: AthenaStorageCallOptions,\n ): Promise<StorageBatchUploadUrlResponse>\n listStorageFiles(input: ListStorageFilesRequest, options?: AthenaStorageCallOptions): Promise<StorageListFilesResponse>\n getStorageFileProxy(\n fileId: string,\n query?: GetStorageFileUrlQuery,\n options?: AthenaStorageBinaryCallOptions,\n ): Promise<Response>\n deleteStorageFile(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n}\n\nexport interface AthenaStorageMultipartClient {\n create(\n input: StorageMultipartCreateRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n signPart(\n input: StorageMultipartSignPartRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n complete(\n input: StorageMultipartCompleteRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFileMutationResponse>\n abort(\n input: StorageMultipartAbortRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n}\n\ninterface NormalizedUploadSource {\n source: AthenaStorageUploadSource\n fileName: string\n sizeBytes: number\n contentType?: string\n}\n\ninterface ResolvedUploadRequest {\n uploadRequest: CreateStorageUploadUrlRequest\n source: NormalizedUploadSource\n}\n\ninterface AthenaStorageXhrProgressEvent {\n loaded: number\n}\n\ninterface AthenaStorageXhr {\n readonly upload: {\n onprogress: ((event: AthenaStorageXhrProgressEvent) => void) | null\n }\n readonly status: number\n readonly statusText: string\n readonly response: unknown\n onload: (() => void) | null\n onerror: (() => void) | null\n onabort: (() => void) | null\n open(method: string, url: string): void\n setRequestHeader(key: string, value: string): void\n getAllResponseHeaders(): string\n send(body: unknown): void\n abort(): void\n}\n\ndeclare const XMLHttpRequest: (new () => AthenaStorageXhr) | undefined\n\nfunction mergeUploadHeaders(\n serverHeaders: Record<string, string>,\n inputHeaders: AthenaStorageUploadHeaders | undefined,\n): Record<string, string> {\n const headers: Record<string, string> = { ...serverHeaders }\n new Headers(inputHeaders).forEach((value, key) => {\n headers[key] = value\n })\n return headers\n}\n\nexport function createStorageFileModule(\n base: AthenaStorageFileBaseModule,\n config: AthenaStorageFileConfig = {},\n multipart?: AthenaStorageMultipartClient,\n): AthenaStorageFileModule {\n const uploadSinglePut = async (\n input: AthenaStorageFileUploadInput,\n sources: NormalizedUploadSource[],\n options?: AthenaStorageCallOptions,\n ): Promise<AthenaStorageFileUploadResult> => {\n const uploadRequests = sources.map((source, index): ResolvedUploadRequest => {\n const storageKey = resolveUploadStorageKey(input, source, index, options, config)\n return {\n source,\n uploadRequest: {\n s3_id: input.s3_id,\n bucket: input.bucket,\n storage_key: storageKey,\n name: input.name ?? source.fileName,\n original_name: input.original_name ?? source.fileName,\n resource_id: input.resource_id ?? input.resourceId,\n mime_type: input.mime_type ?? source.contentType,\n content_type: input.content_type ?? source.contentType,\n size_bytes: source.sizeBytes,\n public: input.public,\n metadata: input.metadata,\n server_side_encryption: input.server_side_encryption,\n sse: input.sse,\n ssekms_key_id: input.ssekms_key_id,\n kms_key_id: input.kms_key_id,\n bucket_key_enabled: input.bucket_key_enabled,\n },\n }\n })\n\n input.onProgress?.(createProgressSnapshot('preparing', sources, 0, 0, 0))\n\n const uploadUrls =\n uploadRequests.length === 1\n ? [await base.createStorageUploadUrl(uploadRequests[0].uploadRequest, options)]\n : (await base.createStorageUploadUrls({ files: uploadRequests.map(request => request.uploadRequest) }, options)).files\n\n const aggregateLoaded = new Array(uploadRequests.length).fill(0) as number[]\n const uploaded: AthenaStorageUploadedFile[] = []\n\n for (let index = 0; index < uploadRequests.length; index += 1) {\n const request = uploadRequests[index]\n const uploadUrl = uploadUrls[index]\n const aggregateProgress = (progress: { loaded: number }) => {\n aggregateLoaded[index] = progress.loaded\n input.onProgress?.(createProgressSnapshot('uploading', sources, index, progress.loaded, sum(aggregateLoaded)))\n }\n const response = config.directUpload\n ? await putDirectStorageUploadBody(\n config.directUpload,\n uploadUrl.upload.bucket,\n uploadUrl.upload.storage_key,\n request.source.source,\n mergeUploadHeaders(uploadUrl.upload.headers ?? {}, input.uploadHeaders),\n options?.signal,\n aggregateProgress,\n )\n : await putUploadBody(\n uploadUrl.upload.url,\n uploadUrl.upload.headers ?? {},\n request.source,\n input,\n options,\n aggregateProgress,\n )\n uploaded.push({\n file: uploadUrl.file,\n upload: uploadUrl.upload,\n source: request.source.source,\n fileName: request.source.fileName,\n storage_key: request.uploadRequest.storage_key,\n response,\n })\n aggregateLoaded[index] = request.source.sizeBytes\n input.onProgress?.(createProgressSnapshot('complete', sources, index, request.source.sizeBytes, sum(aggregateLoaded)))\n }\n\n return {\n files: uploaded,\n count: uploaded.length,\n }\n }\n\n const uploadMultipart: AthenaStorageFileModule['uploadMultipart'] = async (input, options) => {\n if (!multipart) {\n throw new Error('athena.storage.file.uploadMultipart requires the multipart namespace')\n }\n const sources = normalizeUploadSources(input)\n validateUploadConstraints(sources, input)\n const partSize = Math.max(\n input.multipartPartSizeBytes ?? DEFAULT_MULTIPART_PART_SIZE_BYTES,\n MIN_MULTIPART_PART_SIZE_BYTES,\n )\n\n input.onProgress?.(createProgressSnapshot('preparing', sources, 0, 0, 0))\n\n const aggregateLoaded = new Array(sources.length).fill(0) as number[]\n const uploaded: AthenaStorageUploadedFile[] = []\n\n for (let index = 0; index < sources.length; index += 1) {\n const source = sources[index]\n const storageKey = resolveUploadStorageKey(input, source, index, options, config)\n const uploadUrl = await base.createStorageUploadUrl(\n {\n s3_id: input.s3_id,\n bucket: input.bucket,\n storage_key: storageKey,\n name: input.name ?? source.fileName,\n original_name: input.original_name ?? source.fileName,\n resource_id: input.resource_id ?? input.resourceId,\n mime_type: input.mime_type ?? source.contentType,\n content_type: input.content_type ?? source.contentType,\n size_bytes: source.sizeBytes,\n public: input.public,\n metadata: input.metadata,\n server_side_encryption: input.server_side_encryption,\n sse: input.sse,\n ssekms_key_id: input.ssekms_key_id,\n kms_key_id: input.kms_key_id,\n bucket_key_enabled: input.bucket_key_enabled,\n },\n options,\n )\n\n const fileId = uploadUrl.file.id\n let uploadId = ''\n try {\n const created = await multipart.create(\n {\n file_id: fileId,\n content_type: input.content_type ?? source.contentType,\n server_side_encryption: input.server_side_encryption,\n sse: input.sse,\n ssekms_key_id: input.ssekms_key_id,\n kms_key_id: input.kms_key_id,\n bucket_key_enabled: input.bucket_key_enabled,\n },\n options,\n )\n uploadId = readStringField(created, ['upload_id', 'uploadId'])\n if (!uploadId) {\n throw new Error('athena.storage.file.uploadMultipart did not receive an upload_id')\n }\n\n const partCount = Math.max(1, Math.ceil(source.sizeBytes / partSize))\n const completedParts: Array<{ part_number: number; etag: string }> = []\n let fileLoaded = 0\n\n for (let partNumber = 1; partNumber <= partCount; partNumber += 1) {\n const start = (partNumber - 1) * partSize\n const end = Math.min(start + partSize, source.sizeBytes)\n const chunk = sliceUploadSource(source.source, start, end)\n const signed = await multipart.signPart(\n {\n file_id: fileId,\n upload_id: uploadId,\n part_number: partNumber,\n },\n options,\n )\n const partUrl = readStringField(signed, ['url'])\n if (!partUrl) {\n throw new Error(`athena.storage.file.uploadMultipart missing part URL for part ${partNumber}`)\n }\n const partHeaders = readHeadersField(signed)\n const response = await putUploadBody(\n partUrl,\n partHeaders,\n {\n source: chunk,\n fileName: source.fileName,\n sizeBytes: end - start,\n contentType: source.contentType,\n },\n input,\n options,\n (progress) => {\n const loaded = fileLoaded + progress.loaded\n aggregateLoaded[index] = loaded\n input.onProgress?.(\n createProgressSnapshot('uploading', sources, index, loaded, sum(aggregateLoaded), {\n uploadId,\n partNumber,\n partCount,\n }),\n )\n },\n )\n const etag = extractEtag(response)\n if (!etag) {\n throw new Error(`athena.storage.file.uploadMultipart missing ETag for part ${partNumber}`)\n }\n completedParts.push({ part_number: partNumber, etag })\n fileLoaded = end\n aggregateLoaded[index] = fileLoaded\n input.onProgress?.(\n createProgressSnapshot('uploading', sources, index, fileLoaded, sum(aggregateLoaded), {\n uploadId,\n partNumber,\n partCount,\n }),\n )\n }\n\n const completed = await multipart.complete(\n {\n file_id: fileId,\n upload_id: uploadId,\n parts: completedParts,\n },\n options,\n )\n\n uploaded.push({\n file: completed.file ?? uploadUrl.file,\n upload: uploadUrl.upload,\n source: source.source,\n fileName: source.fileName,\n storage_key: storageKey,\n response: new Response(null, { status: 200 }),\n })\n aggregateLoaded[index] = source.sizeBytes\n input.onProgress?.(\n createProgressSnapshot('complete', sources, index, source.sizeBytes, sum(aggregateLoaded), {\n uploadId,\n partNumber: partCount,\n partCount,\n }),\n )\n } catch (error) {\n if (uploadId) {\n try {\n await multipart.abort({ file_id: fileId, upload_id: uploadId }, options)\n } catch {\n // Best-effort abort; surface the original upload error.\n }\n }\n throw error\n }\n }\n\n return {\n files: uploaded,\n count: uploaded.length,\n }\n }\n\n const upload: AthenaStorageFileModule['upload'] = async (input, options) => {\n const sources = normalizeUploadSources(input)\n validateUploadConstraints(sources, input)\n\n const threshold = input.multipartThresholdBytes ?? DEFAULT_MULTIPART_THRESHOLD_BYTES\n const useMultipart =\n Boolean(multipart) &&\n !input.forceSinglePut &&\n !config.directUpload &&\n (input.forceMultipart || sources.some(source => source.sizeBytes >= threshold))\n\n if (useMultipart) {\n const multipartSources = sources.filter(\n source => input.forceMultipart || source.sizeBytes >= threshold,\n )\n const singleSources = sources.filter(\n source => !(input.forceMultipart || source.sizeBytes >= threshold),\n )\n\n if (multipartSources.length === sources.length) {\n return uploadMultipart(input, options)\n }\n\n // Mixed batch: upload large files via multipart, small via single PUT.\n const multipartResult = multipartSources.length > 0\n ? await uploadMultipart({ ...input, files: multipartSources.map(source => source.source), maxFiles: multipartSources.length }, options)\n : { files: [], count: 0 }\n const singleResult = singleSources.length > 0\n ? await uploadSinglePut(\n { ...input, files: singleSources.map(source => source.source), maxFiles: singleSources.length },\n singleSources,\n options,\n )\n : { files: [], count: 0 }\n const files = [...multipartResult.files, ...singleResult.files]\n return { files, count: files.length }\n }\n\n return uploadSinglePut(input, sources, options)\n }\n\n const download = ((\n input: string | readonly string[] | AthenaStorageFileDownloadInput,\n queryOrOptions?: GetStorageFileUrlQuery | AthenaStorageBinaryCallOptions,\n maybeOptions?: AthenaStorageBinaryCallOptions,\n ): Promise<Response | Response[]> => {\n const { fileIds, query, options } = normalizeDownloadArgs(input, queryOrOptions, maybeOptions)\n const downloads = fileIds.map(fileId => base.getStorageFileProxy(fileId, query, options))\n return Array.isArray(input) || (isRecord(input) && Array.isArray(input.fileIds))\n ? Promise.all(downloads)\n : downloads[0]\n }) as AthenaStorageFileModule['download']\n\n const deleteFile = ((\n input: string | readonly string[],\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFileMutationResponse | StorageFileMutationResponse[]> => {\n if (Array.isArray(input)) {\n return Promise.all(input.map(fileId => base.deleteStorageFile(fileId, options)))\n }\n return base.deleteStorageFile(input as string, options)\n }) as AthenaStorageFileModule['delete']\n\n return {\n upload,\n uploadMultipart,\n download,\n\n list(input, options) {\n const prefix = resolveStoragePath(input.prefix ?? '', input, options, config)\n return base.listStorageFiles(\n {\n s3_id: input.s3_id,\n prefix,\n },\n options,\n )\n },\n\n delete: deleteFile,\n }\n}\n\nexport function resolveStoragePath(\n path: string,\n input: {\n prefixPath?: AthenaStoragePrefixPath\n vars?: AthenaStorageTemplateVars\n env?: AthenaStorageEnv\n organization_id?: string\n organizationId?: string\n user_id?: string\n userId?: string\n resource_id?: string\n resourceId?: string\n },\n options: AthenaStorageCallOptions | undefined,\n config: AthenaStorageFileConfig = {},\n): string {\n const context = createPathContext(input, options, config)\n const prefixPath = input.prefixPath ?? config.prefixPath\n const prefix = typeof prefixPath === 'function'\n ? prefixPath(context)\n : prefixPath\n return joinStoragePath(renderStorageTemplate(prefix ?? '', context), renderStorageTemplate(path, context))\n}\n\nfunction resolveUploadStorageKey(\n input: AthenaStorageFileUploadInput,\n source: NormalizedUploadSource,\n index: number,\n options: AthenaStorageCallOptions | undefined,\n config: AthenaStorageFileConfig,\n): string {\n const explicitKey = input.storage_key ?? input.storageKey\n const keyTemplate = input.storageKeyTemplate\n const fallbackName = source.fileName\n const context = createPathContext(input, options, config)\n const key = keyTemplate\n ? renderStorageTemplate(keyTemplate, {\n ...context,\n vars: {\n ...context.vars,\n index,\n fileName: source.fileName,\n name: source.fileName,\n },\n })\n : explicitKey ?? fallbackName\n return resolveStoragePath(key, input, options, config)\n}\n\nfunction normalizeUploadSources(input: AthenaStorageFileUploadInput): NormalizedUploadSource[] {\n const files = toArray(input.files)\n if (files.length === 0) {\n throw new Error('athena.storage.file.upload requires at least one file')\n }\n return files.map((source, index) => {\n const fileName = input.fileName ?? sourceName(source) ?? `file-${index + 1}`\n const sizeBytes = sourceSize(source)\n const contentType = input.content_type ?? input.mime_type ?? sourceContentType(source)\n return {\n source,\n fileName,\n sizeBytes,\n contentType,\n }\n })\n}\n\nfunction validateUploadConstraints(sources: readonly NormalizedUploadSource[], input: AthenaStorageFileUploadInput): void {\n const maxFiles = input.maxFiles ?? 1\n if (sources.length > maxFiles) {\n throw new Error(`athena.storage.file.upload accepts at most ${maxFiles} file${maxFiles === 1 ? '' : 's'} for this call`)\n }\n\n const maxFileSizeBytes = input.maxFileSizeBytes ?? (\n input.maxFileSizeMb === undefined ? undefined : Math.floor(input.maxFileSizeMb * 1024 * 1024)\n )\n if (maxFileSizeBytes !== undefined) {\n const tooLarge = sources.find(source => source.sizeBytes > maxFileSizeBytes)\n if (tooLarge) {\n throw new Error(`athena.storage.file.upload rejected ${tooLarge.fileName}: file exceeds ${maxFileSizeBytes} bytes`)\n }\n }\n\n const allowedExtensions = normalizeExtensions(input.allowedExtensions ?? input.extensions)\n if (allowedExtensions.size > 0) {\n const invalid = sources.find(source => !allowedExtensions.has(fileExtension(source.fileName)))\n if (invalid) {\n throw new Error(`athena.storage.file.upload rejected ${invalid.fileName}: extension is not allowed`)\n }\n }\n}\n\nasync function putUploadBody(\n url: string,\n uploadHeaders: Record<string, string>,\n source: NormalizedUploadSource,\n input: AthenaStorageFileUploadInput,\n options: AthenaStorageCallOptions | undefined,\n onProgress: (progress: { loaded: number }) => void,\n): Promise<Response> {\n const headers = new Headers(uploadHeaders)\n new Headers(input.uploadHeaders).forEach((value, key) => headers.set(key, value))\n if (source.contentType && !headers.has('Content-Type')) {\n headers.set('Content-Type', source.contentType)\n }\n if (typeof XMLHttpRequest !== 'undefined') {\n return putUploadBodyWithXhr(url, source, headers, options, onProgress)\n }\n onProgress({ loaded: 0 })\n const response = await fetch(url, {\n method: 'PUT',\n headers,\n body: source.source as RequestInit['body'],\n signal: options?.signal,\n })\n if (!response.ok) {\n throw new Error(`athena.storage.file.upload failed with status ${response.status}`)\n }\n onProgress({ loaded: source.sizeBytes })\n return response\n}\n\nfunction putUploadBodyWithXhr(\n url: string,\n source: NormalizedUploadSource,\n headers: Headers,\n options: AthenaStorageCallOptions | undefined,\n onProgress: (progress: { loaded: number }) => void,\n): Promise<Response> {\n const Xhr = XMLHttpRequest\n if (Xhr === undefined) {\n return Promise.reject(new Error('athena.storage.file.upload requires XMLHttpRequest in this runtime'))\n }\n return new Promise((resolve, reject) => {\n const xhr = new Xhr()\n const abort = () => xhr.abort()\n xhr.open('PUT', url)\n headers.forEach((value, key) => xhr.setRequestHeader(key, value))\n xhr.upload.onprogress = (event: AthenaStorageXhrProgressEvent) => {\n onProgress({ loaded: event.loaded })\n }\n xhr.onload = () => {\n if (options?.signal) {\n options.signal.removeEventListener('abort', abort)\n }\n if (xhr.status < 200 || xhr.status >= 300) {\n reject(new Error(`athena.storage.file.upload failed with status ${xhr.status}`))\n return\n }\n onProgress({ loaded: source.sizeBytes })\n resolve(new Response(xhr.response as ConstructorParameters<typeof Response>[0], {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseXhrHeaders(xhr.getAllResponseHeaders()),\n }))\n }\n xhr.onerror = () => {\n if (options?.signal) {\n options.signal.removeEventListener('abort', abort)\n }\n reject(new Error('athena.storage.file.upload failed with a network error'))\n }\n xhr.onabort = () => {\n if (options?.signal) {\n options.signal.removeEventListener('abort', abort)\n }\n reject(new DOMException('Upload aborted', 'AbortError'))\n }\n if (options?.signal) {\n if (options.signal.aborted) {\n abort()\n return\n }\n options.signal.addEventListener('abort', abort, { once: true })\n }\n xhr.send(source.source)\n })\n}\n\nfunction normalizeDownloadArgs(\n input: string | readonly string[] | AthenaStorageFileDownloadInput,\n queryOrOptions?: GetStorageFileUrlQuery | AthenaStorageBinaryCallOptions,\n maybeOptions?: AthenaStorageBinaryCallOptions,\n): {\n fileIds: string[]\n query?: GetStorageFileUrlQuery\n options?: AthenaStorageBinaryCallOptions\n} {\n if (typeof input === 'string') {\n return { fileIds: [input], query: queryOrOptions as GetStorageFileUrlQuery | undefined, options: maybeOptions }\n }\n if (Array.isArray(input)) {\n return { fileIds: [...input], query: queryOrOptions as GetStorageFileUrlQuery | undefined, options: maybeOptions }\n }\n const downloadInput = input as AthenaStorageFileDownloadInput\n const { fileId, fileIds, ...query } = downloadInput\n return {\n fileIds: fileIds ? [...fileIds] : fileId ? [fileId] : [],\n query,\n options: queryOrOptions as AthenaStorageBinaryCallOptions | undefined,\n }\n}\n\nfunction createPathContext(\n input: {\n vars?: AthenaStorageTemplateVars\n env?: AthenaStorageEnv\n organization_id?: string\n organizationId?: string\n user_id?: string\n userId?: string\n resource_id?: string\n resourceId?: string\n },\n options: AthenaStorageCallOptions | undefined,\n config: AthenaStorageFileConfig,\n): AthenaStoragePathContext {\n const organizationId = input.organizationId ?? input.organization_id ?? options?.organizationId ?? undefined\n const userId = input.userId ?? input.user_id ?? options?.userId ?? undefined\n const resourceId = input.resourceId ?? input.resource_id ?? undefined\n const vars = {\n ...(config.vars ?? {}),\n ...(input.vars ?? {}),\n }\n if (organizationId !== undefined) {\n vars.organizationId = organizationId\n vars.organization_id = organizationId\n }\n if (userId !== undefined) {\n vars.userId = userId\n vars.user_id = userId\n }\n if (resourceId !== undefined) {\n vars.resourceId = resourceId\n vars.resource_id = resourceId\n }\n return {\n vars,\n env: {\n ...readProcessEnv(),\n ...(config.env ?? {}),\n ...(input.env ?? {}),\n },\n organizationId,\n organization_id: organizationId,\n userId,\n user_id: userId,\n resourceId,\n resource_id: resourceId,\n }\n}\n\nfunction renderStorageTemplate(template: string, context: AthenaStoragePathContext): string {\n return template.replace(/\\$\\{([^}]+)\\}|\\{([^}]+)\\}/g, (_match, shellToken: string | undefined, braceToken: string | undefined) => {\n const token = (shellToken ?? braceToken ?? '').trim()\n if (!token) return ''\n const value = resolveTemplateToken(token, context)\n return value === undefined || value === null ? '' : String(value)\n })\n}\n\nfunction resolveTemplateToken(token: string, context: AthenaStoragePathContext): AthenaStorageTemplateValue {\n if (token.startsWith('env.')) {\n return context.env[token.slice(4)]\n }\n if (token in context.vars) {\n return context.vars[token]\n }\n return context.env[token]\n}\n\nfunction joinStoragePath(...parts: readonly string[]): string {\n return parts\n .map(part => part.trim().replace(/^\\/+|\\/+$/g, ''))\n .filter(Boolean)\n .join('/')\n}\n\nfunction toArray(files: AthenaStorageFileUploadInput['files']): AthenaStorageUploadSource[] {\n if (isUploadSource(files)) return [files]\n return Array.from(files)\n}\n\nfunction isUploadSource(value: unknown): value is AthenaStorageUploadSource {\n return value instanceof Blob || value instanceof ArrayBuffer || value instanceof Uint8Array\n}\n\nfunction sourceName(source: AthenaStorageUploadSource): string | undefined {\n return isRecord(source) && typeof source.name === 'string' && source.name.trim()\n ? source.name.trim()\n : undefined\n}\n\nfunction sourceSize(source: AthenaStorageUploadSource): number {\n if (source instanceof Blob) return source.size\n return source.byteLength\n}\n\nfunction sourceContentType(source: AthenaStorageUploadSource): string | undefined {\n return source instanceof Blob && source.type.trim() ? source.type.trim() : undefined\n}\n\nfunction normalizeExtensions(extensions: readonly string[] | undefined): Set<string> {\n return new Set((extensions ?? []).map(extension => extension.replace(/^\\./, '').toLowerCase()).filter(Boolean))\n}\n\nfunction fileExtension(fileName: string): string {\n const lastDot = fileName.lastIndexOf('.')\n return lastDot === -1 ? '' : fileName.slice(lastDot + 1).toLowerCase()\n}\n\nfunction createProgressSnapshot(\n phase: AthenaStorageUploadProgress['phase'],\n sources: readonly NormalizedUploadSource[],\n fileIndex: number,\n loaded: number,\n aggregateLoaded: number,\n multipartInfo?: AthenaStorageUploadProgress['multipart'],\n): AthenaStorageUploadProgress {\n const total = sources[fileIndex]?.sizeBytes ?? 0\n const aggregateTotal = sources.reduce((totalBytes, source) => totalBytes + source.sizeBytes, 0)\n return {\n phase,\n fileIndex,\n fileCount: sources.length,\n fileName: sources[fileIndex]?.fileName ?? '',\n loaded,\n total,\n percent: total > 0 ? Math.round((loaded / total) * 100) : 100,\n aggregateLoaded,\n aggregateTotal,\n aggregatePercent: aggregateTotal > 0 ? Math.round((aggregateLoaded / aggregateTotal) * 100) : 100,\n ...(multipartInfo ? { multipart: multipartInfo } : {}),\n }\n}\n\nfunction sliceUploadSource(\n source: AthenaStorageUploadSource,\n start: number,\n end: number,\n): AthenaStorageUploadSource {\n if (source instanceof Blob) {\n return source.slice(start, end)\n }\n if (source instanceof ArrayBuffer) {\n return source.slice(start, end)\n }\n return source.slice(start, end)\n}\n\nfunction readStringField(value: unknown, keys: readonly string[]): string {\n if (!isRecord(value)) return ''\n for (const key of keys) {\n const candidate = value[key]\n if (typeof candidate === 'string' && candidate.trim()) {\n return candidate.trim()\n }\n }\n return ''\n}\n\nfunction readHeadersField(value: unknown): Record<string, string> {\n if (!isRecord(value)) return {}\n const headers = value.headers\n if (!isRecord(headers)) return {}\n const result: Record<string, string> = {}\n for (const [key, headerValue] of Object.entries(headers)) {\n if (typeof headerValue === 'string') {\n result[key] = headerValue\n }\n }\n return result\n}\n\nfunction extractEtag(response: Response): string {\n const etag = response.headers.get('etag') ?? response.headers.get('ETag') ?? ''\n return etag.trim()\n}\n\nfunction sum(values: readonly number[]): number {\n return values.reduce((total, value) => total + value, 0)\n}\n\nfunction parseXhrHeaders(raw: string): Headers {\n const headers = new Headers()\n for (const line of raw.trim().split(/[\\r\\n]+/)) {\n const index = line.indexOf(':')\n if (index === -1) continue\n headers.set(line.slice(0, index).trim(), line.slice(index + 1).trim())\n }\n return headers\n}\n\nfunction readProcessEnv(): AthenaStorageEnv {\n const processLike = (globalThis as { process?: { env?: AthenaStorageEnv } }).process\n return processLike?.env ?? {}\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object'\n}\n","/**\n * Admin backup surface exposed under `client.storage.backup.*`.\n *\n * Routes live at `/admin/backups*` (admin / elevated key). Archives land in the\n * server-configured S3 or R2 profile (`ATHENA_BACKUP_S3_*` including provider + account_id).\n */\n\nimport type { AthenaGatewayClient } from '../gateway/client.ts'\nimport type {\n AthenaGatewayEndpointPath,\n AthenaGatewayMethod,\n} from '../gateway/types.ts'\nimport { buildAthenaGatewayUrl, normalizeAthenaGatewayBaseUrl } from '../gateway/url.ts'\nimport type { AthenaStorageCallOptions, AthenaStorageClientConfig } from './module.ts'\n\n/** Avoid circular import with module.ts — shape matches AthenaStorageError enough for callers. */\nfunction backupError(\n message: string,\n status: number,\n endpoint: string,\n method: string,\n cause?: unknown,\n raw?: unknown,\n): never {\n const error = new Error(message) as Error & {\n name: string\n code: string\n status: number\n endpoint: string\n method: string\n cause?: unknown\n raw?: unknown\n }\n error.name = 'AthenaStorageError'\n error.code = status === 0 ? 'NETWORK_ERROR' : 'HTTP_ERROR'\n error.status = status\n error.endpoint = endpoint\n error.method = method\n error.cause = cause\n error.raw = raw\n throw error\n}\n\nexport type BackupRecoveryStrategy = 'none' | 'repair_missing_role_oids'\n\nexport interface StorageBackupRecord {\n job_id: number\n s3_bucket: string\n s3_key: string\n /** Alias of s3_key for convenience */\n key: string\n client_name: string\n label?: string | null\n size_bytes: number\n execution_daemon_id?: string | null\n completed_at: string\n}\n\nexport interface StorageBackupListPage {\n backups: StorageBackupRecord[]\n next_cursor: string | null\n}\n\nexport interface StorageBackupListQuery {\n client_name?: string\n cursor?: string | null\n limit?: number\n}\n\nexport interface StorageBackupCreateRequest {\n client_name: string\n label?: string\n pg_uri?: string\n recovery_strategy?: BackupRecoveryStrategy\n}\n\nexport interface StorageBackupQueuedJob {\n job_id: number\n client_name: string\n status: string\n key?: string\n}\n\nexport interface StorageBackupRestoreRequest {\n client_name: string\n pg_uri?: string\n}\n\nexport interface StorageBackupJob {\n id: number\n job_type: string\n client_name?: string | null\n status: string\n progress_pct?: number | null\n progress_stage?: string | null\n s3_bucket?: string | null\n s3_key?: string | null\n label?: string | null\n error_message?: string | null\n created_at?: string\n updated_at?: string\n completed_at?: string | null\n [key: string]: unknown\n}\n\nexport interface StorageBackupSchedule {\n id: number\n client_name: string\n frequency?: string\n enabled?: boolean\n label?: string | null\n [key: string]: unknown\n}\n\nexport interface StorageBackupScheduleCreateRequest {\n client_name: string\n frequency: string\n time_of_day?: string\n day_of_week?: number\n day_of_month?: number\n label?: string\n execution_daemon_id?: string\n enabled?: boolean\n [key: string]: unknown\n}\n\nexport interface AthenaStorageBackupNamespace {\n /** `GET /admin/backups` */\n list(\n query?: StorageBackupListQuery,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageBackupListPage>\n /** `POST /admin/backups` — queue a backup job */\n create(\n input: StorageBackupCreateRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageBackupQueuedJob>\n /** `POST /admin/backups/{key}/restore` */\n restore(\n key: string,\n input: StorageBackupRestoreRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageBackupQueuedJob>\n /** `DELETE /admin/backups/{key}` */\n delete(key: string, options?: AthenaStorageCallOptions): Promise<void>\n /** Build a browser download URL for `GET /admin/backups/{key}/download` */\n downloadUrl(key: string, options?: { apiKey?: string }): string\n jobs: {\n list(\n query?: { limit?: number; status?: string; client_name?: string },\n options?: AthenaStorageCallOptions,\n ): Promise<StorageBackupJob[]>\n get(jobId: number | string, options?: AthenaStorageCallOptions): Promise<StorageBackupJob>\n cancel(jobId: number | string, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n delete(jobId: number | string, options?: AthenaStorageCallOptions): Promise<void>\n /** Presigned/console open link for the job archive object (S3 or R2) */\n openObjectUrl(jobId: number | string, options?: AthenaStorageCallOptions): Promise<string>\n }\n schedules: {\n list(options?: AthenaStorageCallOptions): Promise<StorageBackupSchedule[]>\n create(\n input: StorageBackupScheduleCreateRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageBackupSchedule>\n update(\n id: number | string,\n input: Partial<StorageBackupScheduleCreateRequest>,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageBackupSchedule>\n delete(id: number | string, options?: AthenaStorageCallOptions): Promise<void>\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction asPath(path: string): AthenaGatewayEndpointPath {\n return path as AthenaGatewayEndpointPath\n}\n\nfunction appendQuery(path: string, query?: object): 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 || value === '') continue\n params.set(key, String(value))\n }\n const text = params.toString()\n return text ? `${path}?${text}` : path\n}\n\nfunction unwrapAthenaData<T>(payload: unknown): T {\n if (isRecord(payload) && 'data' in payload) {\n return payload.data as T\n }\n return payload as T\n}\n\nfunction requireKey(key: string): string {\n const trimmed = key.trim()\n if (!trimmed || trimmed === 'undefined' || trimmed === 'null') {\n backupError('Backup object key is required', 400, '/admin/backups/{key}', 'DELETE')\n }\n return trimmed\n}\n\nfunction resolveMessage(payload: unknown, fallback: string): string {\n if (isRecord(payload)) {\n const message = payload.message ?? payload.error ?? payload.details\n if (typeof message === 'string' && message.trim()) return message.trim()\n }\n if (typeof payload === 'string' && payload.trim()) return payload.trim()\n return fallback\n}\n\nasync function callBackupEndpoint<T>(\n gateway: AthenaGatewayClient,\n path: string,\n method: AthenaGatewayMethod,\n payload: unknown | undefined,\n options: AthenaStorageCallOptions | undefined,\n runtime: AthenaStorageClientConfig | undefined,\n): Promise<T> {\n const resolvedOptions = await gateway.resolveCallOptions(options)\n const endpoint = asPath(path)\n const baseUrl = resolvedOptions?.baseUrl\n ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n : gateway.baseUrl\n const url = buildAthenaGatewayUrl(baseUrl, endpoint)\n void runtime\n const headers = gateway.buildHeaders(resolvedOptions)\n const init: RequestInit = {\n method,\n headers,\n signal: resolvedOptions?.signal,\n }\n if (payload !== undefined && method !== 'GET') {\n init.body = JSON.stringify(payload)\n }\n\n let response: Response\n try {\n response = await fetch(url, init)\n } catch (error) {\n backupError(\n error instanceof Error ? error.message : 'Backup network error',\n 0,\n path,\n method,\n error,\n )\n }\n\n const rawText = await response.text()\n let parsed: unknown = null\n if (rawText) {\n try {\n parsed = JSON.parse(rawText)\n } catch {\n parsed = rawText\n }\n }\n\n if (!response.ok) {\n backupError(\n resolveMessage(parsed, `Backup ${method} ${path} failed (${response.status})`),\n response.status,\n path,\n method,\n undefined,\n parsed,\n )\n }\n\n return unwrapAthenaData<T>(parsed)\n}\n\n/**\n * Create the `storage.backup` namespace bound to an Athena gateway client.\n */\nexport function createStorageBackupModule(\n gateway: AthenaGatewayClient,\n runtimeOptions?: AthenaStorageClientConfig,\n): AthenaStorageBackupNamespace {\n const resolvedBaseUrl = () => String(gateway.baseUrl ?? '').replace(/\\/+$/, '')\n\n return {\n async list(query, options) {\n const path = appendQuery('/admin/backups', {\n limit: query?.limit ?? 10,\n client_name: query?.client_name,\n cursor: query?.cursor ?? undefined,\n })\n const data = await callBackupEndpoint<{\n backups?: Array<Omit<StorageBackupRecord, 'key'> & { key?: string }>\n next_cursor?: string | null\n }>(gateway, path, 'GET', undefined, options, runtimeOptions)\n\n const backups = (data?.backups ?? []).map((row) => ({\n ...row,\n key: row.key ?? row.s3_key,\n }))\n return {\n backups,\n next_cursor: data?.next_cursor ?? null,\n }\n },\n\n async create(input, options) {\n const data = await callBackupEndpoint<{\n job_id?: number\n client_name?: string\n status?: string\n }>(gateway, '/admin/backups', 'POST', input, options, runtimeOptions)\n return {\n job_id: Number(data?.job_id ?? 0),\n client_name: String(data?.client_name ?? input.client_name),\n status: String(data?.status ?? 'pending'),\n }\n },\n\n async restore(key, input, options) {\n const backupKey = requireKey(key)\n const path = `/admin/backups/${encodeURIComponent(backupKey)}/restore`\n const data = await callBackupEndpoint<{\n job_id?: number\n key?: string\n client_name?: string\n status?: string\n }>(gateway, path, 'POST', input, options, runtimeOptions)\n return {\n job_id: Number(data?.job_id ?? 0),\n client_name: String(data?.client_name ?? input.client_name),\n status: String(data?.status ?? 'pending'),\n key: String(data?.key ?? backupKey),\n }\n },\n\n async delete(key, options) {\n const backupKey = requireKey(key)\n await callBackupEndpoint(\n gateway,\n `/admin/backups/${encodeURIComponent(backupKey)}`,\n 'DELETE',\n undefined,\n options,\n runtimeOptions,\n )\n },\n\n downloadUrl(key, options) {\n const backupKey = requireKey(key)\n const base = `${resolvedBaseUrl()}/admin/backups/${encodeURIComponent(backupKey)}/download`\n return options?.apiKey\n ? `${base}?api_key=${encodeURIComponent(options.apiKey)}`\n : base\n },\n\n jobs: {\n async list(query, options) {\n const path = appendQuery('/admin/backups/jobs', query ?? {})\n const data = await callBackupEndpoint<\n StorageBackupJob[] | { jobs?: StorageBackupJob[] }\n >(gateway, path, 'GET', undefined, options, runtimeOptions)\n if (Array.isArray(data)) return data\n if (isRecord(data) && Array.isArray(data.jobs)) return data.jobs\n return []\n },\n async get(jobId, options) {\n return callBackupEndpoint(\n gateway,\n `/admin/backups/jobs/${encodeURIComponent(String(jobId))}`,\n 'GET',\n undefined,\n options,\n runtimeOptions,\n )\n },\n async cancel(jobId, options) {\n return callBackupEndpoint(\n gateway,\n `/admin/backups/jobs/${encodeURIComponent(String(jobId))}/cancel`,\n 'POST',\n {},\n options,\n runtimeOptions,\n )\n },\n async delete(jobId, options) {\n await callBackupEndpoint(\n gateway,\n `/admin/backups/jobs/${encodeURIComponent(String(jobId))}`,\n 'DELETE',\n undefined,\n options,\n runtimeOptions,\n )\n },\n async openObjectUrl(jobId, options) {\n const data = await callBackupEndpoint<{ url?: string }>(\n gateway,\n `/admin/backups/jobs/${encodeURIComponent(String(jobId))}/s3-open`,\n 'GET',\n undefined,\n options,\n runtimeOptions,\n )\n return String(data?.url ?? '')\n },\n },\n\n schedules: {\n async list(options) {\n const data = await callBackupEndpoint<\n StorageBackupSchedule[] | { schedules?: StorageBackupSchedule[] }\n >(gateway, '/admin/backups/schedules', 'GET', undefined, options, runtimeOptions)\n if (Array.isArray(data)) return data\n if (isRecord(data) && Array.isArray(data.schedules)) return data.schedules\n return []\n },\n async create(input, options) {\n return callBackupEndpoint(\n gateway,\n '/admin/backups/schedules',\n 'POST',\n input,\n options,\n runtimeOptions,\n )\n },\n async update(id, input, options) {\n return callBackupEndpoint(\n gateway,\n `/admin/backups/schedules/${encodeURIComponent(String(id))}`,\n 'PATCH',\n input,\n options,\n runtimeOptions,\n )\n },\n async delete(id, options) {\n await callBackupEndpoint(\n gateway,\n `/admin/backups/schedules/${encodeURIComponent(String(id))}`,\n 'DELETE',\n undefined,\n options,\n runtimeOptions,\n )\n },\n },\n }\n}\n","import type { AthenaGatewayClient } from '../gateway/client.ts'\nimport type {\n AthenaGatewayCallOptions,\n AthenaGatewayEndpointPath,\n AthenaGatewayErrorCode,\n AthenaGatewayMethod,\n} from '../gateway/types.ts'\nimport type {\n AthenaErrorCategory,\n AthenaErrorCode,\n AthenaErrorKind,\n NormalizedAthenaError,\n} from '../auxiliaries.ts'\nimport { normalizeAthenaError } from '../auxiliaries.ts'\nimport { isAthenaGatewayError } from '../gateway/errors.ts'\nimport { buildAthenaGatewayUrl, normalizeAthenaGatewayBaseUrl } from '../gateway/url.ts'\nimport { createStorageFileModule } from './file.ts'\nimport type { AthenaStorageFileConfig, AthenaStorageFileModule } from './file.ts'\nimport { createStorageBackupModule } from './backup.ts'\nimport type { AthenaStorageBackupNamespace } from './backup.ts'\n\nexport type {\n AthenaStorageBackupNamespace,\n BackupRecoveryStrategy,\n StorageBackupCreateRequest,\n StorageBackupJob,\n StorageBackupListPage,\n StorageBackupListQuery,\n StorageBackupQueuedJob,\n StorageBackupRecord,\n StorageBackupRestoreRequest,\n StorageBackupSchedule,\n StorageBackupScheduleCreateRequest,\n} from './backup.ts'\n\nexport const storageSdkManifest = {\n namespace: 'storage',\n basePath: '/storage',\n envelopeKinds: {\n raw: 'response body is the payload',\n athena: 'response body is { status, message, data }',\n },\n methods: [\n {\n name: 'listStorageCatalogs',\n method: 'GET',\n path: '/storage/catalogs',\n responseEnvelope: 'raw',\n responseType: '{ data: S3CatalogItem[] }',\n },\n {\n name: 'createStorageCatalog',\n method: 'POST',\n path: '/storage/catalogs',\n requestType: 'CreateStorageCatalogRequest',\n responseEnvelope: 'raw',\n responseType: 'S3CatalogItem',\n },\n {\n name: 'updateStorageCatalog',\n method: 'PATCH',\n path: '/storage/catalogs/{id}',\n pathParams: ['id'],\n requestType: 'UpdateStorageCatalogRequest',\n responseEnvelope: 'raw',\n responseType: 'S3CatalogItem',\n },\n {\n name: 'deleteStorageCatalog',\n method: 'DELETE',\n path: '/storage/catalogs/{id}',\n pathParams: ['id'],\n responseEnvelope: 'raw',\n responseType: '{ id: string; deleted: boolean }',\n },\n {\n name: 'listStorageCredentials',\n method: 'GET',\n path: '/storage/credentials',\n responseEnvelope: 'raw',\n responseType: '{ data: S3CredentialListItem[] }',\n },\n {\n name: 'backup.list',\n method: 'GET',\n path: '/admin/backups',\n responseEnvelope: 'athena',\n responseType: 'StorageBackupListPage',\n note: 'Admin backup archives on server S3/R2 profile',\n },\n {\n name: 'backup.create',\n method: 'POST',\n path: '/admin/backups',\n requestType: 'StorageBackupCreateRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageBackupQueuedJob',\n },\n {\n name: 'backup.restore',\n method: 'POST',\n path: '/admin/backups/{key}/restore',\n pathParams: ['key'],\n requestType: 'StorageBackupRestoreRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageBackupQueuedJob',\n },\n {\n name: 'backup.delete',\n method: 'DELETE',\n path: '/admin/backups/{key}',\n pathParams: ['key'],\n responseEnvelope: 'athena',\n responseType: 'void',\n },\n {\n name: 'backup.jobs.list',\n method: 'GET',\n path: '/admin/backups/jobs',\n responseEnvelope: 'athena',\n responseType: 'StorageBackupJob[]',\n },\n {\n name: 'backup.schedules.list',\n method: 'GET',\n path: '/admin/backups/schedules',\n responseEnvelope: 'athena',\n responseType: 'StorageBackupSchedule[]',\n },\n {\n name: 'createStorageUploadUrl',\n method: 'POST',\n path: '/storage/files/upload-url',\n requestType: 'CreateStorageUploadUrlRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageUploadUrlResponse',\n },\n {\n name: 'createStorageUploadUrls',\n method: 'POST',\n path: '/storage/files/upload-urls',\n requestType: 'CreateStorageUploadUrlsRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageBatchUploadUrlResponse',\n },\n {\n name: 'listStorageFiles',\n method: 'POST',\n path: '/storage/files/list',\n requestType: 'ListStorageFilesRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageListFilesResponse',\n },\n {\n name: 'getStorageFile',\n method: 'GET',\n path: '/storage/files/{file_id}',\n pathParams: ['file_id'],\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'getStorageFileUrl',\n method: 'GET',\n path: '/storage/files/{file_id}/url',\n pathParams: ['file_id'],\n queryParams: ['purpose'],\n responseEnvelope: 'athena',\n responseType: 'PresignedFileUrlResponse',\n },\n {\n name: 'getStorageFileProxy',\n method: 'GET',\n path: '/storage/files/{file_id}/proxy',\n pathParams: ['file_id'],\n queryParams: ['purpose'],\n responseEnvelope: 'raw',\n responseType: 'Response',\n binary: true,\n },\n {\n name: 'updateStorageFile',\n method: 'PATCH',\n path: '/storage/files/{file_id}',\n pathParams: ['file_id'],\n requestType: 'UpdateStorageFileRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'deleteStorageFile',\n method: 'DELETE',\n path: '/storage/files/{file_id}',\n pathParams: ['file_id'],\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'setStorageFileVisibility',\n method: 'PATCH',\n path: '/storage/files/{file_id}/visibility',\n pathParams: ['file_id'],\n requestType: 'SetStorageFileVisibilityRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'postStorageFileVisibility',\n method: 'POST',\n path: '/storage/files/{file_id}/visibility',\n pathParams: ['file_id'],\n requestType: 'SetStorageFileVisibilityRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'setManyStorageFileVisibility',\n method: 'POST',\n path: '/storage/files/visibility-many',\n requestType: 'SetManyStorageFileVisibilityRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationManyResponse',\n },\n {\n name: 'deleteStorageFolder',\n method: 'POST',\n path: '/storage/folders/delete',\n requestType: 'DeleteStorageFolderRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFolderMutationResponse',\n },\n {\n name: 'moveStorageFolder',\n method: 'POST',\n path: '/storage/folders/move',\n requestType: 'MoveStorageFolderRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFolderMutationResponse',\n },\n {\n name: 'searchStorageFiles',\n method: 'POST',\n path: '/storage/files/search',\n requestType: 'SearchStorageFilesRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageListFilesResponse',\n },\n {\n name: 'confirmStorageUpload',\n method: 'POST',\n path: '/storage/files/{file_id}/confirm-upload',\n pathParams: ['file_id'],\n requestType: 'ConfirmStorageUploadRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'uploadStorageFileBinary',\n method: 'PUT',\n path: '/storage/files/{file_id}/upload',\n pathParams: ['file_id'],\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n binary: true,\n },\n {\n name: 'copyStorageFile',\n method: 'POST',\n path: '/storage/files/{file_id}/copy',\n pathParams: ['file_id'],\n requestType: 'CopyStorageFileRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'deleteManyStorageFiles',\n method: 'POST',\n path: '/storage/files/delete-many',\n requestType: 'DeleteManyStorageFilesRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationManyResponse',\n },\n {\n name: 'updateManyStorageFiles',\n method: 'POST',\n path: '/storage/files/update-many',\n requestType: 'UpdateManyStorageFilesRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationManyResponse',\n },\n {\n name: 'restoreStorageFile',\n method: 'POST',\n path: '/storage/files/{file_id}/restore',\n pathParams: ['file_id'],\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'purgeStorageFile',\n method: 'DELETE',\n path: '/storage/files/{file_id}/purge',\n pathParams: ['file_id'],\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'getStorageFilePublicUrl',\n method: 'GET',\n path: '/storage/files/{file_id}/public-url',\n pathParams: ['file_id'],\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageFileProxyUrl',\n method: 'GET',\n path: '/storage/files/{file_id}/proxy-url',\n pathParams: ['file_id'],\n queryParams: ['purpose'],\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStorageFileVersions',\n method: 'GET',\n path: '/storage/files/{file_id}/versions',\n pathParams: ['file_id'],\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'restoreStorageFileVersion',\n method: 'POST',\n path: '/storage/files/{file_id}/versions/{version_id}/restore',\n pathParams: ['file_id', 'version_id'],\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageFileVersion',\n method: 'DELETE',\n path: '/storage/files/{file_id}/versions/{version_id}',\n pathParams: ['file_id', 'version_id'],\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageFileRetention',\n method: 'GET',\n path: '/storage/files/{file_id}/retention',\n pathParams: ['file_id'],\n queryParams: ['version_id'],\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'setStorageFileRetention',\n method: 'POST',\n path: '/storage/files/{file_id}/retention',\n pathParams: ['file_id'],\n requestType: 'StorageFileRetentionRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStorageFolders',\n method: 'POST',\n path: '/storage/folders/list',\n requestType: 'ListStorageFoldersRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'treeStorageFolders',\n method: 'POST',\n path: '/storage/folders/tree',\n requestType: 'TreeStorageFoldersRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStoragePermissions',\n method: 'POST',\n path: '/storage/permissions/list',\n requestType: 'StoragePermissionListRequest',\n responseEnvelope: 'athena',\n responseType: 'StoragePermissionListResponse',\n },\n {\n name: 'grantStoragePermission',\n method: 'POST',\n path: '/storage/permissions/grant',\n requestType: 'StoragePermissionGrantRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'revokeStoragePermission',\n method: 'POST',\n path: '/storage/permissions/revoke',\n requestType: 'StoragePermissionRevokeRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'checkStoragePermission',\n method: 'POST',\n path: '/storage/permissions/check',\n requestType: 'StoragePermissionCheckRequest',\n responseEnvelope: 'athena',\n responseType: 'StoragePermissionCheckResponse',\n },\n {\n name: 'listStorageObjects',\n method: 'POST',\n path: '/storage/objects',\n requestType: 'StorageListObjectsRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'headStorageObject',\n method: 'POST',\n path: '/storage/objects/head',\n requestType: 'StorageObjectRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'existsStorageObject',\n method: 'POST',\n path: '/storage/objects/exists',\n requestType: 'StorageObjectRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'validateStorageObject',\n method: 'POST',\n path: '/storage/objects/validate',\n requestType: 'StorageObjectValidateRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'updateStorageObject',\n method: 'POST',\n path: '/storage/objects/update',\n requestType: 'StorageUpdateObjectRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'copyStorageObject',\n method: 'POST',\n path: '/storage/objects/copy',\n requestType: 'StorageObjectCopyRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageObjectUrl',\n method: 'POST',\n path: '/storage/objects/url',\n requestType: 'StorageObjectRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageObjectPublicUrl',\n method: 'POST',\n path: '/storage/objects/public-url',\n requestType: 'StorageObjectPublicUrlRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageObject',\n method: 'POST',\n path: '/storage/objects/delete',\n requestType: 'StorageObjectRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'createStorageObjectUploadUrl',\n method: 'POST',\n path: '/storage/objects/upload-url',\n requestType: 'StoragePresignUploadRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'createStorageObjectPostPolicy',\n method: 'POST',\n path: '/storage/objects/post-policy',\n requestType: 'StorageSignedPostPolicyRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStorageObjectVersions',\n method: 'POST',\n path: '/storage/objects/versions',\n requestType: 'StorageObjectVersionListRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'restoreStorageObjectVersion',\n method: 'POST',\n path: '/storage/objects/versions/restore',\n requestType: 'StorageObjectVersionMutationRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageObjectVersion',\n method: 'POST',\n path: '/storage/objects/versions/delete',\n requestType: 'StorageObjectVersionMutationRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'createStorageObjectFolder',\n method: 'POST',\n path: '/storage/objects/folder',\n requestType: 'StorageObjectFolderCreateRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageObjectFolder',\n method: 'POST',\n path: '/storage/objects/folder/delete',\n requestType: 'StorageObjectFolderDeleteRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'renameStorageObjectFolder',\n method: 'POST',\n path: '/storage/objects/folder/rename',\n requestType: 'StorageObjectFolderRenameRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStorageBuckets',\n method: 'POST',\n path: '/storage/buckets/list',\n requestType: \"Omit<StorageObjectBaseRequest, 'bucket'>\",\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'createStorageBucket',\n method: 'POST',\n path: '/storage/buckets/create',\n requestType: 'StorageObjectBaseRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageBucket',\n method: 'POST',\n path: '/storage/buckets/delete',\n requestType: 'StorageObjectBaseRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageBucketLifecycle',\n method: 'POST',\n path: '/storage/buckets/lifecycle',\n requestType: 'StorageBucketLifecycleRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'setStorageBucketLifecycle',\n method: 'POST',\n path: '/storage/buckets/lifecycle/set',\n requestType: 'StorageSetBucketLifecycleRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageBucketLifecycle',\n method: 'POST',\n path: '/storage/buckets/lifecycle/delete',\n requestType: 'StorageBucketLifecycleRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageBucketPolicy',\n method: 'POST',\n path: '/storage/buckets/policy',\n requestType: 'StorageBucketPolicyRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'setStorageBucketPolicy',\n method: 'POST',\n path: '/storage/buckets/policy/set',\n requestType: 'StorageSetBucketPolicyRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageBucketPolicy',\n method: 'POST',\n path: '/storage/buckets/policy/delete',\n requestType: 'StorageBucketPolicyRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageBucketPublicAccess',\n method: 'POST',\n path: '/storage/buckets/public-access',\n requestType: 'StoragePublicAccessBlockRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'setStorageBucketPublicAccess',\n method: 'POST',\n path: '/storage/buckets/public-access/set',\n requestType: 'StorageSetPublicAccessBlockRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageBucketPublicAccess',\n method: 'POST',\n path: '/storage/buckets/public-access/delete',\n requestType: 'StoragePublicAccessBlockRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'getStorageBucketCors',\n method: 'POST',\n path: '/storage/buckets/cors',\n requestType: 'StorageBucketCorsRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'setStorageBucketCors',\n method: 'POST',\n path: '/storage/buckets/cors/set',\n requestType: 'StorageSetBucketCorsRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'deleteStorageBucketCors',\n method: 'POST',\n path: '/storage/buckets/cors/delete',\n requestType: 'StorageBucketCorsRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'createStorageMultipartUpload',\n method: 'POST',\n path: '/storage/multipart/create',\n requestType: 'StorageMultipartCreateRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'signStorageMultipartPart',\n method: 'POST',\n path: '/storage/multipart/sign-part',\n requestType: 'StorageMultipartSignPartRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'completeStorageMultipartUpload',\n method: 'POST',\n path: '/storage/multipart/complete',\n requestType: 'StorageMultipartCompleteRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageFileMutationResponse',\n },\n {\n name: 'abortStorageMultipartUpload',\n method: 'POST',\n path: '/storage/multipart/abort',\n requestType: 'StorageMultipartAbortRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStorageMultipartParts',\n method: 'POST',\n path: '/storage/multipart/list-parts',\n requestType: 'StorageMultipartListPartsRequest',\n responseEnvelope: 'athena',\n responseType: 'Record<string, unknown>',\n },\n {\n name: 'listStorageAuditEvents',\n method: 'POST',\n path: '/storage/audit/list',\n requestType: 'StorageAuditQueryRequest',\n responseEnvelope: 'athena',\n responseType: 'StorageAuditListResponse',\n },\n ],\n} as const\n\nexport interface S3CatalogItem {\n id: string\n name: string\n endpoint?: string | null\n region?: string | null\n bucket: string\n provider: string\n force_path_style: boolean\n default_prefix?: string | null\n public_base_url?: string | null\n is_active: boolean\n metadata: Record<string, unknown>\n created_at: string\n updated_at: string\n}\n\nexport interface S3CredentialListItem {\n id: string\n s3_id: string\n name: string\n endpoint?: string | null\n region?: string | null\n bucket: string\n provider: string\n access_key: string\n is_active: boolean\n created_at: string\n rotated_at?: string | null\n}\n\nexport interface ManagedFileRecord {\n id: string\n name: string\n original_name?: string | null\n file_name?: string | null\n url?: string | null\n bucket: string\n s3_id?: string | null\n prefix_path?: string | null\n size_bytes?: number | null\n mime_type?: string | null\n content_type?: string | null\n resource_id?: string | null\n organization_id?: string | null\n created_by_user_id?: string | null\n uploaded_by_user_id?: string | null\n checksum_sha256?: string | null\n metadata: Record<string, unknown>\n created_at: string\n updated_at: string\n storage_key: string\n extension?: string | null\n visibility?: 'private' | 'organization' | 'public'\n is_public: boolean\n status: string\n deleted_at?: string | null\n}\n\nexport interface PresignedFileUrlResponse {\n file_id: string\n bucket: string\n storage_key: string\n purpose: string\n url: string\n headers?: Record<string, string>\n expires_at: string\n expires_at_epoch_seconds: number\n expires_in: number\n cache_hit: boolean\n cache_layer: string\n}\n\nexport interface StorageServerSideEncryptionOptions {\n server_side_encryption?: 'AES256' | 'aws:kms' | 'aws:kms:dsse' | (string & {})\n sse?: 'AES256' | 'aws:kms' | 'aws:kms:dsse' | (string & {})\n ssekms_key_id?: string\n kms_key_id?: string\n bucket_key_enabled?: boolean\n}\n\nexport interface CreateStorageCatalogRequest {\n name: string\n /**\n * S3-compatible API endpoint.\n * Optional when `provider` is R2 and `account_id` (or `metadata.account_id`) is set;\n * the Athena server derives `https://{account_id}.r2.cloudflarestorage.com`.\n */\n endpoint?: string\n /**\n * Region. Optional for R2 (server defaults to `auto` after normalize).\n */\n region?: string\n bucket: string\n /** Storage provider: `s3` or `r2`; aliases include `aws`, `aws_s3`, `cloudflare_r2`, and `cloudflare-r2`. */\n provider?: string\n /**\n * Cloudflare account ID for R2 catalogs when endpoint is omitted.\n * Also accepted under `metadata.account_id`.\n */\n account_id?: string\n force_path_style?: boolean\n default_prefix?: string\n public_base_url?: string\n access_key_id: string\n secret_key: string\n session_token?: string\n metadata?: Record<string, unknown>\n}\n\nexport interface UpdateStorageCatalogRequest {\n name?: string\n endpoint?: string\n region?: string\n bucket?: string\n provider?: string\n /** Cloudflare account ID for R2 (merged into metadata / endpoint derivation). */\n account_id?: string\n force_path_style?: boolean\n default_prefix?: string | null\n public_base_url?: string | null\n access_key_id?: string\n secret_key?: string\n session_token?: string\n is_active?: boolean\n metadata?: Record<string, unknown>\n}\n\nexport interface CreateStorageUploadUrlRequest extends StorageServerSideEncryptionOptions {\n s3_id: string\n bucket?: string\n storage_key: string\n name?: string\n original_name?: string\n resource_id?: string\n mime_type?: string\n content_type?: string\n size_bytes?: number\n file_id?: string\n public?: boolean\n visibility?: 'private' | 'organization' | 'public'\n metadata?: Record<string, unknown>\n}\n\nexport interface CreateStorageUploadUrlsRequest {\n files: CreateStorageUploadUrlRequest[]\n}\n\nexport interface StorageUploadUrlResponse {\n file: ManagedFileRecord\n upload: PresignedFileUrlResponse\n}\n\nexport interface StorageBatchUploadUrlResponse {\n files: StorageUploadUrlResponse[]\n}\n\nexport interface ListStorageFilesRequest {\n s3_id: string\n prefix?: string\n limit?: number\n offset?: number\n metadata?: Record<string, unknown>\n name?: string\n resource_id?: string\n mime_type?: string\n content_type?: string\n status?: string\n visibility?: 'private' | 'organization' | 'public' | (string & {})\n bucket?: string\n key_prefix?: string\n}\n\nexport interface StorageListFilesResponse {\n files: ManagedFileRecord[]\n count: number\n total?: number\n limit?: number\n offset?: number\n next_offset?: number | null\n has_more?: boolean\n}\n\nexport interface UpdateStorageFileRequest {\n storage_key?: string\n bucket?: string\n name?: string\n file_name?: string\n original_name?: string\n resource_id?: string\n mime_type?: string\n content_type?: string\n size_bytes?: number\n checksum_sha256?: string\n visibility?: 'private' | 'organization' | 'public' | (string & {})\n status?: string\n metadata?: Record<string, unknown>\n}\n\nexport interface SetStorageFileVisibilityRequest {\n public?: boolean\n visibility?: 'private' | 'organization' | 'public'\n}\n\nexport interface DeleteStorageFolderRequest {\n s3_id: string\n prefix: string\n}\n\nexport interface MoveStorageFolderRequest {\n s3_id: string\n from_prefix: string\n to_prefix: string\n}\n\nexport interface StorageFileMutationResponse {\n file: ManagedFileRecord\n}\n\nexport interface StorageFolderMutationResponse {\n s3_id: string\n prefix: string\n processed_files: number\n}\n\nexport interface StorageFileMutationManyResponse {\n files: ManagedFileRecord[]\n count: number\n}\n\nexport interface StorageFilePermissionRecord {\n id: string\n file_id: string\n principal_type: 'user' | 'organization' | 'team' | 'role'\n principal_id: string\n permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\n granted_by_user_id?: string | null\n created_at: string\n expires_at?: string | null\n revoked_at?: string | null\n metadata: Record<string, unknown>\n}\n\nexport interface StoragePermissionListResponse {\n permissions: StorageFilePermissionRecord[]\n count: number\n}\n\nexport interface StoragePermissionCheckResponse {\n allowed: boolean\n permission: string\n}\n\nexport interface StorageAuditEventRecord {\n id: string\n operation: string\n file_id?: string | null\n s3_id?: string | null\n bucket?: string | null\n storage_key?: string | null\n actor_user_id?: string | null\n organization_id?: string | null\n status: 'success' | 'error'\n error?: string | null\n metadata: Record<string, unknown>\n created_at: string\n}\n\nexport interface StorageAuditListResponse {\n events: StorageAuditEventRecord[]\n count: number\n}\n\nexport interface ConfirmStorageUploadRequest {\n size_bytes?: number\n content_type?: string\n checksum_sha256?: string\n metadata?: Record<string, unknown>\n}\n\nexport interface SearchStorageFilesRequest {\n query?: string\n limit?: number\n offset?: number\n s3_id?: string\n prefix?: string\n metadata?: Record<string, unknown>\n name?: string\n resource_id?: string\n mime_type?: string\n content_type?: string\n status?: string\n visibility?: 'private' | 'organization' | 'public' | (string & {})\n bucket?: string\n key_prefix?: string\n}\n\nexport interface DeleteManyStorageFilesRequest {\n file_ids: string[]\n}\n\nexport interface UpdateManyStorageFilesRequest {\n file_ids: string[]\n storage_key?: string\n bucket?: string\n name?: string\n file_name?: string\n original_name?: string\n resource_id?: string\n mime_type?: string\n content_type?: string\n size_bytes?: number\n checksum_sha256?: string\n visibility?: 'private' | 'organization' | 'public' | (string & {})\n status?: string\n metadata?: Record<string, unknown>\n}\n\nexport interface SetManyStorageFileVisibilityRequest {\n file_ids: string[]\n public?: boolean\n visibility?: 'private' | 'organization' | 'public'\n}\n\nexport interface CopyStorageFileRequest extends StorageServerSideEncryptionOptions {\n storage_key: string\n bucket?: string\n file_name?: string\n visibility?: 'private' | 'organization' | 'public'\n metadata?: Record<string, unknown>\n}\n\nexport interface ListStorageFoldersRequest {\n s3_id: string\n prefix: string\n}\n\nexport interface TreeStorageFoldersRequest {\n s3_id: string\n prefix: string\n}\n\nexport interface StoragePermissionListRequest {\n file_id: string\n}\n\nexport interface StoragePermissionGrantRequest {\n file_id: string\n principal_type: 'user' | 'organization' | 'team' | 'role'\n principal_id: string\n permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\n expires_at?: string\n metadata?: Record<string, unknown>\n}\n\nexport interface StoragePermissionRevokeRequest {\n file_id: string\n principal_type: 'user' | 'organization' | 'team' | 'role'\n principal_id: string\n permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\n}\n\nexport interface StoragePermissionCheckRequest {\n file_id: string\n permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\n}\n\nexport interface StorageMultipartCreateRequest extends StorageServerSideEncryptionOptions {\n file_id: string\n content_type?: string\n}\n\nexport interface StorageMultipartSignPartRequest {\n file_id: string\n upload_id: string\n part_number: number\n}\n\nexport interface StorageMultipartCompletePartInput {\n part_number: number\n etag: string\n}\n\nexport interface StorageMultipartCompleteRequest {\n file_id: string\n upload_id: string\n parts: StorageMultipartCompletePartInput[]\n}\n\nexport interface StorageMultipartAbortRequest {\n file_id: string\n upload_id: string\n}\n\nexport interface StorageMultipartListPartsRequest {\n file_id: string\n upload_id: string\n}\n\nexport interface DeprecatedInlineStorageConnectionFields {\n provider?: string\n /**\n * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n */\n endpoint?: string\n /**\n * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n */\n region?: string\n /**\n * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n */\n access_key_id?: string\n /**\n * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n */\n secret_key?: string\n /**\n * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n */\n session_token?: string\n}\n\nexport type StorageConnectionSelector =\n | ({\n s3_id: string\n s3Id?: string\n } & DeprecatedInlineStorageConnectionFields)\n | ({\n s3_id?: string\n s3Id: string\n } & DeprecatedInlineStorageConnectionFields)\n | ({\n s3_id?: string\n s3Id?: string\n endpoint: string\n region: string\n access_key_id: string\n secret_key: string\n } & DeprecatedInlineStorageConnectionFields)\n\nexport type StorageObjectFolderCreateRequest = StorageConnectionSelector & {\n bucket: string\n prefix: string\n}\n\nexport type StorageObjectFolderDeleteRequest = StorageObjectFolderCreateRequest\n\nexport interface StorageObjectFolderRenameRequest extends Omit<StorageObjectFolderCreateRequest, 'prefix'> {\n from_prefix: string\n to_prefix: string\n}\n\nexport type StorageObjectBaseRequest = StorageConnectionSelector & {\n bucket: string\n}\n\nexport type StorageObjectRequest = StorageObjectBaseRequest & {\n key: string\n}\n\nexport type StorageObjectValidateRequest = StorageObjectRequest & {\n checksum_sha256?: string\n etag?: string\n}\n\nexport type StorageObjectCopyRequest = StorageObjectBaseRequest &\n StorageServerSideEncryptionOptions & {\n source_key: string\n destination_key: string\n destination_bucket?: string\n}\n\nexport type StorageObjectPublicUrlRequest = StorageObjectRequest & {\n public_base_url?: string\n force_path_style?: boolean\n}\n\nexport type StorageListObjectsRequest = StorageObjectBaseRequest & {\n prefix?: string\n delimiter?: string\n continuation_token?: string\n max_keys?: number\n}\n\nexport type StorageUpdateObjectRequest = StorageObjectRequest & {\n acl?: string\n content_type?: string\n cache_control?: string\n content_disposition?: string\n content_encoding?: string\n content_language?: string\n metadata?: Record<string, string>\n}\n\nexport type StorageObjectVersionListRequest = StorageObjectBaseRequest & {\n key?: string\n max_keys?: number\n key_marker?: string\n version_id_marker?: string\n delimiter?: string\n}\n\nexport type StorageObjectVersionMutationRequest = StorageObjectRequest & {\n version_id: string\n}\n\nexport type StorageSignedPostPolicyRequest = StorageObjectRequest &\n StorageServerSideEncryptionOptions & {\n content_type?: string\n min_size?: number\n max_size?: number\n expires_in?: number\n public_base_url?: string\n force_path_style?: boolean\n success_action_status?: string\n}\n\nexport type StoragePresignUploadRequest = StorageObjectRequest &\n StorageServerSideEncryptionOptions & {\n content_type?: string\n}\n\nexport type StorageBucketCorsRequest = StorageObjectBaseRequest\n\nexport interface StorageBucketCorsRuleInput {\n allowed_origins: string[]\n allowed_methods: string[]\n allowed_headers?: string[]\n expose_headers?: string[]\n max_age_seconds?: number\n}\n\nexport type StorageSetBucketCorsRequest = StorageBucketCorsRequest & {\n rules: StorageBucketCorsRuleInput[]\n}\n\nexport type StorageBucketLifecycleRequest = StorageObjectBaseRequest\n\nexport interface StorageBucketLifecycleRuleInput {\n id?: string\n prefix?: string\n status?: 'Enabled' | 'Disabled' | 'enabled' | 'disabled' | (string & {})\n expiration_days?: number\n expired_object_delete_marker?: boolean\n noncurrent_version_expiration_days?: number\n abort_incomplete_multipart_upload_days?: number\n}\n\nexport type StorageSetBucketLifecycleRequest = StorageBucketLifecycleRequest & {\n rules: StorageBucketLifecycleRuleInput[]\n}\n\nexport type StorageBucketPolicyRequest = StorageObjectBaseRequest\n\nexport type StorageSetBucketPolicyRequest = StorageBucketPolicyRequest & {\n policy: Record<string, unknown> | string\n}\n\nexport type StoragePublicAccessBlockRequest = StorageObjectBaseRequest\n\nexport type StorageSetPublicAccessBlockRequest = StoragePublicAccessBlockRequest & {\n block_public_acls?: boolean\n ignore_public_acls?: boolean\n block_public_policy?: boolean\n restrict_public_buckets?: boolean\n}\n\nexport interface StorageFileVersionPathRequest {\n file_id: string\n version_id: string\n}\n\nexport interface StorageFileRetentionRequest {\n mode?: 'GOVERNANCE' | 'COMPLIANCE' | (string & {})\n retain_until?: string\n retain_until_date?: string\n version_id?: string\n bypass_governance?: boolean\n}\n\nexport interface StorageAuditQueryRequest {\n file_id?: string\n limit?: number\n offset?: number\n}\n\nexport interface AthenaEnvelope<T> {\n status: string\n message: string\n data: T\n}\n\nexport type StorageFileAccessPurpose = 'read' | 'download' | 'stream'\n\nexport interface GetStorageFileUrlQuery {\n purpose?: StorageFileAccessPurpose | (string & {})\n}\n\nexport type AthenaStorageErrorHandler = (error: AthenaStorageError) => void | Promise<void>\n\nexport interface AthenaStorageClientConfig extends AthenaStorageFileConfig {\n onError?: AthenaStorageErrorHandler\n}\n\n/**\n * Credentials for signing the direct upload PUT in the client.\n * The Athena API still creates managed-file metadata so the public upload\n * result remains unchanged; file bytes go directly to this S3-compatible endpoint.\n */\nexport interface AthenaStorageDirectUploadConfig {\n endpoint: string\n bucket?: string\n region?: string\n accessKeyId: string\n secretAccessKey: string\n sessionToken?: string\n /** R2 uses path-style addressing by default. */\n forcePathStyle?: boolean\n}\n\nexport interface AthenaStorageCallOptions extends AthenaGatewayCallOptions {\n signal?: AbortSignal\n onError?: AthenaStorageErrorHandler\n}\n\nexport type AthenaStorageBinaryCallOptions = AthenaStorageCallOptions\n\nexport type AthenaStorageErrorCode =\n | 'INVALID_URL'\n | 'NETWORK_ERROR'\n | 'HTTP_ERROR'\n | 'INVALID_JSON'\n | 'INVALID_ATHENA_ENVELOPE'\n | 'UNKNOWN_ERROR'\n\nexport const AthenaStorageErrorCode = {\n InvalidUrl: 'INVALID_URL',\n NetworkError: 'NETWORK_ERROR',\n HttpError: 'HTTP_ERROR',\n InvalidJson: 'INVALID_JSON',\n InvalidAthenaEnvelope: 'INVALID_ATHENA_ENVELOPE',\n UnknownError: 'UNKNOWN_ERROR',\n} as const satisfies Record<string, AthenaStorageErrorCode>\n\nexport interface AthenaStorageErrorDetails {\n code: AthenaStorageErrorCode\n athenaCode: AthenaErrorCode\n kind: AthenaErrorKind\n category: AthenaErrorCategory\n retryable: boolean\n message: string\n status: number\n endpoint: AthenaGatewayEndpointPath\n method: AthenaGatewayMethod\n requestId?: string\n hint?: string\n cause?: string\n raw: unknown\n}\n\nexport interface AthenaStorageErrorInput {\n code: AthenaStorageErrorCode\n message: string\n status: number\n endpoint: AthenaGatewayEndpointPath\n method: AthenaGatewayMethod\n raw?: unknown\n requestId?: string\n hint?: string\n cause?: unknown\n}\n\nexport class AthenaStorageError extends Error {\n readonly code: AthenaStorageErrorCode\n readonly athenaCode: AthenaErrorCode\n readonly kind: AthenaErrorKind\n readonly category: AthenaErrorCategory\n readonly retryable: boolean\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 readonly raw: unknown\n readonly normalized: NormalizedAthenaError\n readonly __athenaNormalizedError: NormalizedAthenaError\n\n constructor(input: AthenaStorageErrorInput) {\n super(input.message, { cause: input.cause })\n this.name = 'AthenaStorageError'\n this.code = input.code\n this.status = input.status\n this.endpoint = input.endpoint\n this.method = input.method\n this.requestId = input.requestId\n this.hint = input.hint\n this.causeDetail = causeToString(input.cause)\n this.raw = input.raw ?? null\n this.normalized = normalizeStorageErrorInput(input)\n this.__athenaNormalizedError = this.normalized\n this.athenaCode = this.normalized.code\n this.kind = this.normalized.kind\n this.category = this.normalized.category\n this.retryable = this.normalized.retryable\n Object.defineProperty(this, '__athenaNormalizedError', {\n value: this.normalized,\n enumerable: false,\n configurable: false,\n writable: false,\n })\n }\n\n toDetails(): AthenaStorageErrorDetails {\n return {\n code: this.code,\n athenaCode: this.athenaCode,\n kind: this.kind,\n category: this.category,\n retryable: this.retryable,\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 raw: this.raw,\n }\n }\n}\n\nexport interface AthenaStorageBaseModule {\n listStorageCatalogs(options?: AthenaStorageCallOptions): Promise<{ data: S3CatalogItem[] }>\n createStorageCatalog(\n input: CreateStorageCatalogRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<S3CatalogItem>\n updateStorageCatalog(\n id: string,\n input: UpdateStorageCatalogRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<S3CatalogItem>\n deleteStorageCatalog(\n id: string,\n options?: AthenaStorageCallOptions,\n ): Promise<{ id: string; deleted: boolean }>\n listStorageCredentials(options?: AthenaStorageCallOptions): Promise<{ data: S3CredentialListItem[] }>\n createStorageUploadUrl(\n input: CreateStorageUploadUrlRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageUploadUrlResponse>\n createStorageUploadUrls(\n input: CreateStorageUploadUrlsRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageBatchUploadUrlResponse>\n listStorageFiles(\n input: ListStorageFilesRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageListFilesResponse>\n getStorageFile(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n getStorageFileUrl(\n fileId: string,\n query?: GetStorageFileUrlQuery,\n options?: AthenaStorageCallOptions,\n ): Promise<PresignedFileUrlResponse>\n getStorageFileProxy(\n fileId: string,\n query?: GetStorageFileUrlQuery,\n options?: AthenaStorageBinaryCallOptions,\n ): Promise<Response>\n updateStorageFile(\n fileId: string,\n input: UpdateStorageFileRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFileMutationResponse>\n deleteStorageFile(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n setStorageFileVisibility(\n fileId: string,\n input: SetStorageFileVisibilityRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFileMutationResponse>\n deleteStorageFolder(\n input: DeleteStorageFolderRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFolderMutationResponse>\n moveStorageFolder(\n input: MoveStorageFolderRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFolderMutationResponse>\n}\n\nexport type AthenaStoragePutBody =\n | Blob\n | ArrayBuffer\n | Uint8Array\n | ReadableStream<Uint8Array>\n\nexport interface AthenaStoragePutOptions {\n headers?: Record<string, string>\n signal?: AbortSignal\n}\n\nexport interface AthenaStorageManagedUpload extends PresignedFileUrlResponse {\n method: 'PUT'\n headers: Record<string, string>\n expiresAt: string\n put(body: AthenaStoragePutBody, options?: AthenaStoragePutOptions): Promise<Response>\n}\n\nexport interface StorageUploadUrlResponseWithPut extends Omit<StorageUploadUrlResponse, 'upload'> {\n upload: AthenaStorageManagedUpload\n}\n\nexport interface StorageBatchUploadUrlResponseWithPut {\n files: StorageUploadUrlResponseWithPut[]\n}\n\nexport interface AthenaStorageFileUploadRequest extends StorageServerSideEncryptionOptions {\n s3_id?: string\n s3Id?: string\n bucket?: string\n storage_key?: string\n storageKey?: string\n name?: string\n fileName?: string\n original_name?: string\n originalName?: string\n resource_id?: string\n resourceId?: string\n mime_type?: string\n mimeType?: string\n content_type?: string\n contentType?: string\n size_bytes?: number\n sizeBytes?: number\n file_id?: string\n fileId?: string\n public?: boolean\n visibility?: 'private' | 'organization' | 'public'\n metadata?: Record<string, unknown>\n}\n\nexport interface AthenaStorageFileUploadManyRequest {\n files: AthenaStorageFileUploadRequest[]\n}\n\nexport interface AthenaStorageFileNamespace extends AthenaStorageFileModule {\n upload(\n input: AthenaStorageFileUploadRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageUploadUrlResponseWithPut>\n upload(\n input: Parameters<AthenaStorageFileModule['upload']>[0],\n options?: AthenaStorageCallOptions,\n ): ReturnType<AthenaStorageFileModule['upload']>\n uploadMany(\n input: AthenaStorageFileUploadManyRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageBatchUploadUrlResponseWithPut>\n confirmUpload(\n fileId: string,\n input?: ConfirmStorageUploadRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFileMutationResponse>\n uploadBinary(\n fileId: string,\n body: AthenaStoragePutBody,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFileMutationResponse>\n search(\n input: SearchStorageFilesRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageListFilesResponse>\n get(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n update(\n fileId: string,\n input: UpdateStorageFileRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFileMutationResponse>\n deleteMany(\n input: DeleteManyStorageFilesRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFileMutationManyResponse>\n updateMany(\n input: UpdateManyStorageFilesRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFileMutationManyResponse>\n restore(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n purge(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n copy(\n fileId: string,\n input: CopyStorageFileRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFileMutationResponse>\n url(\n fileId: string,\n query?: GetStorageFileUrlQuery,\n options?: AthenaStorageCallOptions,\n ): Promise<PresignedFileUrlResponse>\n publicUrl(fileId: string, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n proxyUrl(\n fileId: string,\n query?: GetStorageFileUrlQuery,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n proxy(\n fileId: string,\n query?: GetStorageFileUrlQuery,\n options?: AthenaStorageBinaryCallOptions,\n ): Promise<Response>\n versions(fileId: string, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n restoreVersion(\n fileId: string,\n versionId: string,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n deleteVersion(\n fileId: string,\n versionId: string,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n retention: {\n get(\n fileId: string,\n query?: Pick<StorageFileRetentionRequest, 'version_id'>,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n set(\n fileId: string,\n input: StorageFileRetentionRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n }\n visibility: {\n update(\n fileId: string,\n input: SetStorageFileVisibilityRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFileMutationResponse>\n set(\n fileId: string,\n input: SetStorageFileVisibilityRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFileMutationResponse>\n setMany(\n input: SetManyStorageFileVisibilityRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<StorageFileMutationManyResponse>\n }\n}\n\nexport interface AthenaStorageCredentialsNamespace {\n list(options?: AthenaStorageCallOptions): Promise<{ data: S3CredentialListItem[] }>\n}\n\nexport interface AthenaStorageCatalogNamespace {\n list(options?: AthenaStorageCallOptions): Promise<{ data: S3CatalogItem[] }>\n create(input: CreateStorageCatalogRequest, options?: AthenaStorageCallOptions): Promise<S3CatalogItem>\n update(id: string, input: UpdateStorageCatalogRequest, options?: AthenaStorageCallOptions): Promise<S3CatalogItem>\n delete(id: string, options?: AthenaStorageCallOptions): Promise<{ id: string; deleted: boolean }>\n}\n\nexport interface AthenaStorageFolderNamespace {\n list(input: ListStorageFoldersRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n tree(input: TreeStorageFoldersRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n delete(input: DeleteStorageFolderRequest, options?: AthenaStorageCallOptions): Promise<StorageFolderMutationResponse>\n move(input: MoveStorageFolderRequest, options?: AthenaStorageCallOptions): Promise<StorageFolderMutationResponse>\n}\n\nexport interface AthenaStoragePermissionNamespace {\n list(input: StoragePermissionListRequest, options?: AthenaStorageCallOptions): Promise<StoragePermissionListResponse>\n grant(input: StoragePermissionGrantRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n revoke(input: StoragePermissionRevokeRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n check(input: StoragePermissionCheckRequest, options?: AthenaStorageCallOptions): Promise<StoragePermissionCheckResponse>\n}\n\nexport interface AthenaStorageObjectFolderNamespace {\n create(input: StorageObjectFolderCreateRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n delete(input: StorageObjectFolderDeleteRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n rename(input: StorageObjectFolderRenameRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n}\n\nexport interface AthenaStorageObjectNamespace {\n list(input: StorageListObjectsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n head(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n exists(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n validate(input: StorageObjectValidateRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n update(input: StorageUpdateObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n copy(input: StorageObjectCopyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n url(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n publicUrl(input: StorageObjectPublicUrlRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n delete(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n uploadUrl(input: StoragePresignUploadRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n versions(input: StorageObjectVersionListRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n restoreVersion(\n input: StorageObjectVersionMutationRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n deleteVersion(\n input: StorageObjectVersionMutationRequest,\n options?: AthenaStorageCallOptions,\n ): Promise<Record<string, unknown>>\n postPolicy(input: StorageSignedPostPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n folder: AthenaStorageObjectFolderNamespace\n}\n\nexport interface AthenaStorageBucketCorsNamespace {\n get(input: StorageBucketCorsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n set(input: StorageSetBucketCorsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n delete(input: StorageBucketCorsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n}\n\nexport interface AthenaStorageBucketNamespace {\n list(input: Omit<StorageObjectBaseRequest, 'bucket'>, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n create(input: StorageObjectBaseRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n delete(input: StorageObjectBaseRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n lifecycle: {\n get(input: StorageBucketLifecycleRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n set(input: StorageSetBucketLifecycleRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n delete(input: StorageBucketLifecycleRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n }\n policy: {\n get(input: StorageBucketPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n set(input: StorageSetBucketPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n delete(input: StorageBucketPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n }\n publicAccess: {\n get(input: StoragePublicAccessBlockRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n set(input: StorageSetPublicAccessBlockRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n delete(input: StoragePublicAccessBlockRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n }\n cors: AthenaStorageBucketCorsNamespace\n}\n\nexport interface AthenaStorageMultipartNamespace {\n create(input: StorageMultipartCreateRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n signPart(input: StorageMultipartSignPartRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n complete(input: StorageMultipartCompleteRequest, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n abort(input: StorageMultipartAbortRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n listParts(input: StorageMultipartListPartsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n}\n\nexport interface AthenaStorageAuditNamespace {\n list(input: StorageAuditQueryRequest, options?: AthenaStorageCallOptions): Promise<StorageAuditListResponse>\n}\n\nexport interface AthenaStorageModule extends AthenaStorageBaseModule {\n credentials: AthenaStorageCredentialsNamespace\n catalog: AthenaStorageCatalogNamespace\n file: AthenaStorageFileNamespace\n folder: AthenaStorageFolderNamespace\n permission: AthenaStoragePermissionNamespace\n object: AthenaStorageObjectNamespace\n bucket: AthenaStorageBucketNamespace\n multipart: AthenaStorageMultipartNamespace\n audit: AthenaStorageAuditNamespace\n /**\n * Database backup / restore admin API (`/admin/backups*`).\n * Archives are stored in the server S3 or R2 profile (`ATHENA_BACKUP_S3_*`).\n */\n backup: AthenaStorageBackupNamespace\n delete: AthenaStorageFileModule['delete']\n}\n\ntype StorageEnvelopeKind = 'raw' | 'athena'\n\ninterface StorageModuleRuntimeOptions {\n baseUrl?: string\n onError?: AthenaStorageErrorHandler\n stripBasePath?: boolean\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction causeToString(cause: unknown): string | undefined {\n if (cause === undefined || cause === null) return undefined\n if (typeof cause === 'string') return cause\n if (cause instanceof Error && cause.message.trim()) return cause.message.trim()\n try {\n return JSON.stringify(cause)\n } catch {\n return String(cause)\n }\n}\n\nfunction storageGatewayCode(code: AthenaStorageErrorCode): AthenaGatewayErrorCode {\n if (code === 'INVALID_URL') return 'INVALID_URL'\n if (code === 'NETWORK_ERROR') return 'NETWORK_ERROR'\n if (code === 'INVALID_JSON' || code === 'INVALID_ATHENA_ENVELOPE') return 'INVALID_JSON'\n if (code === 'HTTP_ERROR') return 'HTTP_ERROR'\n return 'UNKNOWN_ERROR'\n}\n\nfunction headerValue(headers: Headers, names: readonly string[]): string | undefined {\n for (const name of names) {\n const value = headers.get(name)\n if (value?.trim()) return value.trim()\n }\n return undefined\n}\n\nfunction storageOperationFromEndpoint(\n endpoint: AthenaGatewayEndpointPath,\n method: AthenaGatewayMethod,\n): string {\n const endpointPath = String(endpoint).split('?')[0]\n for (const candidate of storageSdkManifest.methods) {\n if (candidate.method !== method) continue\n const pattern = `^${candidate.path.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\\\\\{[^/]+\\\\\\}/g, '[^/]+')}$`\n if (new RegExp(pattern).test(endpointPath)) {\n return candidate.name\n }\n }\n return `storage:${method.toLowerCase()}`\n}\n\nfunction normalizeStorageErrorInput(input: AthenaStorageErrorInput): NormalizedAthenaError {\n return normalizeAthenaError(\n {\n data: null,\n error: {\n message: input.message,\n gatewayCode: storageGatewayCode(input.code),\n status: input.status,\n raw: input.raw ?? input.cause ?? null,\n },\n errorDetails: {\n code: storageGatewayCode(input.code),\n message: input.message,\n status: input.status,\n endpoint: input.endpoint,\n method: input.method,\n requestId: input.requestId,\n hint: input.hint,\n cause: causeToString(input.cause),\n },\n raw: input.raw ?? input.cause ?? null,\n status: input.status,\n },\n { operation: storageOperationFromEndpoint(input.endpoint, input.method) },\n )\n}\n\nexport function createAthenaStorageError(input: AthenaStorageErrorInput): AthenaStorageError {\n return new AthenaStorageError(input)\n}\n\nasync function notifyStorageError(\n error: AthenaStorageError,\n options: AthenaStorageCallOptions | undefined,\n runtimeOptions: StorageModuleRuntimeOptions | undefined,\n): Promise<void> {\n const handlers = [runtimeOptions?.onError, options?.onError].filter(\n (handler): handler is AthenaStorageErrorHandler => typeof handler === 'function',\n )\n for (const handler of handlers) {\n try {\n await handler(error)\n } catch {\n // Error observers must not mask the original storage failure.\n }\n }\n}\n\nasync function rejectStorageError(\n input: AthenaStorageErrorInput,\n options: AthenaStorageCallOptions | undefined,\n runtimeOptions: StorageModuleRuntimeOptions | undefined,\n): Promise<never> {\n const error = createAthenaStorageError(input)\n await notifyStorageError(error, options, runtimeOptions)\n throw error\n}\n\nfunction parseResponseBody(rawText: string, contentType: string | null) {\n if (!rawText) {\n return { parsed: null as unknown, parseFailed: false }\n }\n\n const contentTypeSuggestsJson =\n contentType?.toLowerCase().includes('application/json') ?? false\n const looksJson =\n contentTypeSuggestsJson || rawText.startsWith('{') || rawText.startsWith('[')\n\n if (!looksJson) {\n return { parsed: rawText as unknown, parseFailed: false }\n }\n\n try {\n return { parsed: JSON.parse(rawText) as unknown, parseFailed: false }\n } catch {\n return { parsed: rawText as unknown, parseFailed: true }\n }\n}\n\nfunction appendQuery(path: string, query?: object): 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 queryText = params.toString()\n return queryText ? `${path}?${queryText}` : path\n}\n\nfunction storagePath(path: string): AthenaGatewayEndpointPath {\n return path as AthenaGatewayEndpointPath\n}\n\nfunction resolveStorageEndpointPath(\n endpoint: AthenaGatewayEndpointPath,\n runtimeOptions?: StorageModuleRuntimeOptions,\n): AthenaGatewayEndpointPath {\n if (!runtimeOptions?.stripBasePath) {\n return endpoint\n }\n\n const [pathname, queryText] = String(endpoint).split('?', 2)\n const trimmedPathname = pathname.startsWith('/storage/')\n ? pathname.slice('/storage'.length)\n : pathname === '/storage'\n ? '/'\n : pathname\n const resolvedPath = trimmedPathname.startsWith('/') ? trimmedPathname : `/${trimmedPathname}`\n return storagePath(queryText ? `${resolvedPath}?${queryText}` : resolvedPath)\n}\n\nfunction withPathParam(path: string, name: string, value: string): string {\n return path.replace(`{${name}}`, encodeURIComponent(value))\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string): string {\n if (isRecord(payload)) {\n const message = payload.message ?? payload.error ?? payload.details\n if (typeof message === 'string' && message.trim()) {\n return message.trim()\n }\n }\n if (typeof payload === 'string' && payload.trim()) {\n return payload.trim()\n }\n return fallback\n}\n\nfunction resolveErrorHint(payload: unknown): string | undefined {\n if (!isRecord(payload)) return undefined\n const hint = payload.hint ?? payload.suggestion\n return typeof hint === 'string' && hint.trim() ? hint.trim() : undefined\n}\n\nfunction resolveErrorCause(payload: unknown): string | undefined {\n if (!isRecord(payload)) return undefined\n const cause = payload.cause ?? payload.reason\n return typeof cause === 'string' && cause.trim() ? cause.trim() : undefined\n}\n\nfunction storageCodeFromUnknown(error: unknown): AthenaStorageErrorCode {\n if (isAthenaGatewayError(error)) {\n if (error.code === 'INVALID_URL') return 'INVALID_URL'\n if (error.code === 'NETWORK_ERROR') return 'NETWORK_ERROR'\n if (error.code === 'INVALID_JSON') return 'INVALID_JSON'\n if (error.code === 'HTTP_ERROR') return 'HTTP_ERROR'\n }\n return 'UNKNOWN_ERROR'\n}\n\nasync function callStorageEndpoint<T>(\n gateway: AthenaGatewayClient,\n endpoint: AthenaGatewayEndpointPath,\n method: AthenaGatewayMethod,\n envelope: StorageEnvelopeKind,\n payload?: unknown,\n options?: AthenaStorageCallOptions,\n runtimeOptions?: StorageModuleRuntimeOptions,\n): Promise<T> {\n const resolvedOptions = await gateway.resolveCallOptions(options)\n let url: string\n let headers: Record<string, string>\n try {\n const baseUrl = resolvedOptions?.baseUrl\n ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n : runtimeOptions?.baseUrl\n ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\n : gateway.baseUrl\n url = buildAthenaGatewayUrl(baseUrl, resolveStorageEndpointPath(endpoint, runtimeOptions))\n headers = gateway.buildHeaders(resolvedOptions)\n } catch (error) {\n return rejectStorageError(\n {\n code: storageCodeFromUnknown(error),\n message: error instanceof Error\n ? error.message\n : `Athena storage ${method} ${endpoint} failed before sending the request`,\n status: isAthenaGatewayError(error) ? error.status : 0,\n endpoint,\n method,\n raw: error,\n requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\n hint: isAthenaGatewayError(error) ? error.hint : undefined,\n cause: error,\n },\n resolvedOptions,\n runtimeOptions,\n )\n }\n const requestInit: RequestInit = {\n method,\n headers,\n signal: resolvedOptions?.signal,\n }\n if (payload !== undefined && method !== 'GET') {\n requestInit.body = JSON.stringify(payload)\n }\n\n let response: Response\n try {\n response = await fetch(url, requestInit)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return rejectStorageError(\n {\n code: 'NETWORK_ERROR',\n message: `Network error while calling Athena storage ${method} ${endpoint}: ${message}`,\n status: 0,\n endpoint,\n method,\n cause: error,\n },\n resolvedOptions,\n runtimeOptions,\n )\n }\n\n let rawText: string\n try {\n rawText = await response.text()\n } catch (error) {\n return rejectStorageError(\n {\n code: 'NETWORK_ERROR',\n message: `Athena storage ${method} ${endpoint} response body could not be read`,\n status: response.status,\n endpoint,\n method,\n requestId: headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id']),\n cause: error,\n },\n resolvedOptions,\n runtimeOptions,\n )\n }\n const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\n const requestId = headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id'])\n if (parsedBody.parseFailed) {\n return rejectStorageError(\n {\n code: 'INVALID_JSON',\n message: `Athena storage ${method} ${endpoint} returned malformed JSON`,\n status: response.status,\n endpoint,\n method,\n requestId,\n raw: parsedBody.parsed,\n },\n resolvedOptions,\n runtimeOptions,\n )\n }\n\n if (!response.ok) {\n return rejectStorageError(\n {\n code: 'HTTP_ERROR',\n message: resolveErrorMessage(\n parsedBody.parsed,\n `Athena storage ${method} ${endpoint} failed with status ${response.status}`,\n ),\n status: response.status,\n endpoint,\n method,\n requestId,\n hint: resolveErrorHint(parsedBody.parsed),\n cause: resolveErrorCause(parsedBody.parsed),\n raw: parsedBody.parsed,\n },\n resolvedOptions,\n runtimeOptions,\n )\n }\n\n if (envelope === 'athena') {\n if (!isRecord(parsedBody.parsed) || !('data' in parsedBody.parsed)) {\n return rejectStorageError(\n {\n code: 'INVALID_ATHENA_ENVELOPE',\n message: `Athena storage ${method} ${endpoint} returned an invalid Athena envelope`,\n status: response.status,\n endpoint,\n method,\n requestId,\n raw: parsedBody.parsed,\n },\n resolvedOptions,\n runtimeOptions,\n )\n }\n return parsedBody.parsed.data as T\n }\n\n return parsedBody.parsed as T\n}\n\nasync function callStorageBinaryEndpoint(\n gateway: AthenaGatewayClient,\n endpoint: AthenaGatewayEndpointPath,\n method: AthenaGatewayMethod,\n options?: AthenaStorageBinaryCallOptions,\n runtimeOptions?: StorageModuleRuntimeOptions,\n): Promise<Response> {\n const resolvedOptions = await gateway.resolveCallOptions(options)\n let url: string\n let headers: Record<string, string>\n try {\n const baseUrl = resolvedOptions?.baseUrl\n ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n : runtimeOptions?.baseUrl\n ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\n : gateway.baseUrl\n url = buildAthenaGatewayUrl(baseUrl, resolveStorageEndpointPath(endpoint, runtimeOptions))\n headers = gateway.buildHeaders(resolvedOptions)\n } catch (error) {\n return rejectStorageError(\n {\n code: storageCodeFromUnknown(error),\n message: error instanceof Error\n ? error.message\n : `Athena storage ${method} ${endpoint} failed before sending the request`,\n status: isAthenaGatewayError(error) ? error.status : 0,\n endpoint,\n method,\n raw: error,\n requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\n hint: isAthenaGatewayError(error) ? error.hint : undefined,\n cause: error,\n },\n resolvedOptions,\n runtimeOptions,\n )\n }\n\n let response: Response\n try {\n response = await fetch(url, {\n method,\n headers,\n signal: resolvedOptions?.signal,\n })\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return rejectStorageError(\n {\n code: 'NETWORK_ERROR',\n message: `Network error while calling Athena storage ${method} ${endpoint}: ${message}`,\n status: 0,\n endpoint,\n method,\n cause: error,\n },\n resolvedOptions,\n runtimeOptions,\n )\n }\n\n if (response.ok) {\n return response\n }\n\n const requestId = headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id'])\n let rawErrorBody: unknown = null\n try {\n const rawText = await response.text()\n const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\n rawErrorBody = parsedBody.parsed\n } catch (error) {\n return rejectStorageError(\n {\n code: 'NETWORK_ERROR',\n message: `Athena storage ${method} ${endpoint} error response body could not be read`,\n status: response.status,\n endpoint,\n method,\n requestId,\n cause: error,\n },\n resolvedOptions,\n runtimeOptions,\n )\n }\n\n return rejectStorageError(\n {\n code: 'HTTP_ERROR',\n message: resolveErrorMessage(\n rawErrorBody,\n `Athena storage ${method} ${endpoint} failed with status ${response.status}`,\n ),\n status: response.status,\n endpoint,\n method,\n requestId,\n hint: resolveErrorHint(rawErrorBody),\n cause: resolveErrorCause(rawErrorBody),\n raw: rawErrorBody,\n },\n resolvedOptions,\n runtimeOptions,\n )\n}\n\nfunction isBlobBody(body: AthenaStoragePutBody): body is Blob {\n return typeof Blob !== 'undefined' && body instanceof Blob\n}\n\nfunction isReadableStreamBody(body: AthenaStoragePutBody): body is ReadableStream<Uint8Array> {\n return typeof ReadableStream !== 'undefined' && body instanceof ReadableStream\n}\n\nasync function putPresignedUploadBody(\n uploadUrl: string,\n uploadHeaders: Record<string, string>,\n body: AthenaStoragePutBody,\n options?: AthenaStoragePutOptions,\n): Promise<Response> {\n const headers = new Headers(uploadHeaders)\n Object.entries(options?.headers ?? {}).forEach(([key, value]) => headers.set(key, value))\n if (!headers.has('Content-Type') && isBlobBody(body) && body.type) {\n headers.set('Content-Type', body.type)\n }\n\n const init: RequestInit & { duplex?: 'half' } = {\n method: 'PUT',\n headers,\n body: body as RequestInit['body'],\n signal: options?.signal,\n }\n if (isReadableStreamBody(body)) {\n init.duplex = 'half'\n }\n return fetch(uploadUrl, init)\n}\n\nfunction attachManagedUpload(upload: PresignedFileUrlResponse): AthenaStorageManagedUpload {\n const headers: Record<string, string> = { ...(upload.headers ?? {}) }\n return {\n ...upload,\n method: 'PUT',\n headers,\n expiresAt: upload.expires_at,\n put(body, options) {\n return putPresignedUploadBody(upload.url, headers, body, options)\n },\n }\n}\n\nfunction attachUploadHelper(response: StorageUploadUrlResponse): StorageUploadUrlResponseWithPut {\n return {\n ...response,\n upload: attachManagedUpload(response.upload),\n }\n}\n\nfunction attachUploadHelpers(\n response: StorageBatchUploadUrlResponse,\n): StorageBatchUploadUrlResponseWithPut {\n return {\n files: response.files.map(attachUploadHelper),\n }\n}\n\nfunction normalizeUploadUrlRequest(input: AthenaStorageFileUploadRequest): CreateStorageUploadUrlRequest {\n const s3_id = input.s3_id ?? input.s3Id\n const storage_key = input.storage_key ?? input.storageKey\n if (!s3_id?.trim()) {\n throw new Error('athena.storage.file.upload requires s3_id or s3Id')\n }\n if (!storage_key?.trim()) {\n throw new Error('athena.storage.file.upload requires storage_key or storageKey')\n }\n const fileName = input.fileName?.trim()\n const originalName = input.originalName?.trim()\n return {\n s3_id,\n bucket: input.bucket,\n storage_key,\n name: input.name ?? fileName,\n original_name: input.original_name ?? originalName ?? fileName,\n resource_id: input.resource_id ?? input.resourceId,\n mime_type: input.mime_type ?? input.mimeType,\n content_type: input.content_type ?? input.contentType,\n size_bytes: input.size_bytes ?? input.sizeBytes,\n file_id: input.file_id ?? input.fileId,\n public: input.public,\n visibility: input.visibility,\n metadata: input.metadata,\n server_side_encryption: input.server_side_encryption,\n sse: input.sse,\n ssekms_key_id: input.ssekms_key_id,\n kms_key_id: input.kms_key_id,\n bucket_key_enabled: input.bucket_key_enabled,\n }\n}\n\nasync function callStorageUploadBinaryEndpoint<T>(\n gateway: AthenaGatewayClient,\n endpoint: AthenaGatewayEndpointPath,\n body: AthenaStoragePutBody,\n options?: AthenaStorageCallOptions,\n runtimeOptions?: StorageModuleRuntimeOptions,\n): Promise<T> {\n const resolvedOptions = await gateway.resolveCallOptions(options)\n let url: string\n let headers: Record<string, string>\n try {\n const baseUrl = resolvedOptions?.baseUrl\n ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n : runtimeOptions?.baseUrl\n ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\n : gateway.baseUrl\n url = buildAthenaGatewayUrl(baseUrl, resolveStorageEndpointPath(endpoint, runtimeOptions))\n headers = gateway.buildHeaders(resolvedOptions)\n } catch (error) {\n return rejectStorageError(\n {\n code: storageCodeFromUnknown(error),\n message: error instanceof Error\n ? error.message\n : `Athena storage PUT ${endpoint} failed before sending the request`,\n status: isAthenaGatewayError(error) ? error.status : 0,\n endpoint,\n method: 'PUT',\n raw: error,\n requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\n hint: isAthenaGatewayError(error) ? error.hint : undefined,\n cause: error,\n },\n resolvedOptions,\n runtimeOptions,\n )\n }\n\n delete headers['Content-Type']\n delete headers['content-type']\n if (isBlobBody(body) && body.type) {\n headers['Content-Type'] = body.type\n }\n\n const requestInit: RequestInit & { duplex?: 'half' } = {\n method: 'PUT',\n headers,\n body: body as RequestInit['body'],\n signal: resolvedOptions?.signal,\n }\n if (isReadableStreamBody(body)) {\n requestInit.duplex = 'half'\n }\n\n let response: Response\n try {\n response = await fetch(url, requestInit)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return rejectStorageError(\n {\n code: 'NETWORK_ERROR',\n message: `Network error while calling Athena storage PUT ${endpoint}: ${message}`,\n status: 0,\n endpoint,\n method: 'PUT',\n cause: error,\n },\n resolvedOptions,\n runtimeOptions,\n )\n }\n\n let rawText: string\n try {\n rawText = await response.text()\n } catch (error) {\n return rejectStorageError(\n {\n code: 'NETWORK_ERROR',\n message: `Athena storage PUT ${endpoint} response body could not be read`,\n status: response.status,\n endpoint,\n method: 'PUT',\n requestId: headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id']),\n cause: error,\n },\n resolvedOptions,\n runtimeOptions,\n )\n }\n\n const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\n const requestId = headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id'])\n if (parsedBody.parseFailed) {\n return rejectStorageError(\n {\n code: 'INVALID_JSON',\n message: `Athena storage PUT ${endpoint} returned malformed JSON`,\n status: response.status,\n endpoint,\n method: 'PUT',\n requestId,\n raw: parsedBody.parsed,\n },\n resolvedOptions,\n runtimeOptions,\n )\n }\n if (!response.ok) {\n return rejectStorageError(\n {\n code: 'HTTP_ERROR',\n message: resolveErrorMessage(\n parsedBody.parsed,\n `Athena storage PUT ${endpoint} failed with status ${response.status}`,\n ),\n status: response.status,\n endpoint,\n method: 'PUT',\n requestId,\n hint: resolveErrorHint(parsedBody.parsed),\n cause: resolveErrorCause(parsedBody.parsed),\n raw: parsedBody.parsed,\n },\n resolvedOptions,\n runtimeOptions,\n )\n }\n if (!isRecord(parsedBody.parsed) || !('data' in parsedBody.parsed)) {\n return rejectStorageError(\n {\n code: 'INVALID_ATHENA_ENVELOPE',\n message: `Athena storage PUT ${endpoint} returned an invalid Athena envelope`,\n status: response.status,\n endpoint,\n method: 'PUT',\n requestId,\n raw: parsedBody.parsed,\n },\n resolvedOptions,\n runtimeOptions,\n )\n }\n return parsedBody.parsed.data as T\n}\n\nexport function createStorageModule(\n gateway: AthenaGatewayClient,\n runtimeOptions?: AthenaStorageClientConfig,\n): AthenaStorageModule {\n const resolvedRuntimeOptions = runtimeOptions as StorageModuleRuntimeOptions | undefined\n const callRaw = <T>(\n path: string,\n method: AthenaGatewayMethod,\n payload?: unknown,\n options?: AthenaStorageCallOptions,\n ) => callStorageEndpoint<T>(\n gateway,\n storagePath(path),\n method,\n 'raw',\n payload,\n options,\n resolvedRuntimeOptions,\n )\n const callAthena = <T>(\n path: string,\n method: AthenaGatewayMethod,\n payload?: unknown,\n options?: AthenaStorageCallOptions,\n ) => callStorageEndpoint<T>(\n gateway,\n storagePath(path),\n method,\n 'athena',\n payload,\n options,\n resolvedRuntimeOptions,\n )\n const callStorageFileVisibility = (\n fileId: string,\n method: Extract<AthenaGatewayMethod, 'PATCH' | 'POST'>,\n input: SetStorageFileVisibilityRequest,\n options?: AthenaStorageCallOptions,\n ) => callAthena<StorageFileMutationResponse>(\n withPathParam('/storage/files/{file_id}/visibility', 'file_id', fileId),\n method,\n input,\n options,\n )\n const base: AthenaStorageBaseModule = {\n listStorageCatalogs(options) {\n return callRaw('/storage/catalogs', 'GET', undefined, options)\n },\n createStorageCatalog(input, options) {\n return callRaw('/storage/catalogs', 'POST', input, options)\n },\n updateStorageCatalog(id, input, options) {\n return callRaw(withPathParam('/storage/catalogs/{id}', 'id', id), 'PATCH', input, options)\n },\n deleteStorageCatalog(id, options) {\n return callRaw(withPathParam('/storage/catalogs/{id}', 'id', id), 'DELETE', undefined, options)\n },\n listStorageCredentials(options) {\n return callRaw('/storage/credentials', 'GET', undefined, options)\n },\n createStorageUploadUrl(input, options) {\n return callAthena('/storage/files/upload-url', 'POST', input, options)\n },\n createStorageUploadUrls(input, options) {\n return callAthena('/storage/files/upload-urls', 'POST', input, options)\n },\n listStorageFiles(input, options) {\n return callAthena('/storage/files/list', 'POST', input, options)\n },\n getStorageFile(fileId, options) {\n return callAthena(withPathParam('/storage/files/{file_id}', 'file_id', fileId), 'GET', undefined, options)\n },\n getStorageFileUrl(fileId, query, options) {\n const path = appendQuery(\n withPathParam('/storage/files/{file_id}/url', 'file_id', fileId),\n query,\n )\n return callAthena(path, 'GET', undefined, options)\n },\n getStorageFileProxy(fileId, query, options) {\n const path = appendQuery(\n withPathParam('/storage/files/{file_id}/proxy', 'file_id', fileId),\n query,\n )\n return callStorageBinaryEndpoint(gateway, storagePath(path), 'GET', options, resolvedRuntimeOptions)\n },\n updateStorageFile(fileId, input, options) {\n return callAthena(withPathParam('/storage/files/{file_id}', 'file_id', fileId), 'PATCH', input, options)\n },\n deleteStorageFile(fileId, options) {\n return callAthena(withPathParam('/storage/files/{file_id}', 'file_id', fileId), 'DELETE', undefined, options)\n },\n setStorageFileVisibility(fileId, input, options) {\n return callStorageFileVisibility(fileId, 'PATCH', input, options)\n },\n deleteStorageFolder(input, options) {\n return callAthena('/storage/folders/delete', 'POST', input, options)\n },\n moveStorageFolder(input, options) {\n return callAthena('/storage/folders/move', 'POST', input, options)\n },\n }\n const multipart: AthenaStorageMultipartNamespace = {\n create(input, options) {\n return callAthena('/storage/multipart/create', 'POST', input, options)\n },\n signPart(input, options) {\n return callAthena('/storage/multipart/sign-part', 'POST', input, options)\n },\n complete(input, options) {\n return callAthena('/storage/multipart/complete', 'POST', input, options)\n },\n abort(input, options) {\n return callAthena('/storage/multipart/abort', 'POST', input, options)\n },\n listParts(input, options) {\n return callAthena('/storage/multipart/list-parts', 'POST', input, options)\n },\n }\n const fileFacade = createStorageFileModule(base, runtimeOptions, multipart)\n const fileUpload = ((\n input: AthenaStorageFileUploadRequest | Parameters<AthenaStorageFileModule['upload']>[0],\n options?: AthenaStorageCallOptions,\n ) => {\n if (isRecord(input) && 'files' in input) {\n return fileFacade.upload(input as unknown as Parameters<AthenaStorageFileModule['upload']>[0], options)\n }\n return base.createStorageUploadUrl(\n normalizeUploadUrlRequest(input as AthenaStorageFileUploadRequest),\n options,\n ).then(attachUploadHelper)\n }) as AthenaStorageFileNamespace['upload']\n const fileDelete = ((input: string | readonly string[], options?: AthenaStorageCallOptions) =>\n fileFacade.delete(input as unknown as Parameters<AthenaStorageFileModule['delete']>[0], options)\n ) as AthenaStorageFileNamespace['delete']\n\n const file: AthenaStorageFileNamespace = {\n ...fileFacade,\n upload: fileUpload,\n uploadMany(input, options) {\n return base.createStorageUploadUrls(\n { files: input.files.map(normalizeUploadUrlRequest) },\n options,\n ).then(attachUploadHelpers)\n },\n confirmUpload(fileId, input, options) {\n return callAthena(withPathParam('/storage/files/{file_id}/confirm-upload', 'file_id', fileId), 'POST', input ?? {}, options)\n },\n uploadBinary(fileId, body, options) {\n return callStorageUploadBinaryEndpoint(\n gateway,\n storagePath(withPathParam('/storage/files/{file_id}/upload', 'file_id', fileId)),\n body,\n options,\n resolvedRuntimeOptions,\n )\n },\n search(input, options) {\n return callAthena('/storage/files/search', 'POST', input, options)\n },\n get(fileId, options) {\n return base.getStorageFile(fileId, options)\n },\n update(fileId, input, options) {\n return base.updateStorageFile(fileId, input, options)\n },\n delete: fileDelete,\n deleteMany(input, options) {\n return callAthena('/storage/files/delete-many', 'POST', input, options)\n },\n updateMany(input, options) {\n return callAthena('/storage/files/update-many', 'POST', input, options)\n },\n restore(fileId, options) {\n return callAthena(withPathParam('/storage/files/{file_id}/restore', 'file_id', fileId), 'POST', {}, options)\n },\n purge(fileId, options) {\n return callAthena(withPathParam('/storage/files/{file_id}/purge', 'file_id', fileId), 'DELETE', undefined, options)\n },\n copy(fileId, input, options) {\n return callAthena(withPathParam('/storage/files/{file_id}/copy', 'file_id', fileId), 'POST', input, options)\n },\n url(fileId, query, options) {\n return base.getStorageFileUrl(fileId, query, options)\n },\n publicUrl(fileId, options) {\n return callAthena(withPathParam('/storage/files/{file_id}/public-url', 'file_id', fileId), 'GET', undefined, options)\n },\n proxyUrl(fileId, query, options) {\n const path = appendQuery(\n withPathParam('/storage/files/{file_id}/proxy-url', 'file_id', fileId),\n query,\n )\n return callAthena(path, 'GET', undefined, options)\n },\n proxy(fileId, query, options) {\n return base.getStorageFileProxy(fileId, query, options)\n },\n versions(fileId, options) {\n return callAthena(withPathParam('/storage/files/{file_id}/versions', 'file_id', fileId), 'GET', undefined, options)\n },\n restoreVersion(fileId, versionId, options) {\n return callAthena(\n withPathParam(\n withPathParam('/storage/files/{file_id}/versions/{version_id}/restore', 'file_id', fileId),\n 'version_id',\n versionId,\n ),\n 'POST',\n {},\n options,\n )\n },\n deleteVersion(fileId, versionId, options) {\n return callAthena(\n withPathParam(\n withPathParam('/storage/files/{file_id}/versions/{version_id}', 'file_id', fileId),\n 'version_id',\n versionId,\n ),\n 'DELETE',\n undefined,\n options,\n )\n },\n retention: {\n get(fileId, query, options) {\n const path = appendQuery(\n withPathParam('/storage/files/{file_id}/retention', 'file_id', fileId),\n query,\n )\n return callAthena(path, 'GET', undefined, options)\n },\n set(fileId, input, options) {\n return callAthena(withPathParam('/storage/files/{file_id}/retention', 'file_id', fileId), 'POST', input, options)\n },\n },\n visibility: {\n update(fileId, input, options) {\n return base.setStorageFileVisibility(fileId, input, options)\n },\n set(fileId, input, options) {\n return callStorageFileVisibility(fileId, 'POST', input, options)\n },\n setMany(input, options) {\n return callAthena('/storage/files/visibility-many', 'POST', input, options)\n },\n },\n }\n const credentials: AthenaStorageCredentialsNamespace = {\n list(options) {\n return base.listStorageCredentials(options)\n },\n }\n const catalog: AthenaStorageCatalogNamespace = {\n list(options) {\n return base.listStorageCatalogs(options)\n },\n create(input, options) {\n return base.createStorageCatalog(input, options)\n },\n update(id, input, options) {\n return base.updateStorageCatalog(id, input, options)\n },\n delete(id, options) {\n return base.deleteStorageCatalog(id, options)\n },\n }\n const folder: AthenaStorageFolderNamespace = {\n list(input, options) {\n return callAthena('/storage/folders/list', 'POST', input, options)\n },\n tree(input, options) {\n return callAthena('/storage/folders/tree', 'POST', input, options)\n },\n delete(input, options) {\n return base.deleteStorageFolder(input, options)\n },\n move(input, options) {\n return base.moveStorageFolder(input, options)\n },\n }\n const permission: AthenaStoragePermissionNamespace = {\n list(input, options) {\n return callAthena('/storage/permissions/list', 'POST', input, options)\n },\n grant(input, options) {\n return callAthena('/storage/permissions/grant', 'POST', input, options)\n },\n revoke(input, options) {\n return callAthena('/storage/permissions/revoke', 'POST', input, options)\n },\n check(input, options) {\n return callAthena('/storage/permissions/check', 'POST', input, options)\n },\n }\n const objectFolder: AthenaStorageObjectFolderNamespace = {\n create(input, options) {\n return callAthena('/storage/objects/folder', 'POST', input, options)\n },\n delete(input, options) {\n return callAthena('/storage/objects/folder/delete', 'POST', input, options)\n },\n rename(input, options) {\n return callAthena('/storage/objects/folder/rename', 'POST', input, options)\n },\n }\n const object: AthenaStorageObjectNamespace = {\n list(input, options) {\n return callAthena('/storage/objects', 'POST', input, options)\n },\n head(input, options) {\n return callAthena('/storage/objects/head', 'POST', input, options)\n },\n exists(input, options) {\n return callAthena('/storage/objects/exists', 'POST', input, options)\n },\n validate(input, options) {\n return callAthena('/storage/objects/validate', 'POST', input, options)\n },\n update(input, options) {\n return callAthena('/storage/objects/update', 'POST', input, options)\n },\n copy(input, options) {\n return callAthena('/storage/objects/copy', 'POST', input, options)\n },\n url(input, options) {\n return callAthena('/storage/objects/url', 'POST', input, options)\n },\n publicUrl(input, options) {\n return callAthena('/storage/objects/public-url', 'POST', input, options)\n },\n delete(input, options) {\n return callAthena('/storage/objects/delete', 'POST', input, options)\n },\n uploadUrl(input, options) {\n return callAthena('/storage/objects/upload-url', 'POST', input, options)\n },\n versions(input, options) {\n return callAthena('/storage/objects/versions', 'POST', input, options)\n },\n restoreVersion(input, options) {\n return callAthena('/storage/objects/versions/restore', 'POST', input, options)\n },\n deleteVersion(input, options) {\n return callAthena('/storage/objects/versions/delete', 'POST', input, options)\n },\n postPolicy(input, options) {\n return callAthena('/storage/objects/post-policy', 'POST', input, options)\n },\n folder: objectFolder,\n }\n const bucket: AthenaStorageBucketNamespace = {\n list(input, options) {\n return callAthena('/storage/buckets/list', 'POST', input, options)\n },\n create(input, options) {\n return callAthena('/storage/buckets/create', 'POST', input, options)\n },\n delete(input, options) {\n return callAthena('/storage/buckets/delete', 'POST', input, options)\n },\n lifecycle: {\n get(input, options) {\n return callAthena('/storage/buckets/lifecycle', 'POST', input, options)\n },\n set(input, options) {\n return callAthena('/storage/buckets/lifecycle/set', 'POST', input, options)\n },\n delete(input, options) {\n return callAthena('/storage/buckets/lifecycle/delete', 'POST', input, options)\n },\n },\n policy: {\n get(input, options) {\n return callAthena('/storage/buckets/policy', 'POST', input, options)\n },\n set(input, options) {\n return callAthena('/storage/buckets/policy/set', 'POST', input, options)\n },\n delete(input, options) {\n return callAthena('/storage/buckets/policy/delete', 'POST', input, options)\n },\n },\n publicAccess: {\n get(input, options) {\n return callAthena('/storage/buckets/public-access', 'POST', input, options)\n },\n set(input, options) {\n return callAthena('/storage/buckets/public-access/set', 'POST', input, options)\n },\n delete(input, options) {\n return callAthena('/storage/buckets/public-access/delete', 'POST', input, options)\n },\n },\n cors: {\n get(input, options) {\n return callAthena('/storage/buckets/cors', 'POST', input, options)\n },\n set(input, options) {\n return callAthena('/storage/buckets/cors/set', 'POST', input, options)\n },\n delete(input, options) {\n return callAthena('/storage/buckets/cors/delete', 'POST', input, options)\n },\n },\n }\n const audit: AthenaStorageAuditNamespace = {\n list(input, options) {\n return callAthena('/storage/audit/list', 'POST', input, options)\n },\n }\n const backup = createStorageBackupModule(gateway, resolvedRuntimeOptions)\n return {\n ...base,\n credentials,\n catalog,\n file,\n folder,\n permission,\n object,\n bucket,\n multipart,\n audit,\n backup,\n delete: file.delete,\n }\n}\n","import { buildSdkHeaderValue } from '../sdk-version.ts'\nimport { buildServiceRequestHeaders } from '../utils/athena-request-headers.ts'\nimport type {\n AthenaChatAddMembersRequest,\n AthenaChatAddReactionRequest,\n AthenaChatCallOptions,\n AthenaChatConnectOptions,\n AthenaChatCreateRoomRequest,\n AthenaChatDeleteResult,\n AthenaChatEditMessageRequest,\n AthenaChatMarkReadUpToRequest,\n AthenaChatMember,\n AthenaChatMessage,\n AthenaChatMessageCreatedResponse,\n AthenaChatMessagePage,\n AthenaChatModule,\n AthenaChatReactionSummary,\n AthenaChatReadCursor,\n AthenaChatRealtimeConnection,\n AthenaChatRealtimeInfoResponse,\n AthenaChatRealtimeModule,\n AthenaChatRemoveResult,\n AthenaChatResumeRoomCursor,\n AthenaChatRoom,\n AthenaChatRoomCreatedResponse,\n AthenaChatRoomPage,\n AthenaChatSearchMessagesRequest,\n AthenaChatSearchPage,\n AthenaChatSendMessageRequest,\n AthenaChatUpdateRoomRequest,\n AthenaChatWebSocketFactory,\n AthenaChatWebSocketLike,\n AthenaChatWsClientCommand,\n AthenaChatWsServerEvent,\n AthenaChatListMessagesQuery,\n AthenaChatListRoomsQuery,\n} from './types.ts'\n\nconst SDK_NAME = 'xylex-group/athena-chat'\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME)\nexport class AthenaChatError extends Error {\n status: number\n endpoint: string\n method: string\n requestId?: string\n body: unknown\n\n constructor(input: {\n message: string\n status: number\n endpoint: string\n method: string\n requestId?: string\n body: unknown\n }) {\n super(input.message)\n this.name = 'AthenaChatError'\n this.status = input.status\n this.endpoint = input.endpoint\n this.method = input.method\n this.requestId = input.requestId\n this.body = input.body\n }\n}\n\nexport interface AthenaChatClientConfig {\n baseUrl?: string\n realtimeInfoUrl?: string\n apiKey: string\n client?: string\n headers?: Record<string, string>\n bearerToken?: string\n cookie?: string\n sessionToken?: string\n forceNoCache?: boolean\n wsUrl?: string\n webSocketFactory?: AthenaChatWebSocketFactory\n}\n\nexport interface InternalChatModuleRuntimeOptions {\n resolveCallOptions?: () =>\n | AthenaChatCallOptions\n | undefined\n | Promise<AthenaChatCallOptions | undefined>\n}\n\nfunction deriveRealtimeInfoUrl(wsUrl?: string): string | undefined {\n if (!wsUrl) {\n return undefined\n }\n\n const parsed = new URL(normalizeWsUrl(wsUrl, 'Athena chat WebSocket URL'))\n parsed.protocol = parsed.protocol === 'wss:' ? 'https:' : 'http:'\n parsed.pathname = parsed.pathname.replace(/\\/wss\\/gateway$/, '/wss/info')\n return parsed.toString()\n}\n\nfunction normalizeWsUrl(value: string, label: string): string {\n const normalized = value.trim()\n if (!normalized) {\n throw new Error(`${label} is required.`)\n }\n\n let parsed: URL\n try {\n parsed = new URL(normalized)\n } catch {\n throw new Error(`${label} must be a valid absolute ws(s) URL.`)\n }\n\n if (parsed.protocol !== 'ws:' && parsed.protocol !== 'wss:') {\n throw new Error(`${label} must use ws or wss.`)\n }\n\n parsed.pathname = parsed.pathname.replace(/\\/+$/, '')\n return parsed.toString().replace(/\\/$/, '')\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction parseResponseBody(rawText: string, contentType: string | null) {\n if (!rawText) {\n return { parsed: null as unknown, parseFailed: false }\n }\n\n const contentTypeSuggestsJson =\n contentType?.toLowerCase().includes('application/json') ?? false\n const looksJson =\n contentTypeSuggestsJson || rawText.startsWith('{') || rawText.startsWith('[')\n\n if (!looksJson) {\n return { parsed: rawText as unknown, parseFailed: false }\n }\n\n try {\n return { parsed: JSON.parse(rawText) as unknown, parseFailed: false }\n } catch {\n return { parsed: rawText as unknown, parseFailed: true }\n }\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n return (\n headers.get('x-request-id') ??\n headers.get('x-correlation-id') ??\n headers.get('x-athena-request-id') ??\n undefined\n )\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string): string {\n if (isRecord(payload)) {\n for (const candidate of [payload.error, payload.message, payload.details]) {\n if (typeof candidate === 'string' && candidate.trim().length > 0) {\n return candidate.trim()\n }\n }\n }\n\n if (typeof payload === 'string' && payload.trim().length > 0) {\n return payload.trim()\n }\n\n return fallback\n}\n\nfunction encodePathSegment(value: string, label: string): string {\n const normalized = value.trim()\n if (!normalized) {\n throw new Error(`${label} is required.`)\n }\n return encodeURIComponent(normalized)\n}\n\nfunction encodeQuery(query?: Record<string, unknown>): string {\n if (!query) {\n return ''\n }\n\n const params = new URLSearchParams()\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) {\n continue\n }\n if (Array.isArray(value)) {\n for (const item of value) {\n if (item !== undefined && item !== null) {\n params.append(key, String(item))\n }\n }\n continue\n }\n params.set(key, String(value))\n }\n\n const encoded = params.toString()\n return encoded ? `?${encoded}` : ''\n}\n\nfunction createSocket(\n factory: AthenaChatWebSocketFactory,\n url: string,\n protocols?: string | string[],\n): AthenaChatWebSocketLike {\n try {\n return new (factory as new (\n socketUrl: string,\n socketProtocols?: string | string[],\n ) => AthenaChatWebSocketLike)(url, protocols)\n } catch (error) {\n if (error instanceof TypeError) {\n return (factory as (\n socketUrl: string,\n socketProtocols?: string | string[],\n ) => AthenaChatWebSocketLike)(url, protocols)\n }\n throw error\n }\n}\n\nfunction buildHeaders(\n config: AthenaChatClientConfig,\n options?: AthenaChatCallOptions,\n): Record<string, string> {\n return buildServiceRequestHeaders('chat', SDK_HEADER_VALUE, config, options)\n}\n\nfunction withJsonBody(init: RequestInit, body: unknown): RequestInit {\n return {\n ...init,\n body: body === undefined ? undefined : JSON.stringify(body),\n headers: {\n 'Content-Type': 'application/json',\n ...(init.headers as Record<string, string>),\n },\n }\n}\n\nasync function request<T>(\n config: AthenaChatClientConfig,\n runtimeOptions: InternalChatModuleRuntimeOptions,\n method: string,\n endpoint: string,\n options?: AthenaChatCallOptions,\n body?: unknown,\n): Promise<T> {\n if (!config.baseUrl) {\n throw new Error(\n 'Athena chat base URL is not configured. Pass createClient({ url }) for unified routing or set chat.url explicitly.',\n )\n }\n const url = `${config.baseUrl}${endpoint}`\n const contextOptions = await runtimeOptions.resolveCallOptions?.()\n const resolvedOptions = {\n ...contextOptions,\n ...options,\n headers:\n contextOptions?.headers || options?.headers\n ? { ...(contextOptions?.headers ?? {}), ...(options?.headers ?? {}) }\n : undefined,\n }\n const init: RequestInit = {\n method,\n headers: buildHeaders(config, resolvedOptions),\n signal: resolvedOptions.signal,\n }\n const finalInit =\n body === undefined || method === 'GET'\n ? init\n : withJsonBody(init, body)\n\n const response = await fetch(url, finalInit)\n const rawText = await response.text()\n const { parsed } = parseResponseBody(rawText, response.headers.get('content-type'))\n\n if (!response.ok) {\n throw new AthenaChatError({\n message: resolveErrorMessage(parsed, `Athena chat ${method} ${endpoint} failed with ${response.status}`),\n status: response.status,\n endpoint,\n method,\n requestId: resolveRequestId(response.headers),\n body: parsed,\n })\n }\n\n return parsed as T\n}\n\nfunction unwrapEnvelopeData<T extends { data: unknown }>(payload: T): T['data'] {\n return payload.data\n}\n\nfunction createRealtimeConnection(\n config: AthenaChatClientConfig,\n options?: AthenaChatConnectOptions,\n): AthenaChatRealtimeConnection {\n if (!config.wsUrl) {\n throw new Error(\n 'Athena chat WebSocket URL is not configured. Pass createClient({ url }) for unified routing or set chat.wsUrl explicitly.',\n )\n }\n\n const wsFactory =\n config.webSocketFactory ??\n ((globalThis as unknown as { WebSocket?: AthenaChatWebSocketFactory }).WebSocket)\n\n if (!wsFactory) {\n throw new Error(\n 'No WebSocket implementation is available. Provide chat.webSocketFactory in createClient(...) or run in a runtime with global WebSocket support.',\n )\n }\n\n const socket = createSocket(wsFactory, config.wsUrl, options?.protocols)\n\n const send = (command: AthenaChatWsClientCommand) => {\n socket.send(JSON.stringify(command))\n }\n\n if (options?.onMessage) {\n const listener = (event: unknown) => {\n const messageEvent = event as { data?: unknown }\n const raw = messageEvent?.data\n if (typeof raw !== 'string') {\n return\n }\n try {\n options.onMessage?.(JSON.parse(raw) as AthenaChatWsServerEvent | Record<string, unknown>)\n } catch {\n options.onMessage?.({ type: 'error', error: 'Invalid JSON message from Athena chat realtime gateway.' })\n }\n }\n\n if (typeof socket.addEventListener === 'function') {\n socket.addEventListener('message', listener)\n } else {\n socket.onmessage = listener as AthenaChatWebSocketLike['onmessage']\n }\n }\n\n const hello = (command?: { token?: string | null; room_subscriptions?: string[] | null }) => {\n send({\n type: 'auth.hello',\n token: command?.token,\n room_subscriptions: command?.room_subscriptions,\n })\n }\n\n if (options?.hello) {\n const onOpen = () => hello({\n token: options.hello?.token ?? undefined,\n room_subscriptions: options.hello?.room_subscriptions ?? undefined,\n })\n if (typeof socket.addEventListener === 'function') {\n socket.addEventListener('open', onOpen)\n } else {\n socket.onopen = onOpen\n }\n }\n\n return {\n socket,\n send,\n hello,\n subscribe(roomId, fromSeq) {\n send({\n type: 'chat.subscribe',\n room_id: roomId,\n from_seq: fromSeq ?? undefined,\n })\n },\n unsubscribe(roomId) {\n send({\n type: 'chat.unsubscribe',\n room_id: roomId,\n })\n },\n resume(rooms: AthenaChatResumeRoomCursor[]) {\n send({\n type: 'chat.resume',\n rooms,\n })\n },\n typingStart(roomId) {\n send({\n type: 'chat.typing.start',\n room_id: roomId,\n })\n },\n typingStop(roomId) {\n send({\n type: 'chat.typing.stop',\n room_id: roomId,\n })\n },\n presenceHeartbeat(activeRoomId) {\n send({\n type: 'chat.presence.heartbeat',\n active_room_id: activeRoomId ?? undefined,\n })\n },\n readUpTo(roomId, input) {\n send({\n type: 'chat.read.up_to',\n room_id: roomId,\n message_id: input?.message_id ?? undefined,\n seq: input?.seq ?? undefined,\n })\n },\n ping(at = new Date().toISOString()) {\n send({\n type: 'ping',\n at,\n })\n },\n close(code, reason) {\n socket.close(code, reason)\n },\n }\n}\n\nexport function createChatModule(\n config: AthenaChatClientConfig,\n runtimeOptions: InternalChatModuleRuntimeOptions = {},\n): AthenaChatModule {\n const call = <T>(\n method: string,\n endpoint: string,\n options?: AthenaChatCallOptions,\n body?: unknown,\n ): Promise<T> => request<T>(config, runtimeOptions, method, endpoint, options, body)\n\n const realtime: AthenaChatRealtimeModule = {\n info(options) {\n const realtimeInfoUrl = config.realtimeInfoUrl ?? deriveRealtimeInfoUrl(config.wsUrl)\n if (!realtimeInfoUrl) {\n throw new Error(\n 'Athena chat realtime info URL is not configured. Pass createClient({ url }) for unified routing or set chat.wsUrl explicitly.',\n )\n }\n\n return request<AthenaChatRealtimeInfoResponse>(\n {\n ...config,\n baseUrl: realtimeInfoUrl,\n },\n runtimeOptions,\n 'GET',\n '',\n options,\n )\n },\n connect(options) {\n return createRealtimeConnection(config, options)\n },\n }\n\n return {\n room: {\n list(query?: AthenaChatListRoomsQuery, options?: AthenaChatCallOptions) {\n return call<AthenaChatRoomPage>(\n 'GET',\n `/rooms${encodeQuery(query as Record<string, unknown> | undefined)}`,\n options,\n )\n },\n create(input: AthenaChatCreateRoomRequest, options?: AthenaChatCallOptions) {\n return call<AthenaChatRoomCreatedResponse>('POST', '/rooms', options, input)\n },\n get(roomId: string, options?: AthenaChatCallOptions) {\n return call<AthenaChatRoom>(\n 'GET',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}`,\n options,\n )\n },\n update(roomId: string, input: AthenaChatUpdateRoomRequest, options?: AthenaChatCallOptions) {\n return call<AthenaChatRoom>(\n 'PATCH',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}`,\n options,\n input,\n )\n },\n archive(roomId: string, options?: AthenaChatCallOptions) {\n return call<AthenaChatRoom>(\n 'POST',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}/archive`,\n options,\n )\n },\n readCursor: {\n upTo(roomId: string, input?: AthenaChatMarkReadUpToRequest, options?: AthenaChatCallOptions) {\n return call<AthenaChatReadCursor>(\n 'POST',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}/read-cursor`,\n options,\n input ?? {},\n )\n },\n },\n member: {\n list(roomId: string, options?: AthenaChatCallOptions) {\n return call<AthenaChatMember[]>(\n 'GET',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}/members`,\n options,\n )\n },\n add(roomId: string, input: AthenaChatAddMembersRequest, options?: AthenaChatCallOptions) {\n return call<AthenaChatMember[]>(\n 'POST',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}/members`,\n options,\n input,\n )\n },\n remove(roomId: string, userId: string, options?: AthenaChatCallOptions) {\n return call<AthenaChatRemoveResult>(\n 'DELETE',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}/members/${encodePathSegment(userId, 'chat user ID')}`,\n options,\n )\n },\n },\n message: {\n list(roomId: string, query?: AthenaChatListMessagesQuery, options?: AthenaChatCallOptions) {\n return call<AthenaChatMessagePage>(\n 'GET',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}/messages${encodeQuery(query as Record<string, unknown> | undefined)}`,\n options,\n )\n },\n send(roomId: string, input: AthenaChatSendMessageRequest, options?: AthenaChatCallOptions) {\n return call<AthenaChatMessageCreatedResponse>(\n 'POST',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}/messages`,\n options,\n input,\n )\n },\n update(roomId: string, messageId: string, input: AthenaChatEditMessageRequest, options?: AthenaChatCallOptions) {\n return call<AthenaChatMessage>(\n 'PATCH',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}/messages/${encodePathSegment(messageId, 'chat message ID')}`,\n options,\n input,\n )\n },\n delete(roomId: string, messageId: string, options?: AthenaChatCallOptions) {\n return call<AthenaChatDeleteResult>(\n 'DELETE',\n `/rooms/${encodePathSegment(roomId, 'chat room ID')}/messages/${encodePathSegment(messageId, 'chat message ID')}`,\n options,\n )\n },\n },\n },\n message: {\n reaction: {\n add(messageId: string, input: AthenaChatAddReactionRequest, options?: AthenaChatCallOptions) {\n return call<AthenaChatReactionSummary>(\n 'POST',\n `/messages/${encodePathSegment(messageId, 'chat message ID')}/reactions`,\n options,\n input,\n )\n },\n remove(messageId: string, emoji: string, options?: AthenaChatCallOptions) {\n return call<AthenaChatReactionSummary>(\n 'DELETE',\n `/messages/${encodePathSegment(messageId, 'chat message ID')}/reactions/${encodePathSegment(emoji, 'reaction emoji')}`,\n options,\n )\n },\n },\n search(input: AthenaChatSearchMessagesRequest, options?: AthenaChatCallOptions) {\n return call<AthenaChatSearchPage>(\n 'POST',\n '/messages/search',\n options,\n input,\n )\n },\n },\n realtime,\n }\n}\n\nexport const chatSdkManifest = {\n namespace: 'chat',\n basePath: '/chat',\n methods: [\n { name: 'listRooms', method: 'GET', path: '/chat/rooms' },\n { name: 'createRoom', method: 'POST', path: '/chat/rooms' },\n { name: 'getRoom', method: 'GET', path: '/chat/rooms/{room_id}' },\n { name: 'updateRoom', method: 'PATCH', path: '/chat/rooms/{room_id}' },\n { name: 'archiveRoom', method: 'POST', path: '/chat/rooms/{room_id}/archive' },\n { name: 'listRoomMessages', method: 'GET', path: '/chat/rooms/{room_id}/messages' },\n { name: 'sendRoomMessage', method: 'POST', path: '/chat/rooms/{room_id}/messages' },\n { name: 'updateRoomMessage', method: 'PATCH', path: '/chat/rooms/{room_id}/messages/{message_id}' },\n { name: 'deleteRoomMessage', method: 'DELETE', path: '/chat/rooms/{room_id}/messages/{message_id}' },\n { name: 'advanceReadCursor', method: 'POST', path: '/chat/rooms/{room_id}/read-cursor' },\n { name: 'listRoomMembers', method: 'GET', path: '/chat/rooms/{room_id}/members' },\n { name: 'addRoomMembers', method: 'POST', path: '/chat/rooms/{room_id}/members' },\n { name: 'removeRoomMember', method: 'DELETE', path: '/chat/rooms/{room_id}/members/{user_id}' },\n { name: 'addReaction', method: 'POST', path: '/chat/messages/{message_id}/reactions' },\n { name: 'removeReaction', method: 'DELETE', path: '/chat/messages/{message_id}/reactions/{emoji}' },\n { name: 'searchMessages', method: 'POST', path: '/chat/messages/search' },\n { name: 'getRealtimeInfo', method: 'GET', path: '/wss/info' },\n { name: 'connectRealtime', method: 'GET', path: '/wss/gateway' },\n ],\n} as const\n\nexport function unwrapChatRoom(payload: AthenaChatRoomCreatedResponse): AthenaChatRoom {\n return unwrapEnvelopeData(payload) as AthenaChatRoom\n}\n\nexport function unwrapChatMessage(payload: AthenaChatMessageCreatedResponse): AthenaChatMessage {\n return unwrapEnvelopeData(payload) as AthenaChatMessage\n}\n","import type {\n AthenaDeletePayload,\n AthenaFetchPayload,\n AthenaGatewayCondition,\n AthenaInsertPayload,\n AthenaJsonObject,\n AthenaRpcFilter,\n AthenaRpcPayload,\n AthenaSortBy,\n AthenaUpdatePayload,\n} from './gateway/types.ts'\nimport type {\n AthenaFindManyOptions,\n AthenaOrderBy,\n AthenaSelectShape,\n AthenaWhere,\n} from './query-ast.ts'\nimport type { AthenaFindManyAstPayload, AthenaSelectTransportPlan } from './query-transport.ts'\n\nconst ATHENA_DEBUG_AST_KEY = '__athenaDebugAst' as const\n\nexport interface AthenaTableBuilderStateAst {\n conditions: AthenaGatewayCondition[]\n limit?: number\n offset?: number\n order?: AthenaSortBy\n currentPage?: number\n pageSize?: number\n totalPages?: number\n}\n\nexport interface AthenaRpcBuilderStateAst {\n filters: AthenaRpcFilter[]\n limit?: number\n offset?: number\n order?: {\n column: string\n ascending?: boolean\n }\n}\n\nexport type AthenaDebugQueryEndpoint =\n | '/gateway/fetch'\n | '/gateway/insert'\n | '/gateway/update'\n | '/gateway/delete'\n | '/gateway/rpc'\n | '/gateway/query'\n | `/rpc/${string}`\n\ninterface AthenaDebugAstBase<TKind extends string> {\n version: 1\n kind: TKind\n}\n\nexport type AthenaSelectDebugTransport =\n | {\n mode: 'compiled-fetch' | 'structured-fetch'\n endpoint: '/gateway/fetch'\n payload: AthenaFetchPayload\n }\n | {\n mode: 'typed-query'\n endpoint: '/gateway/query'\n payload: {\n query: string\n }\n }\n\nexport interface AthenaSelectDebugAst extends AthenaDebugAstBase<'select'> {\n tableName: string\n input: {\n columns: string | string[]\n state: AthenaTableBuilderStateAst\n }\n transport: AthenaSelectDebugTransport\n}\n\nexport type AthenaFindManyDebugTransport<\n Row = Record<string, unknown>,\n TSelect extends AthenaSelectShape = AthenaSelectShape,\n> =\n | {\n mode: 'direct-ast-fetch'\n endpoint: '/gateway/fetch'\n payload: AthenaFindManyAstPayload<Row, TSelect>\n }\n | {\n mode: 'compiled-fetch' | 'structured-fetch'\n endpoint: '/gateway/fetch'\n payload: AthenaFetchPayload\n }\n | {\n mode: 'compiled-query'\n endpoint: '/gateway/query'\n payload: {\n query: string\n }\n }\n\nexport interface AthenaFindManyDebugAst<\n Row = Record<string, unknown>,\n TSelect extends AthenaSelectShape = AthenaSelectShape,\n> extends AthenaDebugAstBase<'findMany'> {\n tableName: string\n input: {\n select: TSelect\n where?: AthenaWhere<Row>\n orderBy?: AthenaOrderBy<Row>\n limit?: number\n }\n compiled: {\n columns: string\n baseState: AthenaTableBuilderStateAst\n executionState: AthenaTableBuilderStateAst\n }\n transport: AthenaFindManyDebugTransport<Row, TSelect>\n}\n\nexport interface AthenaInsertDebugAst extends AthenaDebugAstBase<'insert'> {\n tableName: string\n input: {\n values: AthenaInsertPayload['insert_body']\n returning?: AthenaInsertPayload['columns']\n count?: AthenaInsertPayload['count']\n head?: boolean\n defaultToNull?: boolean\n }\n transport: {\n mode: 'insert'\n endpoint: '/gateway/insert'\n payload: AthenaInsertPayload\n }\n}\n\nexport interface AthenaUpsertDebugAst extends AthenaDebugAstBase<'upsert'> {\n tableName: string\n input: {\n values: AthenaInsertPayload['insert_body']\n updateBody?: AthenaInsertPayload['update_body']\n onConflict?: AthenaInsertPayload['on_conflict']\n returning?: AthenaInsertPayload['columns']\n count?: AthenaInsertPayload['count']\n head?: boolean\n defaultToNull?: boolean\n }\n transport: {\n mode: 'upsert'\n endpoint: '/gateway/insert'\n payload: AthenaInsertPayload\n }\n}\n\nexport interface AthenaUpdateDebugAst extends AthenaDebugAstBase<'update'> {\n tableName: string\n input: {\n values: AthenaUpdatePayload['update_body']\n state: AthenaTableBuilderStateAst\n returning?: AthenaUpdatePayload['columns']\n }\n transport: {\n mode: 'update'\n endpoint: '/gateway/update'\n payload: AthenaUpdatePayload\n }\n}\n\nexport interface AthenaDeleteDebugAst extends AthenaDebugAstBase<'delete'> {\n tableName: string\n input: {\n resourceId?: AthenaDeletePayload['resource_id']\n state: AthenaTableBuilderStateAst\n returning?: AthenaDeletePayload['columns']\n }\n transport: {\n mode: 'delete'\n endpoint: '/gateway/delete'\n payload: AthenaDeletePayload\n }\n}\n\nexport interface AthenaRpcDebugAst extends AthenaDebugAstBase<'rpc'> {\n functionName: string\n input: {\n args?: AthenaJsonObject\n select?: string | string[]\n state: AthenaRpcBuilderStateAst\n }\n transport: {\n mode: 'rpc-post' | 'rpc-get'\n endpoint: '/gateway/rpc' | `/rpc/${string}`\n payload: AthenaRpcPayload\n }\n}\n\nexport interface AthenaRawQueryDebugAst extends AthenaDebugAstBase<'query'> {\n input: {\n query: string\n }\n transport: {\n mode: 'raw-query'\n endpoint: '/gateway/query'\n payload: {\n query: string\n }\n }\n}\n\nexport type AthenaQueryDebugAst =\n | AthenaSelectDebugAst\n | AthenaFindManyDebugAst\n | AthenaInsertDebugAst\n | AthenaUpsertDebugAst\n | AthenaUpdateDebugAst\n | AthenaDeleteDebugAst\n | AthenaRpcDebugAst\n | AthenaRawQueryDebugAst\n\nfunction cloneConditions(conditions: AthenaGatewayCondition[]): AthenaGatewayCondition[] {\n return conditions.map(condition => ({ ...condition }))\n}\n\nexport function cloneTableBuilderStateAst(\n state: AthenaTableBuilderStateAst,\n): AthenaTableBuilderStateAst {\n return {\n conditions: cloneConditions(state.conditions),\n limit: state.limit,\n offset: state.offset,\n order: state.order ? { ...state.order } : undefined,\n currentPage: state.currentPage,\n pageSize: state.pageSize,\n totalPages: state.totalPages,\n }\n}\n\nexport function cloneRpcBuilderStateAst(\n state: AthenaRpcBuilderStateAst,\n): AthenaRpcBuilderStateAst {\n return {\n filters: state.filters.map(filter => ({ ...filter })),\n limit: state.limit,\n offset: state.offset,\n order: state.order ? { ...state.order } : undefined,\n }\n}\n\nfunction toSelectTransportAst(plan: AthenaSelectTransportPlan): AthenaSelectDebugTransport {\n if (plan.kind === 'query') {\n return {\n mode: 'typed-query',\n endpoint: '/gateway/query',\n payload: plan.payload,\n }\n }\n\n return {\n mode: plan.payload.select !== undefined ? 'structured-fetch' : 'compiled-fetch',\n endpoint: '/gateway/fetch',\n payload: plan.payload,\n }\n}\n\nfunction resolveDebugTableName(tableName: string | undefined): string {\n return tableName ?? '__unknown_table__'\n}\n\nexport function buildSelectDebugAst(input: {\n tableName: string\n columns: string | string[]\n state: AthenaTableBuilderStateAst\n plan: AthenaSelectTransportPlan\n}): AthenaSelectDebugAst {\n return {\n version: 1,\n kind: 'select',\n tableName: input.tableName,\n input: {\n columns: input.columns,\n state: cloneTableBuilderStateAst(input.state),\n },\n transport: toSelectTransportAst(input.plan),\n }\n}\n\nexport function buildFindManyCompiledDebugAst<\n Row,\n TSelect extends AthenaSelectShape,\n>(input: {\n tableName: string\n /** Already validated at the public `findMany` callsite. */\n options: AthenaFindManyOptions<Row, TSelect>\n compiledColumns: string\n baseState: AthenaTableBuilderStateAst\n executionState: AthenaTableBuilderStateAst\n plan: AthenaSelectTransportPlan\n}): AthenaFindManyDebugAst<Row, TSelect> {\n return {\n version: 1,\n kind: 'findMany',\n tableName: input.tableName,\n input: {\n select: input.options.select,\n where: input.options.where,\n orderBy: input.options.orderBy,\n limit: input.options.limit,\n },\n compiled: {\n columns: input.compiledColumns,\n baseState: cloneTableBuilderStateAst(input.baseState),\n executionState: cloneTableBuilderStateAst(input.executionState),\n },\n transport: planToFindManyTransport<Row, TSelect>(input.plan),\n }\n}\n\nexport function buildFindManyDirectDebugAst<\n Row,\n TSelect extends AthenaSelectShape,\n>(input: {\n tableName: string\n /** Already validated at the public `findMany` callsite. */\n options: AthenaFindManyOptions<Row, TSelect>\n compiledColumns: string\n baseState: AthenaTableBuilderStateAst\n executionState: AthenaTableBuilderStateAst\n payload: AthenaFindManyAstPayload<Row, TSelect>\n}): AthenaFindManyDebugAst<Row, TSelect> {\n return {\n version: 1,\n kind: 'findMany',\n tableName: input.tableName,\n input: {\n select: input.options.select,\n where: input.options.where,\n orderBy: input.options.orderBy,\n limit: input.options.limit,\n },\n compiled: {\n columns: input.compiledColumns,\n baseState: cloneTableBuilderStateAst(input.baseState),\n executionState: cloneTableBuilderStateAst(input.executionState),\n },\n transport: {\n mode: 'direct-ast-fetch',\n endpoint: '/gateway/fetch',\n payload: input.payload,\n },\n }\n}\n\nfunction planToFindManyTransport<\n Row,\n TSelect extends AthenaSelectShape,\n>(\n plan: AthenaSelectTransportPlan,\n): AthenaFindManyDebugTransport<Row, TSelect> {\n if (plan.kind === 'query') {\n return {\n mode: 'compiled-query',\n endpoint: '/gateway/query',\n payload: plan.payload,\n }\n }\n\n return {\n mode: plan.payload.select !== undefined ? 'structured-fetch' : 'compiled-fetch',\n endpoint: '/gateway/fetch',\n payload: plan.payload,\n }\n}\n\nexport function buildInsertDebugAst(payload: AthenaInsertPayload): AthenaInsertDebugAst {\n return {\n version: 1,\n kind: 'insert',\n tableName: payload.table_name,\n input: {\n values: payload.insert_body,\n returning: payload.columns,\n count: payload.count,\n head: payload.head,\n defaultToNull: payload.default_to_null,\n },\n transport: {\n mode: 'insert',\n endpoint: '/gateway/insert',\n payload,\n },\n }\n}\n\nexport function buildUpsertDebugAst(payload: AthenaInsertPayload): AthenaUpsertDebugAst {\n return {\n version: 1,\n kind: 'upsert',\n tableName: payload.table_name,\n input: {\n values: payload.insert_body,\n updateBody: payload.update_body,\n onConflict: payload.on_conflict,\n returning: payload.columns,\n count: payload.count,\n head: payload.head,\n defaultToNull: payload.default_to_null,\n },\n transport: {\n mode: 'upsert',\n endpoint: '/gateway/insert',\n payload,\n },\n }\n}\n\nexport function buildUpdateDebugAst(input: {\n state: AthenaTableBuilderStateAst\n payload: AthenaUpdatePayload\n}): AthenaUpdateDebugAst {\n return {\n version: 1,\n kind: 'update',\n tableName: resolveDebugTableName(input.payload.table_name),\n input: {\n values: input.payload.update_body,\n state: cloneTableBuilderStateAst(input.state),\n returning: input.payload.columns,\n },\n transport: {\n mode: 'update',\n endpoint: '/gateway/update',\n payload: input.payload,\n },\n }\n}\n\nexport function buildDeleteDebugAst(input: {\n state: AthenaTableBuilderStateAst\n payload: AthenaDeletePayload\n}): AthenaDeleteDebugAst {\n return {\n version: 1,\n kind: 'delete',\n tableName: input.payload.table_name,\n input: {\n resourceId: input.payload.resource_id,\n state: cloneTableBuilderStateAst(input.state),\n returning: input.payload.columns,\n },\n transport: {\n mode: 'delete',\n endpoint: '/gateway/delete',\n payload: input.payload,\n },\n }\n}\n\nexport function buildRpcDebugAst(input: {\n functionName: string\n args?: AthenaJsonObject\n selectedColumns?: string | string[]\n state: AthenaRpcBuilderStateAst\n payload: AthenaRpcPayload\n endpoint: '/gateway/rpc' | `/rpc/${string}`\n}): AthenaRpcDebugAst {\n return {\n version: 1,\n kind: 'rpc',\n functionName: input.functionName,\n input: {\n args: input.args,\n select: input.selectedColumns,\n state: cloneRpcBuilderStateAst(input.state),\n },\n transport: {\n mode: input.endpoint === '/gateway/rpc' ? 'rpc-post' : 'rpc-get',\n endpoint: input.endpoint,\n payload: input.payload,\n },\n }\n}\n\nexport function buildRawQueryDebugAst(query: string): AthenaRawQueryDebugAst {\n return {\n version: 1,\n kind: 'query',\n input: {\n query,\n },\n transport: {\n mode: 'raw-query',\n endpoint: '/gateway/query',\n payload: {\n query,\n },\n },\n }\n}\n\nexport function attachAthenaDebugAst(\n target: unknown,\n ast: AthenaQueryDebugAst | undefined,\n): void {\n if (!ast) {\n return\n }\n if (!target || (typeof target !== 'object' && typeof target !== 'function')) {\n return\n }\n Object.defineProperty(target, ATHENA_DEBUG_AST_KEY, {\n value: ast,\n enumerable: false,\n configurable: true,\n writable: false,\n })\n}\n\nexport function getAthenaDebugAst(\n value: unknown,\n): AthenaQueryDebugAst | null {\n if (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n return null\n }\n return ((value as Record<string, unknown>)[ATHENA_DEBUG_AST_KEY] as AthenaQueryDebugAst | undefined) ?? null\n}\n","import { attachAthenaDebugAst } from './query-debug-ast.ts'\nimport type {\n InternalClientBehaviorOptions,\n AthenaQueryTraceCallsite,\n AthenaQueryTraceEvent,\n AthenaResult,\n} from './client.ts'\nimport type {\n AthenaGatewayCallOptions,\n AthenaRpcCallOptions,\n} from './gateway/types.ts'\nimport type { AthenaQueryDebugAst } from './query-debug-ast.ts'\n\nconst QUERY_TRACE_STACK_SKIP_PATTERNS = [\n 'src\\\\client.ts',\n 'src/client.ts',\n 'src\\\\query-tracing.ts',\n 'src/query-tracing.ts',\n 'src\\\\v3-client.ts',\n 'src/v3-client.ts',\n 'dist\\\\client.',\n 'dist/client.',\n 'dist\\\\query-tracing.',\n 'dist/query-tracing.',\n 'dist\\\\v3-client.',\n 'dist/v3-client.',\n 'node_modules\\\\@xylex-group\\\\athena',\n 'node_modules/@xylex-group/athena',\n 'node:internal',\n 'internal/process',\n] as const\n\ntype AthenaTraceOperation = AthenaQueryTraceEvent['operation']\ntype AthenaTraceEndpoint = AthenaQueryTraceEvent['endpoint']\n\nexport interface AthenaTraceContext {\n operation: AthenaTraceOperation\n endpoint: AthenaTraceEndpoint\n table?: string\n functionName?: string\n sql: string\n payload: unknown\n ast?: AthenaQueryDebugAst\n options?: AthenaGatewayCallOptions | AthenaRpcCallOptions\n}\n\nexport type AthenaQueryTracer = {\n captureCallsite: () => AthenaQueryTraceCallsite | null\n publishSuccess: <T>(\n context: AthenaTraceContext,\n result: AthenaResult<T>,\n durationMs: number,\n callsite: AthenaQueryTraceCallsite | null,\n ) => void\n publishFailure: (\n context: AthenaTraceContext,\n error: unknown,\n durationMs: number,\n callsite: AthenaQueryTraceCallsite | null,\n ) => void\n}\n\nexport type AthenaTraceCallsiteStore = {\n resolve: (callsite?: AthenaQueryTraceCallsite | null) => AthenaQueryTraceCallsite | null\n}\n\nfunction parseQueryTraceCallsiteFrame(frame: string): AthenaQueryTraceCallsite | null {\n const trimmed = frame.trim()\n if (!trimmed) {\n return null\n }\n\n let body = trimmed.replace(/^at\\s+/, '')\n if (body.startsWith('async ')) {\n body = body.slice(6)\n }\n\n let functionName: string | undefined\n let location = body\n const wrappedMatch = body.match(/^(.*?)\\s+\\((.*)\\)$/)\n if (wrappedMatch) {\n functionName = wrappedMatch[1].trim() || undefined\n location = wrappedMatch[2].trim()\n }\n\n const locationMatch = location.match(/^(.*):(\\d+):(\\d+)$/)\n if (!locationMatch) {\n return null\n }\n\n const filePath = locationMatch[1].replace(/^file:\\/\\//, '')\n const line = Number(locationMatch[2])\n const column = Number(locationMatch[3])\n if (!Number.isFinite(line) || !Number.isFinite(column)) {\n return null\n }\n\n const normalizedPath = filePath.replace(/\\\\/g, '/')\n const fileName = normalizedPath.split('/').at(-1) ?? filePath\n return {\n filePath,\n fileName,\n line,\n column,\n frame: trimmed,\n functionName,\n }\n}\n\nfunction captureQueryTraceCallsite(): AthenaQueryTraceCallsite | null {\n const stack = new Error().stack\n if (!stack) return null\n const frames = stack\n .split('\\n')\n .slice(2)\n .map(frame => frame.trim())\n .filter(Boolean)\n\n for (const frame of frames) {\n if (QUERY_TRACE_STACK_SKIP_PATTERNS.some(pattern => frame.includes(pattern))) {\n continue\n }\n const callsite = parseQueryTraceCallsiteFrame(frame)\n if (callsite) return callsite\n }\n\n const fallback = frames.find(frame => !frame.includes('captureQueryTraceCallsite'))\n return fallback ? parseQueryTraceCallsiteFrame(fallback) : null\n}\n\nfunction defaultQueryTraceLogger(event: AthenaQueryTraceEvent): void {\n const target = event.table ?? event.functionName ?? 'gateway'\n const outcomeState = event.outcome?.error ? 'error' : 'ok'\n const banner = `[athena-js][trace] ${event.operation.toUpperCase()} ${event.endpoint} ${target} ${event.durationMs}ms ${outcomeState}`\n console.info(banner, event)\n}\n\nexport function captureTraceCallsite(tracer?: AthenaQueryTracer): AthenaQueryTraceCallsite | null {\n return tracer?.captureCallsite() ?? null\n}\n\nexport function createTraceCallsiteStore(\n tracer?: AthenaQueryTracer,\n initialCallsite?: AthenaQueryTraceCallsite | null,\n): AthenaTraceCallsiteStore {\n let storedCallsite = initialCallsite ?? undefined\n\n return {\n resolve(callsite) {\n if (callsite) {\n storedCallsite = callsite\n return callsite\n }\n if (storedCallsite !== undefined) {\n return storedCallsite\n }\n const capturedCallsite = captureTraceCallsite(tracer)\n if (capturedCallsite) {\n storedCallsite = capturedCallsite\n }\n return capturedCallsite\n },\n }\n}\n\nexport function createQueryTracer(\n behavior?: InternalClientBehaviorOptions,\n): AthenaQueryTracer | undefined {\n const traceOption = behavior?.traceQueries\n if (!traceOption) {\n return undefined\n }\n\n const logger =\n typeof traceOption === 'object' && traceOption.logger ? traceOption.logger : defaultQueryTraceLogger\n\n const emit = (event: AthenaQueryTraceEvent) => {\n try {\n logger(event)\n } catch (error) {\n console.warn('[athena-js][trace] logger failed', error)\n }\n }\n\n return {\n captureCallsite: captureQueryTraceCallsite,\n publishSuccess<T>(\n context: AthenaTraceContext,\n result: AthenaResult<T>,\n durationMs: number,\n callsite: AthenaQueryTraceCallsite | null,\n ) {\n emit({\n timestamp: new Date().toISOString(),\n durationMs,\n operation: context.operation,\n endpoint: context.endpoint,\n table: context.table,\n functionName: context.functionName,\n sql: context.sql,\n payload: context.payload,\n ast: context.ast,\n options: context.options,\n callsite,\n outcome: {\n status: result.status,\n error: result.error,\n errorDetails: result.errorDetails ?? null,\n count: result.count ?? null,\n data: result.data,\n raw: result.raw,\n },\n })\n },\n publishFailure(\n context: AthenaTraceContext,\n error: unknown,\n durationMs: number,\n callsite: AthenaQueryTraceCallsite | null,\n ) {\n emit({\n timestamp: new Date().toISOString(),\n durationMs,\n operation: context.operation,\n endpoint: context.endpoint,\n table: context.table,\n functionName: context.functionName,\n sql: context.sql,\n payload: context.payload,\n ast: context.ast,\n options: context.options,\n callsite,\n thrownError: error,\n })\n },\n }\n}\n\nexport async function executeWithQueryTrace<T>(\n tracer: AthenaQueryTracer | undefined,\n context: AthenaTraceContext,\n runner: () => Promise<AthenaResult<T>>,\n callsiteOverride?: AthenaQueryTraceCallsite | null,\n): Promise<AthenaResult<T>> {\n const callsite = tracer ? (callsiteOverride ?? tracer.captureCallsite()) : null\n const startedAt = tracer ? Date.now() : 0\n try {\n const result = await runner()\n attachAthenaDebugAst(result, context.ast)\n if (tracer) {\n tracer.publishSuccess(context, result, Date.now() - startedAt, callsite)\n }\n return result\n } catch (error) {\n attachAthenaDebugAst(error, context.ast)\n if (tracer) {\n tracer.publishFailure(context, error, Date.now() - startedAt, callsite)\n }\n throw error\n }\n}\n","import type { AthenaModelTarget } from './types.ts'\n\ninterface ResolveAthenaModelTargetTableNameOptions {\n fallbackSchema?: string\n fallbackModel?: string\n}\n\nfunction normalizeOptionalName(value: string | undefined): string | undefined {\n const normalized = value?.trim()\n return normalized ? normalized : undefined\n}\n\nexport function isAthenaModelTarget(value: unknown): value is AthenaModelTarget {\n if (!value || typeof value !== 'object') {\n return false\n }\n\n const candidate = value as { meta?: { primaryKey?: unknown } }\n return Boolean(candidate.meta && Array.isArray(candidate.meta.primaryKey))\n}\n\nexport function resolveAthenaModelTargetTableName(\n target: AthenaModelTarget,\n options: ResolveAthenaModelTargetTableNameOptions = {},\n): string {\n const explicitTableName = normalizeOptionalName(target.meta.tableName)\n if (explicitTableName) {\n return explicitTableName\n }\n\n const schemaName = normalizeOptionalName(target.meta.schema ?? options.fallbackSchema)\n const modelName = normalizeOptionalName(target.meta.model ?? options.fallbackModel)\n\n if (!modelName) {\n throw new Error(\n 'Athena model target is missing meta.model or meta.tableName. Provide one of those before calling from(model).',\n )\n }\n\n return schemaName ? `${schemaName}.${modelName}` : modelName\n}\n","import type {\n AthenaConditionArrayValue,\n AthenaConditionCastType,\n AthenaConditionOperator,\n AthenaConditionValue,\n AthenaDeletePayload,\n AthenaGatewayCallOptions,\n AthenaGatewayConnectionOptions,\n AthenaGatewayConnectionResult,\n AthenaGatewayCondition,\n AthenaGatewayErrorDetails,\n AthenaInsertPayload,\n AthenaJsonObject,\n AthenaJsonValue,\n AthenaRpcCallOptions,\n AthenaRpcFilter,\n AthenaRpcFilterOperator,\n AthenaRpcPayload,\n AthenaSortBy,\n AthenaUpdatePayload,\n} from './gateway/types.ts'\nimport type { BackendConfig } from './gateway/types.ts'\nimport {\n createResultFormatter,\n executeRead,\n toSingleResult,\n} from './client-result.ts'\nimport type {\n AthenaResult,\n AthenaResultError,\n AthenaResultFormatter,\n} from './client-result.ts'\nimport {\n buildDebugSelectQuery,\n buildDeleteDebugSql,\n buildInsertDebugSql,\n buildRpcDebugSql,\n buildTypedSelectQuery,\n buildUpdateDebugSql,\n resolveTableNameForCall,\n} from './client-sql.ts'\nexport type { AthenaResult, AthenaResultError } from './client-result.ts'\nimport { createAthenaRequest } from './client-request.ts'\nimport type {\n AthenaRequestOptions,\n AthenaRequestResponse,\n} from './client-request.ts'\nexport type {\n AthenaRequestMethod,\n AthenaRequestOptions,\n AthenaRequestQueryValueMap,\n AthenaRequestResponse,\n AthenaRequestService,\n} from './client-request.ts'\nimport { normalizeAthenaGatewayBaseUrl } from './gateway/url.ts'\nimport {\n createAthenaGatewayClient,\n createAthenaGatewayClientView,\n type AthenaGatewayClient,\n} from './gateway/client.ts'\nimport { createAuthModule } from './auth/client.ts'\nimport type { AthenaAuthBindings, AthenaAuthClientConfig } from './auth/types.ts'\nimport type { AthenaDbModule } from './db/module.ts'\nimport { createStorageModule } from './storage/module.ts'\nimport type { AthenaStorageClientConfig, AthenaStorageModule } from './storage/module.ts'\nimport { createChatModule } from './chat/module.ts'\nimport type { AthenaChatModule, AthenaChatWebSocketFactory } from './chat/types.ts'\nimport {\n compileOrderBy,\n compileSelectShape,\n compileWhere,\n selectShapeUsesRelationSchema,\n shouldUseUuidTextComparison,\n} from './query-ast.ts'\nimport type {\n AthenaFindManyOptions,\n AthenaFindManyResult,\n AthenaSelectShape,\n AthenaValidatedSelectShape,\n} from './query-ast.ts'\nimport {\n canUseFindManyAstTransport,\n createSelectTransportPlan,\n findManyAstWhereRequiresLegacyTransport,\n normalizeFindManyAstWhere,\n toFindManyAstOrder,\n} from './query-transport.ts'\nimport type { AthenaFindManyAstPayload } from './query-transport.ts'\nimport {\n buildDeleteDebugAst,\n buildFindManyCompiledDebugAst,\n buildFindManyDirectDebugAst,\n buildInsertDebugAst,\n buildRawQueryDebugAst,\n buildRpcDebugAst,\n buildSelectDebugAst,\n buildUpdateDebugAst,\n buildUpsertDebugAst,\n} from './query-debug-ast.ts'\nimport type { AthenaQueryDebugAst } from './query-debug-ast.ts'\nimport {\n captureTraceCallsite,\n createQueryTracer,\n createTraceCallsiteStore,\n executeWithQueryTrace,\n} from './query-tracing.ts'\nimport type {\n AthenaQueryTracer,\n} from './query-tracing.ts'\nimport {\n isAthenaModelTarget,\n resolveAthenaModelTargetTableName,\n} from './schema/model-target.ts'\nimport type {\n AthenaSelectInput,\n AthenaTypecheckedColumnKey,\n AthenaValidatedSelectInput,\n} from './select-column-types.ts'\n\nexport type {\n AthenaColumnKey,\n AthenaColumnKeyWithAutocomplete,\n AthenaResolvedColumnKey,\n AthenaSelectArrayElement,\n AthenaSelectColumnsFor,\n AthenaSelectInput,\n AthenaSelectInputHints,\n AthenaTypecheckedColumnKey,\n AthenaValidatedSelectInput,\n HasKnownSelectColumns,\n} from './select-column-types.ts'\nimport type {\n AthenaClientModelsInput,\n AthenaClientModelForTableName,\n AthenaClientTableName,\n AthenaModelTarget,\n InsertOf,\n RowOf,\n UpdateOf,\n} from './schema/types.ts'\n\nexport interface InternalClientBehaviorOptions {\n /**\n * Retry retryable read failures (`select`, `findMany`, `query`) with a fixed internal policy.\n *\n * Applies two additional attempts with exponential backoff and jitter.\n */\n retryReads?: boolean\n /**\n * Emit execution diagnostics for every query/mutation/RPC invocation.\n * Includes payload, synthesized SQL, full outcome, and best-effort callsite metadata.\n */\n traceQueries?: boolean | AthenaQueryTraceOptions\n /**\n * Build and attach a normalized operation AST for runtime debugging.\n *\n * When enabled, successful Athena results expose a non-enumerable debug AST\n * that can be read with `getAthenaDebugAst(...)`. If tracing is also enabled,\n * the same AST is included on emitted trace events.\n */\n debugAst?: boolean\n /**\n * Send the original `findMany(...)` AST body for clean object-select reads.\n * This requires gateway support and falls back to legacy compiled transport\n * when a chain carries filter/pagination state that the AST payload cannot\n * represent losslessly yet.\n */\n findManyAst?: boolean\n}\n\nexport interface AthenaQueryTraceOptions {\n /**\n * When false, tracing is off even if diagnostics mode would enable it.\n * When true, tracing stays on even in quiet (`diagnostics: 'auto'`) environments.\n * When omitted, quiet environments disable object-form trace options.\n */\n enabled?: boolean\n /**\n * Custom sink for trace events. Defaults to console.info.\n */\n logger?: (event: AthenaQueryTraceEvent) => void\n}\n\nexport interface AthenaQueryTraceCallsite {\n filePath: string\n fileName: string\n line: number\n column: number\n frame?: string\n functionName?: string\n}\n\nexport interface AthenaQueryTraceEvent {\n timestamp: string\n durationMs: number\n operation: 'select' | 'insert' | 'upsert' | 'update' | 'delete' | 'rpc' | 'query'\n endpoint: '/gateway/fetch' | '/gateway/insert' | '/gateway/update' | '/gateway/delete' | '/gateway/rpc' | '/gateway/query' | `/rpc/${string}`\n table?: string\n functionName?: string\n sql: string\n payload: unknown\n ast?: AthenaQueryDebugAst\n options?: AthenaGatewayCallOptions | AthenaRpcCallOptions\n callsite: AthenaQueryTraceCallsite | null\n outcome?: {\n status: number\n error: AthenaResultError | null\n errorDetails?: AthenaGatewayErrorDetails | null\n count?: number | null\n data: unknown\n raw: unknown\n }\n thrownError?: unknown\n}\n\ntype TableBuilderState = {\n conditions: AthenaGatewayCondition[]\n limit?: number\n offset?: number\n order?: AthenaSortBy\n currentPage?: number\n pageSize?: number\n totalPages?: number\n}\n\ntype ConditionCastHints = {\n valueCast?: AthenaConditionCastType\n columnCast?: AthenaConditionCastType\n}\n\ntype MutationSingleResult<Result> = Result extends Array<infer Item> ? Item | null : Result | null\ntype MutationResultRow<Result> = Result extends Array<infer Item> ? Item : Result\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>\ntype FilterColumnKey<Row> = Extract<keyof NonNullable<Row>, string>\n/** Known keys when the row shape is concrete; `string` when untyped / index signature. */\ntype ResolvedFilterColumnKey<Row> = [FilterColumnKey<Row>] extends [never]\n ? string\n : string extends FilterColumnKey<Row>\n ? string\n : FilterColumnKey<Row>\n/**\n * Table-name argument for free-form `from<Row>(table)`.\n * - No client `models` → `string` (nothing to complete).\n * - With `models` → known bare/qualified names (IntelliSense + reject unknowns).\n * Prefer `.from(\"users\")` without a row generic so the row type is inferred from the model.\n */\ntype UntypedTableName<TModels> = [TModels] extends [never]\n ? string\n : [AthenaClientTableName<TModels>] extends [never]\n ? string\n : AthenaClientTableName<TModels>\ntype ResolvedClientTableModel<TModels, TTableName extends string> = Extract<\n AthenaClientModelForTableName<TModels, TTableName>,\n AthenaModelTarget\n>\ntype ClientTableQueryBuilder<\n TModels,\n TTableName extends string,\n> = TableQueryBuilder<\n RowOf<ResolvedClientTableModel<TModels, TTableName>>,\n InsertOf<ResolvedClientTableModel<TModels, TTableName>>,\n UpdateOf<ResolvedClientTableModel<TModels, TTableName>>\n>\n/**\n * Select/returning/single column input.\n *\n * - Typed row: validates string lists; arrays use the model-key union.\n * - Untyped row: plain `TValue` (`string | string[]`).\n */\ntype SelectColumnsFor<\n Row,\n TValue extends AthenaSelectInput,\n> = AthenaValidatedSelectInput<Row, TValue>\nconst DEFAULT_COLUMNS = '*'\n\ntype SelectDebugAstFactory = (input: {\n tableName: string\n columns: string | string[]\n executionState: TableBuilderState\n plan: ReturnType<typeof createSelectTransportPlan>\n}) => AthenaQueryDebugAst\n\nexport interface MutationQuery<\n Result,\n Row = MutationResultRow<Result>,\n> extends PromiseLike<AthenaResult<Result>> {\n select<const TColumns extends AthenaSelectInput = string>(\n columns?: SelectColumnsFor<Row, TColumns>,\n options?: AthenaGatewayCallOptions,\n ): Promise<AthenaResult<Result>>\n returning<const TColumns extends AthenaSelectInput = string>(\n columns?: SelectColumnsFor<Row, TColumns>,\n options?: AthenaGatewayCallOptions,\n ): Promise<AthenaResult<Result>>\n single<const TColumns extends AthenaSelectInput = string>(\n columns?: SelectColumnsFor<Row, TColumns>,\n options?: AthenaGatewayCallOptions,\n ): Promise<AthenaResult<MutationSingleResult<Result>>>\n maybeSingle<const TColumns extends AthenaSelectInput = string>(\n columns?: SelectColumnsFor<Row, TColumns>,\n options?: AthenaGatewayCallOptions,\n ): Promise<AthenaResult<MutationSingleResult<Result>>>\n then<TResult1 = AthenaResult<Result>, TResult2 = never>(\n onfulfilled?: ((value: AthenaResult<Result>) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n ): Promise<TResult1 | TResult2>\n catch<TResult = never>(\n onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | undefined | null,\n ): Promise<AthenaResult<Result> | TResult>\n finally(onfinally?: (() => void) | undefined | null): Promise<AthenaResult<Result>>\n}\n\nfunction mergeOptions<T extends { headers?: Record<string, string> }>(\n ...options: Array<T | undefined>\n): T | undefined {\n return options.reduce<T | undefined>((acc, next) => {\n if (!next) return acc\n const merged = { ...(acc ?? {}), ...next } as T\n if (acc?.headers || next.headers) {\n merged.headers = {\n ...(acc?.headers ?? {}),\n ...(next.headers ?? {}),\n }\n }\n return merged\n }, undefined)\n}\n\nfunction asAthenaJsonObject(value: unknown): AthenaJsonObject {\n return value as unknown as AthenaJsonObject\n}\n\nfunction asAthenaJsonObjectArray(values: unknown[]): AthenaJsonObject[] {\n return values as unknown as AthenaJsonObject[]\n}\n\nfunction normalizeSelectColumnsInput(columns?: AthenaSelectInput): string | string[] | undefined {\n if (columns === undefined) {\n return undefined\n }\n if (typeof columns === 'string') {\n return columns\n }\n return [...columns]\n}\n\nfunction createMutationQuery<\n Result,\n Row = MutationResultRow<Result>,\n>(\n executor: (\n columns?: string | string[],\n options?: AthenaGatewayCallOptions,\n callsite?: AthenaQueryTraceCallsite | null,\n ) => Promise<AthenaResult<Result>>,\n defaultColumns: AthenaSelectInput | null = DEFAULT_COLUMNS,\n tracer?: AthenaQueryTracer,\n initialCallsite?: AthenaQueryTraceCallsite | null,\n): MutationQuery<Result, Row> {\n let selectedColumns: AthenaSelectInput | undefined = defaultColumns === null ? undefined : defaultColumns\n let selectedOptions: AthenaGatewayCallOptions | undefined\n let promise: Promise<AthenaResult<Result>> | null = null\n const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite)\n\n const run = (\n columns?: AthenaSelectInput,\n options?: AthenaGatewayCallOptions,\n callsite?: AthenaQueryTraceCallsite | null,\n ) => {\n const payloadColumns = columns ?? selectedColumns\n const payloadOptions = options ?? selectedOptions\n if (!promise) {\n promise = executor(\n normalizeSelectColumnsInput(payloadColumns),\n payloadOptions,\n callsiteStore.resolve(callsite),\n )\n }\n return promise\n }\n\n const mutationQuery: MutationQuery<Result, Row> = {\n select(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n selectedColumns = columns\n selectedOptions = options ?? selectedOptions\n return run(columns, options, captureTraceCallsite(tracer))\n },\n returning(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n return mutationQuery.select(columns, options)\n },\n single(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n selectedColumns = columns\n selectedOptions = options ?? selectedOptions\n return run(columns, options, captureTraceCallsite(tracer)).then(toSingleResult)\n },\n maybeSingle(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n return mutationQuery.single(columns, options)\n },\n then(onfulfilled, onrejected) {\n return run(selectedColumns, selectedOptions).then(onfulfilled, onrejected)\n },\n catch(onrejected) {\n return run(selectedColumns, selectedOptions).catch(onrejected)\n },\n finally(onfinally) {\n return run(selectedColumns, selectedOptions).finally(onfinally)\n },\n }\n\n return mutationQuery\n}\n\nexport interface OrderOptions {\n ascending?: boolean\n}\n\n/** Shared filter chain - supports eq, limit, etc. in any order relative to select/update */\ninterface FilterChain<Self, Row> {\n eq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n eqCast(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue, cast: AthenaConditionCastType): Self\n eqUuid(column: ResolvedFilterColumnKey<Row>, value: string): Self\n match(filters: Partial<Record<ResolvedFilterColumnKey<Row>, AthenaConditionValue>>): Self\n range(from: number, to: number): Self\n limit(count: number): Self\n offset(count: number): Self\n currentPage(value: number): Self\n pageSize(value: number): Self\n totalPages(value: number): Self\n order(column: ResolvedFilterColumnKey<Row>, options?: OrderOptions): Self\n gt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n gte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n lt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n lte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n neq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n like(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n ilike(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n is(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n in(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\n contains(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\n containedBy(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\n not(\n columnOrExpression: ResolvedFilterColumnKey<Row> | string,\n operator?: AthenaConditionOperator,\n value?: AthenaConditionValue,\n ): Self\n or(expression: string): Self\n}\n\n/** Chain returned by select() - supports filters and single/maybeSingle before execution */\nexport interface SelectChain<Row, SelectedRow = Row>\n extends FilterChain<SelectChain<Row, SelectedRow>, Row>, PromiseLike<AthenaResult<SelectedRow[]>> {\n single<\n T = SelectedRow,\n const TColumns extends AthenaSelectInput = string,\n >(\n columns?: SelectColumnsFor<Row, TColumns>,\n options?: AthenaGatewayCallOptions,\n ): Promise<AthenaResult<T | null>>\n maybeSingle<\n T = SelectedRow,\n const TColumns extends AthenaSelectInput = string,\n >(\n columns?: SelectColumnsFor<Row, TColumns>,\n options?: AthenaGatewayCallOptions,\n ): Promise<AthenaResult<T | null>>\n}\n\n/** Chain returned by update() - supports filters before execution, plus select/returning */\nexport interface UpdateChain<Row>\n extends FilterChain<UpdateChain<Row>, Row>, MutationQuery<Row[], Row> {}\n\ninterface RpcFilterChain<Self, Row> {\n eq(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n neq(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n gt(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n gte(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n lt(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n lte(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n like(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n ilike(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n is(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n in(column: AthenaTypecheckedColumnKey<Row>, values: AthenaConditionArrayValue): Self\n}\n\nexport interface RpcOrderOptions {\n ascending?: boolean\n}\n\nexport interface RpcQueryBuilder<Row>\n extends RpcFilterChain<RpcQueryBuilder<Row>, Row>, PromiseLike<AthenaResult<Row[]>> {\n select<const TColumns extends AthenaSelectInput = string>(\n columns?: SelectColumnsFor<Row, TColumns>,\n options?: AthenaRpcCallOptions,\n ): Promise<AthenaResult<Row[]>>\n single<\n T = Row,\n const TColumns extends AthenaSelectInput = string,\n >(\n columns?: SelectColumnsFor<Row, TColumns>,\n options?: AthenaRpcCallOptions,\n ): Promise<AthenaResult<T | null>>\n maybeSingle<\n T = Row,\n const TColumns extends AthenaSelectInput = string,\n >(\n columns?: SelectColumnsFor<Row, TColumns>,\n options?: AthenaRpcCallOptions,\n ): Promise<AthenaResult<T | null>>\n order(column: AthenaTypecheckedColumnKey<Row>, options?: RpcOrderOptions): RpcQueryBuilder<Row>\n limit(count: number): RpcQueryBuilder<Row>\n offset(count: number): RpcQueryBuilder<Row>\n range(from: number, to: number): RpcQueryBuilder<Row>\n}\n\nexport interface AthenaFromOptions {\n schema?: string\n}\n\nexport interface TableQueryBuilder<\n Row,\n Insert = Partial<Row>,\n Update = Partial<Insert>,\n TContext = unknown,\n> extends FilterChain<TableQueryBuilder<Row, Insert, Update, TContext>, Row> {\n select<\n T = Row,\n const TColumns extends AthenaSelectInput = string,\n >(\n columns?: SelectColumnsFor<Row, TColumns>,\n options?: AthenaGatewayCallOptions,\n ): SelectChain<Row, T>\n findMany<const TSelect extends AthenaSelectShape>(\n options: AthenaFindManyOptions<Row, TSelect> & {\n select: AthenaValidatedSelectShape<Row, TSelect>\n },\n ): Promise<AthenaResult<Array<AthenaFindManyResult<Row, TSelect, TContext>>>>\n insert(values: Insert, options?: AthenaGatewayCallOptions): MutationQuery<Row, Row>\n insert(values: Insert[], options?: AthenaGatewayCallOptions): MutationQuery<Row[], Row>\n upsert(\n values: Insert,\n options?: AthenaGatewayCallOptions & {\n updateBody?: Update\n onConflict?: ResolvedFilterColumnKey<Row> | Array<ResolvedFilterColumnKey<Row>> | (string & {}) | Array<string & {}>\n },\n ): MutationQuery<Row, Row>\n upsert(\n values: Insert[],\n options?: AthenaGatewayCallOptions & {\n updateBody?: Update\n onConflict?: ResolvedFilterColumnKey<Row> | Array<ResolvedFilterColumnKey<Row>> | (string & {}) | Array<string & {}>\n },\n ): MutationQuery<Row[], Row>\n update(values: Update, options?: AthenaGatewayCallOptions): UpdateChain<Row>\n delete(options?: AthenaGatewayCallOptions & { resourceId?: string }): MutationQuery<Row | null, Row>\n single<\n T = Row,\n const TColumns extends AthenaSelectInput = string,\n >(\n columns?: SelectColumnsFor<Row, TColumns>,\n options?: AthenaGatewayCallOptions,\n ): Promise<AthenaResult<T | null>>\n maybeSingle<\n T = Row,\n const TColumns extends AthenaSelectInput = string,\n >(\n columns?: SelectColumnsFor<Row, TColumns>,\n options?: AthenaGatewayCallOptions,\n ): Promise<AthenaResult<T | null>>\n reset(): TableQueryBuilder<Row, Insert, Update, TContext>\n}\n\nfunction getResourceId(state: TableBuilderState): string | undefined {\n const candidate = state.conditions.find(\n condition =>\n condition.operator === 'eq' &&\n (condition.column === 'resource_id' || condition.column === 'id'),\n )\n return candidate?.value?.toString()\n}\n\nfunction stringifyFilterValue(value: AthenaConditionValue | AthenaConditionArrayValue | string): string {\n if (Array.isArray(value)) {\n return value.join(',')\n }\n return String(value)\n}\n\nfunction createFilterMethods<Self, Row>(\n state: TableBuilderState,\n addCondition: (\n operator: AthenaConditionOperator,\n column?: string,\n value?: AthenaConditionValue | AthenaConditionArrayValue | string,\n hints?: ConditionCastHints,\n ) => void,\n self: Self,\n): FilterChain<Self, Row> {\n return {\n eq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n const columnName = String(column)\n if (shouldUseUuidTextComparison(columnName, value)) {\n addCondition('eq', columnName, value, { columnCast: 'text' })\n } else {\n addCondition('eq', columnName, value)\n }\n return self\n },\n eqCast(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue, cast: AthenaConditionCastType) {\n addCondition('eq', String(column), value, { valueCast: cast })\n return self\n },\n eqUuid(column: ResolvedFilterColumnKey<Row>, value: string) {\n addCondition('eq', String(column), value, { valueCast: 'uuid' })\n return self\n },\n match(filters: Partial<Record<ResolvedFilterColumnKey<Row>, AthenaConditionValue>>) {\n Object.entries(filters as Record<string, AthenaConditionValue | undefined>).forEach(([column, value]) => {\n if (value === undefined) {\n return\n }\n if (shouldUseUuidTextComparison(column, value)) {\n addCondition('eq', column, value, { columnCast: 'text' })\n } else {\n addCondition('eq', column, value)\n }\n })\n return self\n },\n range(from: number, to: number) {\n state.offset = from\n state.limit = to - from + 1\n return self\n },\n limit(count: number) {\n state.limit = count\n return self\n },\n offset(count: number) {\n state.offset = count\n return self\n },\n currentPage(value: number) {\n state.currentPage = value\n return self\n },\n pageSize(value: number) {\n state.pageSize = value\n return self\n },\n totalPages(value: number) {\n state.totalPages = value\n return self\n },\n order(column: ResolvedFilterColumnKey<Row>, options?: OrderOptions) {\n state.order = {\n field: String(column),\n direction: options?.ascending === false ? 'descending' : 'ascending',\n }\n return self\n },\n gt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n addCondition('gt', String(column), value)\n return self\n },\n gte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n addCondition('gte', String(column), value)\n return self\n },\n lt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n addCondition('lt', String(column), value)\n return self\n },\n lte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n addCondition('lte', String(column), value)\n return self\n },\n neq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n addCondition('neq', String(column), value)\n return self\n },\n like(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n addCondition('like', String(column), value)\n return self\n },\n ilike(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n addCondition('ilike', String(column), value)\n return self\n },\n is(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n addCondition('is', String(column), value)\n return self\n },\n in(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\n addCondition('in', String(column), values)\n return self\n },\n contains(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\n addCondition('contains', String(column), values)\n return self\n },\n containedBy(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\n addCondition('containedBy', String(column), values)\n return self\n },\n not(\n columnOrExpression: ResolvedFilterColumnKey<Row> | string,\n operator?: AthenaConditionOperator,\n value?: AthenaConditionValue,\n ) {\n const expression = String(columnOrExpression)\n if (operator != null && value !== undefined) {\n addCondition('not', undefined, `${expression}.${operator}.${stringifyFilterValue(value)}`)\n } else {\n addCondition('not', undefined, expression)\n }\n return self\n },\n or(expression: string) {\n addCondition('or', undefined, expression)\n return self\n },\n }\n}\n\nfunction toRpcSelect(columns?: AthenaSelectInput) {\n if (!columns) return undefined\n if (typeof columns === 'string') {\n return columns\n }\n return columns.join(',')\n}\n\nfunction createRpcFilterMethods<Self>(\n filters: AthenaRpcFilter[],\n self: Self,\n) {\n const addFilter = (\n operator: AthenaRpcFilterOperator,\n column: string,\n value: AthenaConditionValue | AthenaConditionArrayValue | string,\n ) => {\n filters.push({ column, operator, value })\n }\n\n return {\n eq(column: string, value: AthenaConditionValue) {\n addFilter('eq', column, value)\n return self\n },\n neq(column: string, value: AthenaConditionValue) {\n addFilter('neq', column, value)\n return self\n },\n gt(column: string, value: AthenaConditionValue) {\n addFilter('gt', column, value)\n return self\n },\n gte(column: string, value: AthenaConditionValue) {\n addFilter('gte', column, value)\n return self\n },\n lt(column: string, value: AthenaConditionValue) {\n addFilter('lt', column, value)\n return self\n },\n lte(column: string, value: AthenaConditionValue) {\n addFilter('lte', column, value)\n return self\n },\n like(column: string, value: AthenaConditionValue) {\n addFilter('like', column, value)\n return self\n },\n ilike(column: string, value: AthenaConditionValue) {\n addFilter('ilike', column, value)\n return self\n },\n is(column: string, value: AthenaConditionValue) {\n addFilter('is', column, value)\n return self\n },\n in(column: string, values: AthenaConditionArrayValue) {\n addFilter('in', column, values)\n return self\n },\n }\n}\n\nfunction createRpcBuilder<Row>(\n functionName: string,\n args: AthenaJsonObject | undefined,\n baseOptions: AthenaRpcCallOptions | undefined,\n client: ReturnType<typeof createAthenaGatewayClient>,\n formatGatewayResult: AthenaResultFormatter,\n tracer?: AthenaQueryTracer,\n initialCallsite?: AthenaQueryTraceCallsite | null,\n debugAstEnabled = false,\n): RpcQueryBuilder<Row> {\n const state: {\n filters: AthenaRpcFilter[]\n limit?: number\n offset?: number\n order?: { column: string; ascending?: boolean }\n } = {\n filters: [],\n }\n\n let selectedColumns: AthenaSelectInput | undefined\n let selectedOptions: AthenaRpcCallOptions | undefined\n let promise: Promise<AthenaResult<Row[]>> | null = null\n const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite)\n\n const executeRpc = async <SelectedRow = Row>(\n columns?: AthenaSelectInput,\n options?: AthenaRpcCallOptions,\n callsite?: AthenaQueryTraceCallsite | null,\n ): Promise<AthenaResult<SelectedRow[]>> => {\n const mergedOptions = mergeOptions(baseOptions, options)\n const normalizedSelectedColumns = normalizeSelectColumnsInput(columns)\n const payload: AthenaRpcPayload = {\n function: functionName,\n args,\n schema: mergedOptions?.schema,\n select: toRpcSelect(columns),\n filters: state.filters.length ? [...state.filters] : undefined,\n count: mergedOptions?.count,\n head: mergedOptions?.head,\n limit: state.limit,\n offset: state.offset,\n order: state.order,\n }\n const endpoint: AthenaQueryTraceEvent['endpoint'] = mergedOptions?.get\n ? `/rpc/${functionName}`\n : '/gateway/rpc'\n const sql = buildRpcDebugSql(payload)\n const debugAst = debugAstEnabled\n ? buildRpcDebugAst({\n functionName,\n args,\n selectedColumns: normalizedSelectedColumns,\n state,\n payload,\n endpoint,\n })\n : undefined\n return executeWithQueryTrace(\n tracer,\n {\n operation: 'rpc',\n endpoint,\n functionName,\n sql,\n payload,\n ast: debugAst,\n options: mergedOptions,\n },\n async () => {\n const response = await client.rpcGateway<SelectedRow[]>(payload, mergedOptions)\n return formatGatewayResult(response, { operation: 'rpc' })\n },\n callsite,\n )\n }\n\n const run = (\n columns?: AthenaSelectInput,\n options?: AthenaRpcCallOptions,\n callsite?: AthenaQueryTraceCallsite | null,\n ) => {\n const payloadColumns = columns ?? selectedColumns\n const payloadOptions = options ?? selectedOptions\n if (!promise) {\n promise = executeRpc<Row>(payloadColumns, payloadOptions, callsiteStore.resolve(callsite))\n }\n return promise\n }\n\n const builder = {} as RpcQueryBuilder<Row>\n const filterMethods = createRpcFilterMethods(state.filters, builder)\n\n Object.assign(builder, filterMethods, {\n select(columns?: AthenaSelectInput, options?: AthenaRpcCallOptions) {\n selectedColumns = columns\n selectedOptions = options ?? selectedOptions\n return run(columns, options, captureTraceCallsite(tracer))\n },\n async single<T = Row>(columns?: AthenaSelectInput, options?: AthenaRpcCallOptions) {\n const result = await run(columns, options, captureTraceCallsite(tracer))\n return toSingleResult(result) as AthenaResult<T | null>\n },\n maybeSingle<T = Row>(columns?: AthenaSelectInput, options?: AthenaRpcCallOptions) {\n return builder.single<T, AthenaSelectInput>(columns, options)\n },\n order(column: string, options?: RpcOrderOptions) {\n state.order = { column, ascending: options?.ascending ?? true }\n return builder\n },\n limit(count: number) {\n state.limit = count\n return builder\n },\n offset(count: number) {\n state.offset = count\n return builder\n },\n range(from: number, to: number) {\n state.offset = from\n state.limit = to - from + 1\n return builder\n },\n then<T1 = AthenaResult<Row[]>, T2 = never>(\n onfulfilled?: (v: AthenaResult<Row[]>) => T1 | PromiseLike<T1>,\n onrejected?: (reason: unknown) => T2 | PromiseLike<T2>,\n ) {\n return run(selectedColumns, selectedOptions).then(onfulfilled, onrejected)\n },\n catch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\n return run(selectedColumns, selectedOptions).catch(onrejected)\n },\n finally(onfinally?: () => void) {\n return run(selectedColumns, selectedOptions).finally(onfinally)\n },\n })\n\n return builder\n}\n\nfunction createTableBuilder<\n Row,\n Insert = Partial<Row>,\n Update = Partial<Insert>,\n TContext = unknown,\n>(\n tableName: string,\n client: ReturnType<typeof createAthenaGatewayClient>,\n formatGatewayResult: AthenaResultFormatter,\n tracer?: AthenaQueryTracer,\n behavior?: InternalClientBehaviorOptions,\n): TableQueryBuilder<Row, Insert, Update, TContext> {\n const state: TableBuilderState = {\n conditions: [],\n }\n const debugAstEnabled = Boolean(behavior?.debugAst)\n\n const addCondition = (\n operator: AthenaConditionOperator,\n column?: string,\n value?: AthenaConditionValue | AthenaConditionArrayValue | string,\n hints?: ConditionCastHints,\n ) => {\n const condition: AthenaGatewayCondition = { operator }\n if (column) {\n condition.column = column\n if (operator === 'eq') {\n // include legacy gateway shape for compatibility\n condition.eq_column = column\n }\n }\n if (value !== undefined) {\n condition.value = value\n if (operator === 'eq') {\n condition.eq_value = value\n }\n }\n if (hints?.valueCast) {\n condition.value_cast = hints.valueCast\n if (operator === 'eq') {\n condition.eq_value_cast = hints.valueCast\n }\n }\n if (hints?.columnCast) {\n condition.column_cast = hints.columnCast\n if (operator === 'eq') {\n condition.eq_column_cast = hints.columnCast\n }\n }\n state.conditions.push(condition)\n }\n\n const snapshotState = (): TableBuilderState => ({\n conditions: state.conditions.map(condition => ({ ...condition })),\n limit: state.limit,\n offset: state.offset,\n order: state.order ? { ...state.order } : undefined,\n currentPage: state.currentPage,\n pageSize: state.pageSize,\n totalPages: state.totalPages,\n })\n\n const builder = {} as TableQueryBuilder<Row, Insert, Update, TContext>\n\n const filterMethods = createFilterMethods<TableQueryBuilder<Row, Insert, Update, TContext>, Row>(\n state,\n addCondition,\n builder,\n )\n\n const runSelect = async <T = Row>(\n columns: AthenaSelectInput = DEFAULT_COLUMNS,\n options?: AthenaGatewayCallOptions,\n executionState: TableBuilderState = snapshotState(),\n callsite?: AthenaQueryTraceCallsite | null,\n debugAstFactory?: SelectDebugAstFactory,\n ) => {\n const runtimeColumns = normalizeSelectColumnsInput(columns) ?? DEFAULT_COLUMNS\n const resolvedTableName = resolveTableNameForCall(tableName, options?.schema)\n const plan = createSelectTransportPlan({\n tableName: resolvedTableName,\n columns: runtimeColumns,\n state: executionState,\n options,\n buildTypedSelectQuery,\n })\n const debugAst = debugAstEnabled\n ? (debugAstFactory?.({\n tableName: resolvedTableName,\n columns: runtimeColumns,\n executionState,\n plan,\n }) ?? buildSelectDebugAst({\n tableName: resolvedTableName,\n columns: runtimeColumns,\n state: executionState,\n plan,\n }))\n : undefined\n\n if (plan.kind === 'query') {\n return executeRead(behavior, () =>\n executeWithQueryTrace(\n tracer,\n {\n operation: 'select',\n endpoint: '/gateway/query',\n table: resolvedTableName,\n sql: plan.query,\n payload: plan.payload,\n ast: debugAst,\n options,\n },\n async () => {\n const queryResponse = await client.queryGateway<T>(plan.payload, options)\n return formatGatewayResult(queryResponse, { table: resolvedTableName, operation: 'select' })\n },\n callsite,\n ),\n )\n }\n\n const sql = buildDebugSelectQuery({\n tableName: resolvedTableName,\n ...plan.debug,\n })\n return executeRead(behavior, () =>\n executeWithQueryTrace(\n tracer,\n {\n operation: 'select',\n endpoint: '/gateway/fetch',\n table: resolvedTableName,\n sql,\n payload: plan.payload,\n ast: debugAst,\n options,\n },\n async () => {\n const response = await client.fetchGateway<T>(plan.payload, options)\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'select' })\n },\n callsite,\n ),\n )\n }\n\n const createSelectChain = <SelectedRow>(\n columns: AthenaSelectInput,\n options?: AthenaGatewayCallOptions,\n initialCallsite?: AthenaQueryTraceCallsite | null,\n ): SelectChain<Row, SelectedRow> => {\n const chain = {} as SelectChain<Row, SelectedRow>\n const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite)\n const filterMethods = createFilterMethods<SelectChain<Row, SelectedRow>, Row>(\n state,\n addCondition,\n chain,\n )\n Object.assign(chain, filterMethods, {\n async single<T = SelectedRow>(cols?: AthenaSelectInput, opts?: AthenaGatewayCallOptions) {\n const r = await runSelect<T[]>(\n cols ?? columns,\n opts ?? options,\n snapshotState(),\n callsiteStore.resolve(captureTraceCallsite(tracer)),\n )\n return toSingleResult(r)\n },\n maybeSingle<T = SelectedRow>(cols?: AthenaSelectInput, opts?: AthenaGatewayCallOptions) {\n return chain.single<T, AthenaSelectInput>(cols, opts)\n },\n then<T1 = AthenaResult<SelectedRow[]>, T2 = never>(\n onfulfilled?: (v: AthenaResult<SelectedRow[]>) => T1 | PromiseLike<T1>,\n onrejected?: (reason: unknown) => T2 | PromiseLike<T2>,\n ) {\n return runSelect<SelectedRow[]>(\n columns,\n options,\n snapshotState(),\n callsiteStore.resolve(),\n ).then(onfulfilled, onrejected)\n },\n catch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\n return runSelect<SelectedRow[]>(columns, options, snapshotState(), callsiteStore.resolve()).catch(\n onrejected,\n )\n },\n finally(onfinally?: () => void) {\n return runSelect<SelectedRow[]>(columns, options, snapshotState(), callsiteStore.resolve()).finally(\n onfinally,\n )\n },\n })\n return chain\n }\n\n Object.assign(builder, filterMethods, {\n reset() {\n state.conditions = []\n state.limit = undefined\n state.offset = undefined\n state.order = undefined\n state.currentPage = undefined\n state.pageSize = undefined\n state.totalPages = undefined\n return builder\n },\n select<T = Row>(columns: AthenaSelectInput = DEFAULT_COLUMNS, options?: AthenaGatewayCallOptions) {\n return createSelectChain<T>(columns, options, captureTraceCallsite(tracer))\n },\n async findMany<const TSelect extends AthenaSelectShape>(\n options: AthenaFindManyOptions<Row, TSelect> & {\n select: AthenaValidatedSelectShape<Row, TSelect>\n },\n ) {\n const columns = compileSelectShape(options.select)\n const baseState = snapshotState()\n const executionState = snapshotState()\n const callsite = captureTraceCallsite(tracer)\n const compiledWhere = compileWhere(options.where)\n if (compiledWhere?.length) {\n executionState.conditions.push(...compiledWhere)\n }\n if (options.orderBy !== undefined) {\n executionState.order = compileOrderBy<Row>(options.orderBy)\n }\n if (options.limit !== undefined) {\n executionState.limit = options.limit\n }\n if (\n behavior?.findManyAst &&\n canUseFindManyAstTransport(baseState) &&\n !selectShapeUsesRelationSchema(options.select) &&\n !findManyAstWhereRequiresLegacyTransport(options.where)\n ) {\n const resolvedTableName = resolveTableNameForCall(tableName, undefined)\n const payload: AthenaFindManyAstPayload<Row, TSelect> = {\n table_name: resolvedTableName,\n select: options.select,\n }\n if (options.where !== undefined) {\n payload.where = normalizeFindManyAstWhere(options.where)\n }\n const astOrder = toFindManyAstOrder<Row>(executionState.order)\n if (astOrder !== undefined) {\n payload.orderBy = astOrder\n }\n if (executionState.limit !== undefined) {\n payload.limit = executionState.limit\n }\n const sql = buildDebugSelectQuery({\n tableName: resolvedTableName,\n columns,\n conditions: executionState.conditions,\n limit: executionState.limit,\n order: executionState.order,\n })\n const debugAst = debugAstEnabled\n ? buildFindManyDirectDebugAst({\n tableName: resolvedTableName,\n options,\n compiledColumns: columns,\n baseState,\n executionState,\n payload,\n })\n : undefined\n return executeRead(behavior, () =>\n executeWithQueryTrace(\n tracer,\n {\n operation: 'select',\n endpoint: '/gateway/fetch',\n table: resolvedTableName,\n sql,\n payload,\n ast: debugAst,\n },\n async () => {\n const response = await client.fetchGateway<Array<AthenaFindManyResult<Row, TSelect, TContext>>>(\n payload,\n )\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'select' })\n },\n callsite,\n ),\n )\n }\n return runSelect<Array<AthenaFindManyResult<Row, TSelect, TContext>>>(\n columns,\n undefined,\n executionState,\n callsite,\n debugAstEnabled\n ? ({ tableName: resolvedTableName, executionState: tracedState, plan }) =>\n buildFindManyCompiledDebugAst({\n tableName: resolvedTableName,\n options,\n compiledColumns: columns,\n baseState,\n executionState: tracedState,\n plan,\n })\n : undefined,\n )\n },\n insert(values: Insert | Insert[], options?: AthenaGatewayCallOptions) {\n const mutationCallsite = captureTraceCallsite(tracer)\n if (Array.isArray(values)) {\n const executeInsertMany = async (\n columns?: string | string[],\n selectOptions?: AthenaGatewayCallOptions,\n callsite?: AthenaQueryTraceCallsite | null,\n ) => {\n const mergedOptions = mergeOptions(options, selectOptions)\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\n const payload: AthenaInsertPayload = {\n table_name: resolvedTableName,\n insert_body: asAthenaJsonObjectArray(values),\n }\n if (columns) payload.columns = columns\n if (mergedOptions?.count) payload.count = mergedOptions.count\n if (mergedOptions?.head) payload.head = mergedOptions.head\n if (mergedOptions?.defaultToNull !== undefined) {\n payload.default_to_null = mergedOptions.defaultToNull\n }\n const sql = buildInsertDebugSql(payload)\n const debugAst = debugAstEnabled ? buildInsertDebugAst(payload) : undefined\n return executeWithQueryTrace(\n tracer,\n {\n operation: 'insert',\n endpoint: '/gateway/insert',\n table: resolvedTableName,\n sql,\n payload,\n ast: debugAst,\n options: mergedOptions,\n },\n async () => {\n const response = await client.insertGateway<Row[]>(payload, mergedOptions)\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\n },\n callsite,\n )\n }\n return createMutationQuery<Row[]>(executeInsertMany, DEFAULT_COLUMNS, tracer, mutationCallsite)\n }\n const executeInsertOne = async (\n columns?: string | string[],\n selectOptions?: AthenaGatewayCallOptions,\n callsite?: AthenaQueryTraceCallsite | null,\n ) => {\n const mergedOptions = mergeOptions(options, selectOptions)\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\n const payload: AthenaInsertPayload = {\n table_name: resolvedTableName,\n insert_body: asAthenaJsonObject(values),\n }\n if (columns) payload.columns = columns\n if (mergedOptions?.count) payload.count = mergedOptions.count\n if (mergedOptions?.head) payload.head = mergedOptions.head\n if (mergedOptions?.defaultToNull !== undefined) {\n payload.default_to_null = mergedOptions.defaultToNull\n }\n const sql = buildInsertDebugSql(payload)\n const debugAst = debugAstEnabled ? buildInsertDebugAst(payload) : undefined\n return executeWithQueryTrace(\n tracer,\n {\n operation: 'insert',\n endpoint: '/gateway/insert',\n table: resolvedTableName,\n sql,\n payload,\n ast: debugAst,\n options: mergedOptions,\n },\n async () => {\n const response = await client.insertGateway<Row>(payload, mergedOptions)\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\n },\n callsite,\n )\n }\n return createMutationQuery<Row>(executeInsertOne, DEFAULT_COLUMNS, tracer, mutationCallsite)\n },\n upsert(\n values: Insert | Insert[],\n options?: AthenaGatewayCallOptions & { updateBody?: Update; onConflict?: string | string[] },\n ) {\n const mutationCallsite = captureTraceCallsite(tracer)\n if (Array.isArray(values)) {\n const executeUpsertMany = async (\n columns?: string | string[],\n selectOptions?: AthenaGatewayCallOptions,\n callsite?: AthenaQueryTraceCallsite | null,\n ) => {\n const mergedOptions = mergeOptions(options, selectOptions)\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\n const payload: AthenaInsertPayload = {\n table_name: resolvedTableName,\n insert_body: asAthenaJsonObjectArray(values),\n update_body: options?.updateBody ? asAthenaJsonObject(options.updateBody) : undefined,\n }\n if (columns) payload.columns = columns\n if (options?.onConflict) payload.on_conflict = options.onConflict\n if (mergedOptions?.count) payload.count = mergedOptions.count\n if (mergedOptions?.head) payload.head = mergedOptions.head\n if (mergedOptions?.defaultToNull !== undefined) {\n payload.default_to_null = mergedOptions.defaultToNull\n }\n const sql = buildInsertDebugSql(payload)\n const debugAst = debugAstEnabled ? buildUpsertDebugAst(payload) : undefined\n return executeWithQueryTrace(\n tracer,\n {\n operation: 'upsert',\n endpoint: '/gateway/insert',\n table: resolvedTableName,\n sql,\n payload,\n ast: debugAst,\n options: mergedOptions,\n },\n async () => {\n const response = await client.insertGateway<Row[]>(payload, mergedOptions)\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\n },\n callsite,\n )\n }\n return createMutationQuery<Row[]>(executeUpsertMany, DEFAULT_COLUMNS, tracer, mutationCallsite)\n }\n const executeUpsertOne = async (\n columns?: string | string[],\n selectOptions?: AthenaGatewayCallOptions,\n callsite?: AthenaQueryTraceCallsite | null,\n ) => {\n const mergedOptions = mergeOptions(options, selectOptions)\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\n const payload: AthenaInsertPayload = {\n table_name: resolvedTableName,\n insert_body: asAthenaJsonObject(values),\n update_body: options?.updateBody ? asAthenaJsonObject(options.updateBody) : undefined,\n }\n if (columns) payload.columns = columns\n if (options?.onConflict) payload.on_conflict = options.onConflict\n if (mergedOptions?.count) payload.count = mergedOptions.count\n if (mergedOptions?.head) payload.head = mergedOptions.head\n if (mergedOptions?.defaultToNull !== undefined) {\n payload.default_to_null = mergedOptions.defaultToNull\n }\n const sql = buildInsertDebugSql(payload)\n const debugAst = debugAstEnabled ? buildUpsertDebugAst(payload) : undefined\n return executeWithQueryTrace(\n tracer,\n {\n operation: 'upsert',\n endpoint: '/gateway/insert',\n table: resolvedTableName,\n sql,\n payload,\n ast: debugAst,\n options: mergedOptions,\n },\n async () => {\n const response = await client.insertGateway<Row>(payload, mergedOptions)\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\n },\n callsite,\n )\n }\n return createMutationQuery<Row>(executeUpsertOne, DEFAULT_COLUMNS, tracer, mutationCallsite)\n },\n update(values: Update, options?: AthenaGatewayCallOptions) {\n const mutationCallsite = captureTraceCallsite(tracer)\n const executeUpdate = async (\n columns?: string | string[],\n selectOptions?: AthenaGatewayCallOptions,\n callsite?: AthenaQueryTraceCallsite | null,\n ) => {\n const executionState = snapshotState()\n const filters = executionState.conditions.length ? [...executionState.conditions] : undefined\n const mergedOptions = mergeOptions(options, selectOptions)\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\n const payload: AthenaUpdatePayload = {\n table_name: resolvedTableName,\n update_body: asAthenaJsonObject(values),\n conditions: filters,\n strip_nulls: mergedOptions?.stripNulls ?? true,\n }\n if (executionState.order) payload.sort_by = executionState.order\n if (executionState.limit !== undefined) payload.limit = executionState.limit\n if (executionState.offset !== undefined) payload.offset = executionState.offset\n if (executionState.currentPage !== undefined) payload.current_page = executionState.currentPage\n if (executionState.pageSize !== undefined) payload.page_size = executionState.pageSize\n if (executionState.totalPages !== undefined) payload.total_pages = executionState.totalPages\n if (columns) payload.columns = columns\n const sql = buildUpdateDebugSql(payload)\n const debugAst = debugAstEnabled\n ? buildUpdateDebugAst({\n state: executionState,\n payload,\n })\n : undefined\n return executeWithQueryTrace(\n tracer,\n {\n operation: 'update',\n endpoint: '/gateway/update',\n table: resolvedTableName,\n sql,\n payload,\n ast: debugAst,\n options: mergedOptions,\n },\n async () => {\n const response = await client.updateGateway<Row[]>(payload, mergedOptions)\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'update' })\n },\n callsite,\n )\n }\n const mutation = createMutationQuery<Row[]>(executeUpdate, null, tracer, mutationCallsite)\n const updateChain = {} as UpdateChain<Row>\n const filterMethods = createFilterMethods<UpdateChain<Row>, Row>(state, addCondition, updateChain)\n Object.assign(updateChain, filterMethods, mutation)\n return updateChain\n },\n delete(options?: AthenaGatewayCallOptions & { resourceId?: string }) {\n const filters = state.conditions.length ? [...state.conditions] : undefined\n const resourceId = options?.resourceId ?? getResourceId(state)\n if (!resourceId && !filters?.length) {\n throw new Error('delete requires a resource_id either via eq(\"resource_id\", ...) or options.resourceId')\n }\n const mutationCallsite = captureTraceCallsite(tracer)\n const executeDelete = async (\n columns?: string | string[],\n selectOptions?: AthenaGatewayCallOptions,\n callsite?: AthenaQueryTraceCallsite | null,\n ) => {\n const executionState = snapshotState()\n const debugState: TableBuilderState = {\n ...executionState,\n conditions: filters ? filters.map(condition => ({ ...condition })) : [],\n }\n const mergedOptions = mergeOptions(options, selectOptions)\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\n const payload: AthenaDeletePayload = {\n table_name: resolvedTableName,\n resource_id: resourceId,\n conditions: filters,\n }\n if (executionState.order) payload.sort_by = executionState.order\n if (executionState.limit !== undefined) payload.limit = executionState.limit\n if (executionState.offset !== undefined) payload.offset = executionState.offset\n if (executionState.currentPage !== undefined) payload.current_page = executionState.currentPage\n if (executionState.pageSize !== undefined) payload.page_size = executionState.pageSize\n if (executionState.totalPages !== undefined) payload.total_pages = executionState.totalPages\n if (columns) payload.columns = columns\n const sql = buildDeleteDebugSql(payload)\n const debugAst = debugAstEnabled\n ? buildDeleteDebugAst({\n state: debugState,\n payload,\n })\n : undefined\n return executeWithQueryTrace(\n tracer,\n {\n operation: 'delete',\n endpoint: '/gateway/delete',\n table: resolvedTableName,\n sql,\n payload,\n ast: debugAst,\n options: mergedOptions,\n },\n async () => {\n const response = await client.deleteGateway<Row | null>(payload, mergedOptions)\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'delete' })\n },\n callsite,\n )\n }\n return createMutationQuery<Row | null>(executeDelete, null, tracer, mutationCallsite)\n },\n async single<T = Row>(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n const response = await runSelect<T[]>(\n columns ?? DEFAULT_COLUMNS,\n options,\n snapshotState(),\n captureTraceCallsite(tracer),\n )\n return toSingleResult(response)\n },\n async maybeSingle<T = Row>(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n return builder.single<T, AthenaSelectInput>(columns, options)\n },\n })\n\n return builder\n}\n\nfunction createQueryBuilder(\n client: ReturnType<typeof createAthenaGatewayClient>,\n formatGatewayResult: AthenaResultFormatter,\n behavior?: InternalClientBehaviorOptions,\n tracer?: AthenaQueryTracer,\n) {\n const debugAstEnabled = Boolean(behavior?.debugAst)\n return async function query<Row = unknown>(\n query: string,\n options?: AthenaGatewayCallOptions,\n ): Promise<AthenaResult<Row[]>> {\n const normalizedQuery = query.trim()\n if (!normalizedQuery) {\n throw new Error('query requires a non-empty string')\n }\n const params = options?.params\n const payload = {\n query: normalizedQuery,\n ...(Array.isArray(params) ? { params } : {}),\n }\n const callsite = captureTraceCallsite(tracer)\n return executeRead(behavior, () =>\n executeWithQueryTrace(\n tracer,\n {\n operation: 'query',\n endpoint: '/gateway/query',\n sql: normalizedQuery,\n payload,\n ast: debugAstEnabled ? buildRawQueryDebugAst(normalizedQuery) : undefined,\n options,\n },\n async () => {\n const response = await client.queryGateway<Row[]>(payload, options)\n return formatGatewayResult(response, { operation: 'query' })\n },\n callsite,\n ),\n )\n }\n}\n\nexport interface InternalAthenaClient<TModels = never> {\n from<TModel extends AthenaModelTarget>(\n model: TModel,\n ): TableQueryBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>>\n from<TTableName extends AthenaClientTableName<TModels>>(\n table: TTableName,\n options?: AthenaFromOptions,\n ): ClientTableQueryBuilder<TModels, TTableName>\n from<\n Row = AthenaRowShape,\n Insert = Partial<Row>,\n Update = Partial<Insert>,\n >(\n table: UntypedTableName<TModels>,\n options?: AthenaFromOptions,\n ): TableQueryBuilder<Row, Insert, Update>\n db: AthenaDbModule<TModels>\n auth: AthenaAuthBindings\n chat: AthenaChatModule\n storage: AthenaStorageModule\n rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\n fn: string,\n args?: Args,\n options?: AthenaRpcCallOptions,\n ): RpcQueryBuilder<Row>\n query<Row = unknown>(query: string, options?: AthenaGatewayCallOptions): Promise<AthenaResult<Row[]>>\n request<T = unknown>(options: AthenaRequestOptions): Promise<AthenaRequestResponse<T>>\n verifyConnection(options?: AthenaGatewayConnectionOptions): Promise<AthenaGatewayConnectionResult>\n}\n\nexport interface InternalClientChatOptions {\n wsUrl?: string | null | undefined\n webSocketFactory?: AthenaChatWebSocketFactory | null | undefined\n}\n\nexport type InternalClientAuthOptions = Omit<\n AthenaAuthClientConfig,\n 'baseUrl' | 'apiKey' | 'bearerToken' | 'cookie' | 'sessionToken'\n>\n\nexport interface InternalClientConfig<TModels extends AthenaClientModelsInput | never = never> {\n baseUrl: string\n apiKey: string\n client?: string | null | undefined\n /** Direct PostgreSQL URI forwarded as `x-pg-uri` on gateway requests. */\n pgUri?: string | null | undefined\n jdbcUrl?: string | null | undefined\n backend?: BackendConfig\n headers?: Record<string, string>\n auth?: InternalClientAuthOptions\n authUrl?: string\n chat?: InternalClientChatOptions\n chatUrl?: string\n chatWsUrl?: string\n storageUrl?: string\n storage?: AthenaStorageClientConfig\n behavior?: InternalClientBehaviorOptions\n models?: TModels\n /**\n * Optional prebuilt gateway transport (HTTP client, Cloudflare D1 local, or test fake).\n * When set, `createAthenaGatewayClient` is not constructed from baseUrl/apiKey.\n * @see ADR 0015\n */\n gatewayTransport?: AthenaGatewayClient\n}\n\nexport interface InternalClientRequestContext {\n headers?: Record<string, string>\n userId?: string | null\n organizationId?: string | null\n bearerToken?: string | null\n cookie?: string | null\n sessionToken?: string | null\n forceNoCache?: boolean\n}\n\nexport type InternalClientContextResolver = () =>\n | InternalClientRequestContext\n | undefined\n | Promise<InternalClientRequestContext | undefined>\n\nexport interface InternalAthenaClientCore<\n TModels extends AthenaClientModelsInput | never = never,\n> {\n readonly config: InternalClientConfig<TModels>\n readonly gatewayTransport: AthenaGatewayClient\n readonly formatGatewayResult: AthenaResultFormatter\n readonly queryTracer: AthenaQueryTracer | undefined\n readonly normalizedAuthConfig: AthenaAuthClientConfig | undefined\n}\n\nfunction buildContextHeaders(\n context: InternalClientRequestContext,\n): Record<string, string> | undefined {\n const headers: Record<string, string> = {}\n if (context.userId != null) {\n headers['X-User-Id'] = context.userId\n }\n if (context.organizationId != null) {\n headers['X-Organization-Id'] = context.organizationId\n }\n Object.assign(headers, context.headers)\n return Object.keys(headers).length > 0 ? headers : undefined\n}\n\nfunction normalizeAuthClientConfig(\n auth: InternalClientAuthOptions | undefined,\n defaultBaseUrl?: string,\n): AthenaAuthClientConfig | undefined {\n if (!auth && defaultBaseUrl === undefined) {\n return undefined\n }\n\n const normalized: AthenaAuthClientConfig = {\n ...(auth ?? {}),\n }\n const resolvedBaseUrl = defaultBaseUrl\n ? normalizeAthenaGatewayBaseUrl(defaultBaseUrl, { label: 'Athena auth base URL' })\n : undefined\n\n if (resolvedBaseUrl !== undefined) {\n normalized.baseUrl = resolvedBaseUrl\n }\n return normalized\n}\n\nexport function createInternalClientCore<\n TModels extends AthenaClientModelsInput | never = never,\n>(\n config: InternalClientConfig<TModels>,\n): InternalAthenaClientCore<TModels> {\n const normalizedAuthConfig = normalizeAuthClientConfig(config.auth, config.authUrl)\n const gatewayTransport =\n config.gatewayTransport ??\n createAthenaGatewayClient({\n baseUrl: config.baseUrl,\n apiKey: config.apiKey,\n client: config.client ?? undefined,\n pgUri: config.pgUri,\n jdbcUrl: config.jdbcUrl,\n backend: config.backend,\n headers: config.headers,\n })\n return Object.freeze({\n config,\n gatewayTransport,\n formatGatewayResult: createResultFormatter(),\n queryTracer: createQueryTracer(config.behavior),\n normalizedAuthConfig,\n })\n}\n\nexport function createInternalClientView<\n TModels extends AthenaClientModelsInput | never = never,\n>(\n core: InternalAthenaClientCore<TModels>,\n resolveContext: InternalClientContextResolver,\n): InternalAthenaClient<TModels> {\n const { config, formatGatewayResult, normalizedAuthConfig, queryTracer } = core\n const gateway = createAthenaGatewayClientView(core.gatewayTransport, async () => {\n const context = await resolveContext()\n return context\n ? {\n headers: context.headers,\n userId: context.userId,\n organizationId: context.organizationId,\n bearerToken: context.bearerToken,\n cookie: context.cookie,\n sessionToken: context.sessionToken,\n forceNoCache: context.forceNoCache,\n }\n : undefined\n })\n const auth = createAuthModule({\n ...(normalizedAuthConfig ?? {}),\n }, {\n async resolveCallOptions() {\n const context = await resolveContext()\n return context\n ? {\n headers: buildContextHeaders(context),\n bearerToken: context.bearerToken ?? undefined,\n cookie: context.cookie ?? undefined,\n sessionToken: context.sessionToken ?? undefined,\n forceNoCache: context.forceNoCache,\n }\n : undefined\n },\n })\n function from<TModel extends AthenaModelTarget>(\n model: TModel,\n ): TableQueryBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>>\n function from<TTableName extends AthenaClientTableName<TModels>>(\n table: TTableName,\n options?: AthenaFromOptions,\n ): ClientTableQueryBuilder<TModels, TTableName>\n function from<\n Row = AthenaRowShape,\n Insert = Partial<Row>,\n Update = Partial<Insert>,\n >(\n table: UntypedTableName<TModels>,\n options?: AthenaFromOptions,\n ): TableQueryBuilder<Row, Insert, Update>\n function from<\n Row = AthenaRowShape,\n Insert = Partial<Row>,\n Update = Partial<Insert>,\n >(\n tableOrModel: string | AthenaModelTarget<Row, Insert, Update>,\n options?: AthenaFromOptions,\n ): TableQueryBuilder<Row, Insert, Update> {\n if (isAthenaModelTarget(tableOrModel)) {\n if (options?.schema !== undefined) {\n throw new Error(\n 'from(model) does not accept a schema override because the model already defines its target.',\n )\n }\n return createTableBuilder<Row, Insert, Update>(\n resolveAthenaModelTargetTableName(tableOrModel),\n gateway,\n formatGatewayResult,\n queryTracer,\n config.behavior,\n )\n }\n\n const resolvedTableName = resolveTableNameForCall(tableOrModel as string, options?.schema)\n return createTableBuilder<Row, Insert, Update>(\n resolvedTableName,\n gateway,\n formatGatewayResult,\n queryTracer,\n config.behavior,\n )\n }\n const rpc: InternalAthenaClient<TModels>['rpc'] = <Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\n fn: string,\n args?: Args,\n options?: AthenaRpcCallOptions,\n ) => {\n const normalizedFn = fn.trim()\n if (!normalizedFn) {\n throw new Error('rpc requires a function name')\n }\n return createRpcBuilder<Row>(\n normalizedFn,\n args as AthenaJsonObject | undefined,\n options,\n gateway,\n formatGatewayResult,\n queryTracer,\n captureTraceCallsite(queryTracer),\n Boolean(config.behavior?.debugAst),\n )\n }\n const query = createQueryBuilder(\n gateway,\n formatGatewayResult,\n config.behavior,\n queryTracer,\n ) as InternalAthenaClient<TModels>['query']\n const untypedDbFrom = from as unknown as AthenaDbModule['from']\n const db = {\n from,\n select<Row = AthenaRowShape>(\n table: string,\n first?: AthenaGatewayCallOptions | AthenaSelectInput,\n second?: AthenaGatewayCallOptions,\n ) {\n if (first && typeof first === 'object' && !Array.isArray(first)) {\n return untypedDbFrom<Row>(table).select(undefined, first as AthenaGatewayCallOptions)\n }\n return untypedDbFrom<Row>(table).select(first, second)\n },\n insert<Row = AthenaRowShape, Insert = Partial<Row>>(\n table: string,\n values: Insert | Insert[],\n options?: AthenaGatewayCallOptions,\n ) {\n return Array.isArray(values)\n ? untypedDbFrom<Row, Insert, Partial<Insert>>(table).insert(values, options)\n : untypedDbFrom<Row, Insert, Partial<Insert>>(table).insert(values, options)\n },\n upsert<Row = AthenaRowShape, Insert = Partial<Row>, Update = Partial<Insert>>(\n table: string,\n values: Insert | Insert[],\n options?: AthenaGatewayCallOptions & {\n updateBody?: Update\n onConflict?: string | string[]\n },\n ) {\n return Array.isArray(values)\n ? untypedDbFrom<Row, Insert, Update>(table).upsert(values, options)\n : untypedDbFrom<Row, Insert, Update>(table).upsert(values, options)\n },\n update<Row = AthenaRowShape, Insert = Partial<Row>, Update = Partial<Insert>>(\n table: string,\n values: Update,\n options?: AthenaGatewayCallOptions,\n ) {\n return untypedDbFrom<Row, Insert, Update>(table).update(values, options)\n },\n delete<Row = AthenaRowShape>(\n table: string,\n options?: AthenaGatewayCallOptions & { resourceId?: string },\n ) {\n return untypedDbFrom<Row>(table).delete(options)\n },\n rpc,\n query,\n } as AthenaDbModule<TModels>\n const chat = createChatModule({\n baseUrl: config.chatUrl,\n apiKey: config.apiKey,\n client: config.client ?? undefined,\n headers: config.headers,\n wsUrl: config.chatWsUrl,\n webSocketFactory: config.chat?.webSocketFactory ?? undefined,\n }, {\n async resolveCallOptions() {\n const context = await resolveContext()\n return context\n ? {\n headers: buildContextHeaders(context),\n bearerToken: context.bearerToken,\n cookie: context.cookie,\n sessionToken: context.sessionToken,\n forceNoCache: context.forceNoCache,\n }\n : undefined\n },\n })\n const request = createAthenaRequest(config, resolveContext)\n const storage = createStorageModule(gateway, {\n ...config.storage,\n ...(config.storageUrl\n ? {\n baseUrl: config.storageUrl,\n stripBasePath: true,\n }\n : {}),\n })\n\n return {\n from,\n db,\n rpc,\n query,\n request,\n verifyConnection: gateway.verifyConnection,\n auth: auth.auth,\n chat,\n storage,\n } as InternalAthenaClient<TModels>\n}\n","export type AthenaService = 'db' | 'auth' | 'chat' | 'storage' | 'billing'\n\nexport type AthenaConfigurationErrorCode =\n | 'ATHENA_NO_SERVICE_CONFIGURED'\n | 'ATHENA_SERVICE_NOT_CONFIGURED'\n | 'ATHENA_API_KEY_REQUIRED'\n | 'ATHENA_INVALID_URL'\n | 'ATHENA_NEXT_SERVER_RUNTIME_REQUIRED'\n\n/**\n * Structured configuration failure raised during client construction or\n * unavailable-service access. Distinct from transport/auth/gateway errors.\n */\nexport class AthenaConfigurationError extends Error {\n readonly code: AthenaConfigurationErrorCode\n readonly service?: AthenaService\n\n constructor(\n code: AthenaConfigurationErrorCode,\n message: string,\n service?: AthenaService,\n ) {\n super(message)\n this.name = 'AthenaConfigurationError'\n this.code = code\n this.service = service\n }\n}\n","/**\n * Pure edge vs gateway execution resolution (no client construction).\n * Used by {@link createClient} and re-exported from the cloudflare façade.\n */\n\nimport { AthenaConfigurationError } from '../config/errors.ts'\nimport type { D1DatabaseLike } from './types.ts'\n\n/** How DB/storage execution is routed. */\nexport type AthenaExecutionMode = 'gateway' | 'edge' | 'auto'\n\n/** Resolved mode after applying config + env (never `auto`). */\nexport type AthenaResolvedExecutionMode = 'gateway' | 'edge'\n\n/** Env key used when `mode` is omitted or `'auto'`. */\nexport const ATHENA_EXECUTION_MODE_ENV_KEY = 'ATHENA_EXECUTION_MODE'\n\n/**\n * When both D1 and a gateway URL are available in `auto` mode, which backend wins.\n * Default: `edge` (prefer local bindings when present).\n */\nexport type AthenaExecutionPrefer = 'edge' | 'gateway'\n\nexport const ATHENA_EXECUTION_PREFER_ENV_KEY = 'ATHENA_EXECUTION_PREFER'\n\nconst MODE_ALIASES: Record<string, AthenaExecutionMode> = {\n gateway: 'gateway',\n server: 'gateway',\n remote: 'gateway',\n http: 'gateway',\n edge: 'edge',\n cloudflare: 'edge',\n 'cloudflare-edge': 'edge',\n d1: 'edge',\n local: 'edge',\n auto: 'auto',\n}\n\nexport interface ResolveAthenaExecutionModeInput {\n /** Explicit mode. Default: `'auto'` (or env `ATHENA_EXECUTION_MODE`). */\n mode?: AthenaExecutionMode | string | null\n /** D1 binding when present enables edge in auto mode. */\n d1?: D1DatabaseLike | null\n /** Gateway base URL (or unified root) for server mode. */\n url?: string | null\n /** Optional env map; also used when reading `ATHENA_EXECUTION_MODE`. */\n env?: Record<string, string | undefined>\n /**\n * When `mode` is `auto` and **both** D1 and a gateway URL exist, pick a winner.\n * Default `edge`. Override with `prefer: 'gateway'` or env `ATHENA_EXECUTION_PREFER`.\n */\n prefer?: AthenaExecutionPrefer | string | null\n}\n\nfunction normalizeOptional(value: string | null | undefined): string | undefined {\n const trimmed = value?.trim()\n return trimmed || undefined\n}\n\nfunction normalizeModeString(\n value: string | null | undefined,\n): AthenaExecutionMode | undefined {\n if (value == null) return undefined\n const key = value.trim().toLowerCase()\n if (!key) return undefined\n const mapped = MODE_ALIASES[key]\n if (!mapped) {\n throw new AthenaConfigurationError(\n 'ATHENA_NO_SERVICE_CONFIGURED',\n `Unknown Athena execution mode \"${value}\". Use gateway | edge | auto (aliases: server, remote, cloudflare, d1).`,\n 'db',\n )\n }\n return mapped\n}\n\nfunction isD1Binding(value: unknown): value is D1DatabaseLike {\n return Boolean(\n value &&\n typeof value === 'object' &&\n typeof (value as D1DatabaseLike).prepare === 'function',\n )\n}\n\n/**\n * Gateway URL keys accepted by resolveCore / createClient for the DB service.\n * Keep this list aligned with `ENV_URL_KEYS` + `ENV_DB_URL_KEYS` in v3-client.\n */\nconst GATEWAY_URL_ENV_KEYS = [\n 'ATHENA_URL',\n 'NEXT_PUBLIC_ATHENA_URL',\n 'ATHENA_DB_URL',\n 'ATHENA_GATEWAY_URL',\n 'NEXT_PUBLIC_ATHENA_DB_API_URL',\n] as const\n\nfunction resolveGatewayUrl(\n url: string | null | undefined,\n env: Record<string, string | undefined>,\n): string | undefined {\n if (normalizeOptional(url)) {\n return normalizeOptional(url)\n }\n for (const key of GATEWAY_URL_ENV_KEYS) {\n const value = normalizeOptional(env[key])\n if (value) return value\n }\n return undefined\n}\n\nfunction resolvePrefer(\n prefer: AthenaExecutionPrefer | string | null | undefined,\n env: Record<string, string | undefined>,\n): AthenaResolvedExecutionMode {\n const raw =\n normalizeOptional(typeof prefer === 'string' ? prefer : prefer ?? undefined) ??\n normalizeOptional(env[ATHENA_EXECUTION_PREFER_ENV_KEY]) ??\n 'edge'\n const key = raw.toLowerCase()\n if (key === 'gateway' || key === 'server' || key === 'remote' || key === 'http') {\n return 'gateway'\n }\n if (key === 'edge' || key === 'd1' || key === 'cloudflare' || key === 'local') {\n return 'edge'\n }\n throw new AthenaConfigurationError(\n 'ATHENA_NO_SERVICE_CONFIGURED',\n `Unknown Athena execution prefer \"${raw}\". Use edge | gateway.`,\n 'db',\n )\n}\n\n/**\n * Resolve whether to use gateway HTTP or edge D1/R2 bindings.\n *\n * Auto rules (after env override):\n * 1. Only D1 → `edge`\n * 2. Only gateway URL → `gateway`\n * 3. Both → `prefer` (default `edge`, or env `ATHENA_EXECUTION_PREFER`)\n * 4. Neither → throw {@link AthenaConfigurationError}\n */\nexport function resolveAthenaExecutionMode(\n input: ResolveAthenaExecutionModeInput = {},\n): AthenaResolvedExecutionMode {\n const env = input.env ?? {}\n const fromEnv = normalizeModeString(env[ATHENA_EXECUTION_MODE_ENV_KEY])\n const requested = normalizeModeString(input.mode) ?? fromEnv ?? 'auto'\n const url = resolveGatewayUrl(input.url, env)\n const hasD1 = isD1Binding(input.d1)\n const hasGateway = Boolean(url)\n\n if (requested === 'gateway') {\n if (!hasGateway) {\n throw new AthenaConfigurationError(\n 'ATHENA_NO_SERVICE_CONFIGURED',\n 'Athena execution mode is \"gateway\" but no url / ATHENA_URL / ATHENA_DB_URL / ATHENA_GATEWAY_URL was provided.',\n 'db',\n )\n }\n return 'gateway'\n }\n if (requested === 'edge') {\n if (!hasD1) {\n throw new AthenaConfigurationError(\n 'ATHENA_NO_SERVICE_CONFIGURED',\n 'Athena execution mode is \"edge\" but no D1 binding was provided (db.d1 / config.d1 / env.DB).',\n 'db',\n )\n }\n return 'edge'\n }\n\n // auto\n if (hasD1 && hasGateway) {\n return resolvePrefer(input.prefer, env)\n }\n if (hasD1) return 'edge'\n if (hasGateway) return 'gateway'\n\n throw new AthenaConfigurationError(\n 'ATHENA_NO_SERVICE_CONFIGURED',\n 'Cannot resolve Athena execution mode: provide mode \"gateway\" with url/key, mode \"edge\" with d1, or mode \"auto\" with either a D1 binding or a gateway URL (ATHENA_URL / ATHENA_DB_URL / ATHENA_GATEWAY_URL).',\n 'db',\n )\n}\n\nexport function isD1DatabaseBinding(value: unknown): value is D1DatabaseLike {\n return isD1Binding(value)\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","import type { AthenaRequestContext } from '../v3-client.ts'\n\n/**\n * Merge two request contexts with override precedence.\n * Nested headers are shallow-merged; later headers win on key collision.\n */\nexport function mergeAthenaRequestContexts(\n base: AthenaRequestContext | undefined,\n override: AthenaRequestContext | undefined,\n): AthenaRequestContext | undefined {\n if (!base && !override) return undefined\n\n return {\n ...base,\n ...override,\n headers:\n base?.headers || override?.headers\n ? {\n ...(base?.headers ?? {}),\n ...(override?.headers ?? {}),\n }\n : undefined,\n }\n}\n","/**\n * Resolve query diagnostics flags for {@link createClient}.\n *\n * Prefer `diagnostics: 'auto'` in Next/OpenNext apps so production builds stay\n * quiet without app-local OPENNEXT_BUILD branching.\n */\n\nimport type { AthenaQueryTraceOptions } from './client.ts'\n\nexport type AthenaDiagnosticsMode = boolean | 'auto'\n\nexport interface AthenaDiagnosticsInput {\n diagnostics?: AthenaDiagnosticsMode\n debugAst?: boolean\n findManyAst?: boolean\n traceQueries?: boolean | AthenaQueryTraceOptions\n env?: Record<string, string | undefined>\n}\n\nexport interface ResolvedAthenaDiagnostics {\n debugAst: boolean\n findManyAst: boolean\n /**\n * When the input was a trace options object, it is preserved when enabled.\n * When disabled, becomes `false`.\n */\n traceQueries: boolean | AthenaQueryTraceOptions\n}\n\nfunction readProcessEnv(): Record<string, string | undefined> {\n try {\n return (globalThis as { process?: { env?: Record<string, string | undefined> } })\n .process?.env ?? {}\n } catch {\n return {}\n }\n}\n\nfunction isTruthyEnv(value: string | undefined): boolean {\n if (!value) return false\n const normalized = value.trim().toLowerCase()\n return normalized === '1' || normalized === 'true' || normalized === 'yes' || normalized === 'on'\n}\n\n/**\n * True for production runtime and common Next/OpenNext build phases where\n * chatty AST/trace output should stay off by default.\n */\nexport function isQuietAthenaDiagnosticsEnvironment(\n env: Record<string, string | undefined> = readProcessEnv(),\n): boolean {\n const nodeEnv = env.NODE_ENV?.trim().toLowerCase()\n if (nodeEnv === 'production') {\n return true\n }\n if (isTruthyEnv(env.OPENNEXT_BUILD)) {\n return true\n }\n const nextPhase = env.NEXT_PHASE?.trim()\n if (nextPhase === 'phase-production-build') {\n return true\n }\n if (isTruthyEnv(env.CI) && nodeEnv !== 'test') {\n // CI unit tests often set NODE_ENV=test; only quiet generic CI production-ish runs.\n if (nodeEnv === 'production' || isTruthyEnv(env.OPENNEXT_BUILD)) {\n return true\n }\n }\n return false\n}\n\nfunction resolveBooleanFlag(\n explicit: boolean | undefined,\n mode: AthenaDiagnosticsMode | undefined,\n quiet: boolean,\n): boolean {\n if (typeof explicit === 'boolean') {\n return explicit\n }\n if (mode === true) {\n return true\n }\n if (mode === false) {\n return false\n }\n if (mode === 'auto') {\n // Auto keeps defaults off; quiet envs are handled by collapsing mode to false.\n void quiet\n return false\n }\n // Undefined mode: historical default (off unless explicit).\n return false\n}\n\n/**\n * Merge `diagnostics` mode with per-flag overrides.\n *\n * - `diagnostics: true` → enable AST flags (and trace) when not explicitly set\n * - `diagnostics: false` → disable when not explicitly set\n * - `diagnostics: 'auto'` → disable in production / OpenNext build / production-build phase\n * - explicit `debugAst` / `findManyAst` / `traceQueries` always win\n */\nexport function resolveAthenaClientDiagnostics(\n input: AthenaDiagnosticsInput,\n): ResolvedAthenaDiagnostics {\n const env = input.env ?? readProcessEnv()\n const quiet = isQuietAthenaDiagnosticsEnvironment(env)\n const mode = input.diagnostics\n\n // In quiet envs, auto (or explicit false) keeps defaults off even if callers\n // only set diagnostics mode.\n const effectiveMode: AthenaDiagnosticsMode | undefined =\n mode === 'auto' && quiet ? false : mode\n\n const debugAst = resolveBooleanFlag(input.debugAst, effectiveMode, quiet)\n const findManyAst = resolveBooleanFlag(input.findManyAst, effectiveMode, quiet)\n\n let traceQueries: ResolvedAthenaDiagnostics['traceQueries']\n if (input.traceQueries !== undefined) {\n if (typeof input.traceQueries === 'boolean') {\n traceQueries = input.traceQueries\n } else if (effectiveMode === false || (mode === 'auto' && quiet)) {\n // Quiet override only when the object didn't set enabled: true explicitly.\n const enabled = input.traceQueries.enabled\n traceQueries =\n typeof enabled === 'boolean'\n ? enabled\n ? input.traceQueries\n : false\n : false\n } else {\n traceQueries = input.traceQueries\n }\n } else if (effectiveMode === true) {\n traceQueries = true\n } else {\n traceQueries = false\n }\n\n return {\n debugAst,\n findManyAst,\n traceQueries,\n }\n}\n","import type { AthenaAuthBindings, AthenaAuthClientConfig } from './auth/types.ts'\nimport {\n createInternalClientCore,\n createInternalClientView,\n type AthenaFromOptions,\n type InternalAthenaClientCore,\n type InternalAthenaClient,\n type AthenaQueryTraceOptions,\n type AthenaRequestOptions,\n type AthenaRequestResponse,\n type AthenaResult,\n type RpcQueryBuilder,\n type TableQueryBuilder,\n} from './client.ts'\nimport type { AthenaChatModule, AthenaChatWebSocketFactory } from './chat/types.ts'\nimport type { AthenaDbModule } from './db/module.ts'\nimport type {\n AthenaGatewayCallOptions,\n AthenaGatewayConnectionOptions,\n AthenaGatewayConnectionResult,\n AthenaJsonObject,\n AthenaRpcCallOptions,\n BackendConfig,\n BackendType,\n} from './gateway/types.ts'\nimport type { AthenaGatewayClient } from './gateway/client.ts'\nimport type {\n AthenaClientCapabilities,\n D1DatabaseLike,\n R2BucketLike,\n} from './cloudflare/types.ts'\nimport {\n CLOUDFLARE_EDGE_API_KEY,\n CLOUDFLARE_EDGE_BASE_URL,\n} from './cloudflare/types.ts'\nimport {\n createCloudflareEdgeCapabilities,\n createGatewayCapabilities,\n} from './cloudflare/capabilities.ts'\nimport { createCloudflareD1GatewayTransport } from './cloudflare/d1/transport.ts'\nimport {\n resolveAthenaExecutionMode,\n type AthenaExecutionMode,\n type AthenaExecutionPrefer,\n} from './cloudflare/execution-mode.ts'\nimport {\n createCloudflareR2StorageModule,\n type CloudflareR2StorageModule,\n} from './cloudflare/r2/storage.ts'\nimport type {\n AthenaClientModelsInput,\n AthenaClientModelForTableName,\n AthenaClientTableName,\n AthenaModelTarget,\n InsertOf,\n RowOf,\n UpdateOf,\n} from './schema/types.ts'\nimport type {\n AthenaStorageClientConfig,\n AthenaStorageDirectUploadConfig,\n AthenaStorageModule,\n} from './storage/module.ts'\nimport {\n createBillingModule,\n type AthenaBillingClientConfig,\n type AthenaBillingModule,\n} from './billing/module.ts'\nimport {\n AthenaConfigurationError,\n type AthenaService,\n} from './config/errors.ts'\nimport { mergeAthenaRequestContexts } from './context/merge.ts'\nimport {\n resolveAthenaClientDiagnostics,\n type AthenaDiagnosticsMode,\n} from './diagnostics.ts'\n\ntype MaybePromise<T> = T | Promise<T>\ntype ResolvedModels<TModels> = TModels extends AthenaClientModelsInput ? TModels : never\n\nconst ENV_URL_KEYS = ['ATHENA_URL', 'NEXT_PUBLIC_ATHENA_URL'] as const\nconst ENV_DB_URL_KEYS = ['ATHENA_DB_URL', 'ATHENA_GATEWAY_URL', 'NEXT_PUBLIC_ATHENA_DB_API_URL'] as const\nconst ENV_AUTH_URL_KEYS = ['ATHENA_AUTH_URL', 'NEXT_PUBLIC_ATHENA_AUTH_URL'] as const\nconst ENV_CHAT_URL_KEYS = ['ATHENA_CHAT_URL', 'NEXT_PUBLIC_ATHENA_CHAT_URL'] as const\nconst ENV_CHAT_WS_URL_KEYS = ['ATHENA_CHAT_WS_URL', 'NEXT_PUBLIC_ATHENA_CHAT_WS_URL'] as const\nconst ENV_STORAGE_URL_KEYS = ['ATHENA_STORAGE_URL', 'NEXT_PUBLIC_ATHENA_STORAGE_URL'] as const\nconst ENV_KEY_KEYS = ['ATHENA_API_KEY', 'NEXT_PUBLIC_ATHENA_API_KEY', 'ATHENA_GATEWAY_API_KEY', 'X_API_KEY'] as const\nconst ENV_CLIENT_KEYS = [\n 'ATHENA_CLIENT',\n 'ATHENA_GATEWAY_CLIENT',\n 'ATHENA_GENERATOR_CLIENT',\n 'NEXT_PUBLIC_ATHENA_CLIENT',\n 'NEXT_PUBLIC_ATHENA_GATEWAY_CLIENT',\n] as const\nconst MISSING_DB_SENTINEL = 'https://athena.invalid/db'\n\nexport {\n AthenaConfigurationError,\n type AthenaConfigurationErrorCode,\n type AthenaService,\n} from './config/errors.ts'\n\nexport interface AthenaRequestContext {\n userId?: string | null\n organizationId?: string | null\n headers?: Record<string, string>\n cookie?: string | null\n bearerToken?: string | null\n sessionToken?: string | null\n forceNoCache?: boolean\n}\n\nexport type AthenaRequestContextProvider = () => MaybePromise<AthenaRequestContext | undefined>\n\nexport interface AthenaDbConfig {\n url?: string | null\n pgUri?: string | null\n jdbcUrl?: string | null\n /**\n * Cloudflare D1 binding (e.g. `env.DB`).\n * Drop-in local DB execution for `from` / `query` / flat CRUD — same fluent API as HTTP gateway.\n * When set, `createClient` wires a D1 transport automatically (ADR 0015).\n */\n d1?: D1DatabaseLike | null\n /** Default D1 session mode when using `d1` (`first-unconstrained`, `first-primary`, …). */\n sessionMode?: string | null\n}\n\nexport interface AthenaAuthConfig\n extends Omit<\n AthenaAuthClientConfig,\n 'baseUrl' | 'apiKey' | 'bearerToken' | 'cookie' | 'sessionToken'\n > {\n url?: string | null\n}\n\nexport interface AthenaChatConfig {\n url?: string | null\n wsUrl?: string | null\n webSocketFactory?: AthenaChatWebSocketFactory | null\n}\n\nexport interface AthenaStorageConfig\n extends Omit<AthenaStorageClientConfig, 'baseUrl' | 'directUpload'> {\n url?: string | null\n directUpload?: AthenaStorageDirectUploadConfig\n /**\n * Cloudflare R2 binding (e.g. `env.FILES`).\n * Drop-in local object I/O (`putObject` / `getObject` / `listObjects` / `deleteObject`).\n * When set, `createClient` attaches L3a R2 storage instead of (or without) HTTP storage.\n */\n r2?: R2BucketLike | null\n /** Key prefix for R2 object ops (trailing slash normalized). */\n prefix?: string | null\n}\n\nexport interface AthenaBillingConfig\n extends Omit<AthenaBillingClientConfig, 'baseUrl' | 'apiKey' | 'client' | 'fetchImpl'> {\n /** Optional override; defaults to the unified/root or db Athena URL. */\n url?: string | null\n}\n\nexport type { AthenaDiagnosticsMode }\n\nexport interface AthenaClientConfig<\n TModels extends AthenaClientModelsInput | undefined = undefined,\n> {\n url?: string | null\n key?: string | null\n client?: string | null\n backend?: BackendConfig | BackendType\n headers?: Record<string, string>\n models?: TModels\n env?: Record<string, string | undefined>\n context?: AthenaRequestContext | AthenaRequestContextProvider\n db?: AthenaDbConfig\n auth?: AthenaAuthConfig\n chat?: AthenaChatConfig\n storage?: AthenaStorageConfig\n billing?: AthenaBillingConfig\n /**\n * Top-level D1 alias for `db.d1` (Worker DX). Prefer nested `db: { d1 }` in shared code.\n * All paths still materialize through {@link createClient}.\n */\n d1?: D1DatabaseLike | null\n /**\n * Top-level R2 alias for `storage.r2`. Prefer nested `storage: { r2 }` in shared code.\n */\n r2?: R2BucketLike | null\n /** Top-level alias for `storage.prefix` when using `r2`. */\n storagePrefix?: string | null\n /** Top-level alias for `db.sessionMode` when using `d1`. */\n sessionMode?: string | null\n /**\n * Edge vs gateway selection when both bindings and HTTP URLs may be present.\n * Default `auto` (env `ATHENA_EXECUTION_MODE`). Prefer nested service fields for backends.\n */\n mode?: AthenaExecutionMode | string | null\n /**\n * When `mode` is `auto` and both D1 and a gateway URL exist, which wins.\n * Default `edge` (env `ATHENA_EXECUTION_PREFER`).\n */\n prefer?: AthenaExecutionPrefer | string | null\n retryReads?: boolean\n /**\n * Query diagnostics mode. Prefer `'auto'` in Next/OpenNext apps so production\n * builds stay quiet without app-local OPENNEXT_BUILD branching.\n * Per-flag `debugAst` / `findManyAst` / `traceQueries` always win when set.\n */\n diagnostics?: AthenaDiagnosticsMode\n traceQueries?: boolean | AthenaQueryTraceOptions\n debugAst?: boolean\n findManyAst?: boolean\n /**\n * Optional prebuilt gateway transport (tests / advanced injection).\n * Prefer `db.d1` for Cloudflare edge-local — `createClient` wires D1 automatically.\n * @see ADR 0015\n */\n gatewayTransport?: AthenaGatewayClient\n /** Optional capability bag; defaults from gateway vs `db.d1` / `storage.r2` bindings. */\n capabilities?: AthenaClientCapabilities\n}\n\n/** Config with a required R2 binding — narrows `client.storage` to L3a object methods. */\nexport type AthenaClientConfigWithR2<\n TModels extends AthenaClientModelsInput | undefined = undefined,\n> = AthenaClientConfig<TModels> & {\n storage: AthenaStorageConfig & { r2: R2BucketLike }\n}\n\n/** Client with L3a R2 object methods typed on `storage`. */\nexport type AthenaClientWithR2Storage<\n TModels extends AthenaClientModelsInput | undefined = undefined,\n> = Omit<AthenaClient<TModels>, 'storage' | 'withContext'> & {\n readonly storage: CloudflareR2StorageModule\n withContext(context: AthenaRequestContext): AthenaClientWithR2Storage<TModels>\n}\n\ntype V3TableBuilder<\n Row,\n Insert = Partial<Row>,\n Update = Partial<Insert>,\n Result = unknown,\n> = TableQueryBuilder<Row, Insert, Update, Result>\n\nexport interface AthenaClient<\n TModels extends AthenaClientModelsInput | undefined = AthenaClientModelsInput | undefined,\n> {\n readonly db: AthenaDbModule<ResolvedModels<TModels>>\n readonly auth: AthenaAuthBindings\n readonly chat: AthenaChatModule\n readonly storage: AthenaStorageModule\n readonly billing: AthenaBillingModule\n /** Runtime feature detection for gateway vs edge-local backends (ADR 0015). */\n readonly capabilities: AthenaClientCapabilities\n from<TModel extends AthenaModelTarget>(\n model: TModel,\n ): V3TableBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>>\n from<TTableName extends AthenaClientTableName<ResolvedModels<TModels>>>(\n table: TTableName,\n options?: AthenaFromOptions,\n ): V3TableBuilder<\n RowOf<AthenaClientModelForTableName<ResolvedModels<TModels>, TTableName>>,\n InsertOf<AthenaClientModelForTableName<ResolvedModels<TModels>, TTableName>>,\n UpdateOf<AthenaClientModelForTableName<ResolvedModels<TModels>, TTableName>>\n >\n from<Row = Record<string, unknown>, Insert = Partial<Row>, Update = Partial<Insert>>(\n table: string,\n options?: AthenaFromOptions,\n ): V3TableBuilder<Row, Insert, Update>\n rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\n fn: string,\n args?: Args,\n options?: AthenaRpcCallOptions,\n ): RpcQueryBuilder<Row>\n query<Row = unknown>(\n query: string,\n options?: AthenaGatewayCallOptions,\n ): Promise<AthenaResult<Row[]>>\n request<T = unknown>(options: AthenaRequestOptions): Promise<AthenaRequestResponse<T>>\n verifyConnection(\n options?: AthenaGatewayConnectionOptions,\n ): Promise<AthenaGatewayConnectionResult>\n withContext(context: AthenaRequestContext): AthenaClient<TModels>\n}\n\ninterface ResolvedServiceUrls {\n db?: string\n auth?: string\n chat?: string\n chatWs?: string\n storage?: string\n billing?: string\n}\n\ninterface AthenaClientCoreBase<TModels extends AthenaClientModelsInput | undefined> {\n readonly config: AthenaClientConfig<TModels>\n readonly urls: ResolvedServiceUrls\n readonly key: string\n readonly client?: string\n}\n\ninterface AthenaClientCore<TModels extends AthenaClientModelsInput | undefined>\n extends AthenaClientCoreBase<TModels> {\n readonly internalCore: InternalAthenaClientCore<ResolvedModels<TModels>>\n}\n\nfunction readFirstEnv(\n env: Record<string, string | undefined> | undefined,\n keys: readonly string[],\n): string | undefined {\n for (const key of keys) {\n const value = env?.[key]?.trim()\n if (value) return value\n }\n return undefined\n}\n\n/**\n * First env value that looks like an absolute http(s) URL.\n * Skips unexpanded placeholders (e.g. `${ATHENA_URL}`) and other non-URLs so\n * ambient shell pollution cannot crash createClient during service resolution.\n */\nfunction readFirstEnvHttpUrl(\n env: Record<string, string | undefined> | undefined,\n keys: readonly string[],\n): string | undefined {\n for (const key of keys) {\n const value = env?.[key]?.trim()\n if (value && isAbsoluteHttpUrl(value)) return value\n }\n return undefined\n}\n\nfunction normalizeOptional(value: string | null | undefined): string | undefined {\n const normalized = value?.trim()\n return normalized || undefined\n}\n\nfunction isAbsoluteHttpUrl(value: string): boolean {\n try {\n const url = new URL(value)\n return url.protocol === 'http:' || url.protocol === 'https:'\n } catch {\n return false\n }\n}\n\nfunction appendPath(baseUrl: string, path: string): string {\n return `${baseUrl.replace(/\\/+$/, '')}/${path.replace(/^\\/+/, '')}`\n}\n\nfunction toWebSocketUrl(baseUrl: string): string | undefined {\n if (!isAbsoluteHttpUrl(baseUrl)) return undefined\n const url = new URL(baseUrl)\n url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:'\n url.pathname = `${url.pathname.replace(/\\/+$/, '')}/wss/gateway`\n url.search = ''\n url.hash = ''\n return url.toString()\n}\n\nfunction resolveCore<TModels extends AthenaClientModelsInput | undefined>(\n config: AthenaClientConfig<TModels>,\n): AthenaClientCore<TModels> {\n const env = config.env\n const explicitRoot = normalizeOptional(config.url)\n const envRoot = readFirstEnvHttpUrl(env, ENV_URL_KEYS)\n const root =\n explicitRoot && isAbsoluteHttpUrl(explicitRoot)\n ? explicitRoot\n : explicitRoot\n ? undefined\n : envRoot\n const explicitRootWinsOverEnvServices = Boolean(root && explicitRoot && isAbsoluteHttpUrl(explicitRoot))\n const resolveService = (\n explicit: string | null | undefined,\n envKeys: readonly string[],\n path: string,\n ): string | undefined =>\n normalizeOptional(explicit) ??\n (explicitRootWinsOverEnvServices && root ? appendPath(root, path) : undefined) ??\n readFirstEnvHttpUrl(env, envKeys) ??\n (root ? appendPath(root, path) : undefined)\n\n const dbUrl = resolveService(config.db?.url, ENV_DB_URL_KEYS, 'db')\n const urls: ResolvedServiceUrls = {\n db: dbUrl,\n auth: resolveService(config.auth?.url, ENV_AUTH_URL_KEYS, 'auth'),\n chat: resolveService(config.chat?.url, ENV_CHAT_URL_KEYS, 'chat'),\n storage: resolveService(config.storage?.url, ENV_STORAGE_URL_KEYS, 'storage'),\n // Billing lives on the main Athena HTTP surface (same host as gateway/db).\n billing:\n normalizeOptional(config.billing?.url) ??\n dbUrl ??\n root ??\n undefined,\n chatWs:\n normalizeOptional(config.chat?.wsUrl) ??\n (explicitRootWinsOverEnvServices && root ? toWebSocketUrl(root) : undefined) ??\n readFirstEnvHttpUrl(env, ENV_CHAT_WS_URL_KEYS) ??\n (root ? toWebSocketUrl(root) : undefined),\n }\n\n if (!urls.db && !urls.auth && !urls.chat && !urls.storage && !urls.billing) {\n throw new AthenaConfigurationError(\n 'ATHENA_NO_SERVICE_CONFIGURED',\n 'Athena requires a unified URL or at least one configured service URL.',\n 'db',\n )\n }\n\n const key = normalizeOptional(config.key) ?? readFirstEnv(env, ENV_KEY_KEYS)\n if (!key) {\n throw new AthenaConfigurationError(\n 'ATHENA_API_KEY_REQUIRED',\n 'Athena API key is required. Pass key or provide it through the explicit env object.',\n )\n }\n\n const base: AthenaClientCoreBase<TModels> = {\n config,\n urls,\n key,\n client: normalizeOptional(config.client) ?? readFirstEnv(env, ENV_CLIENT_KEYS),\n }\n return {\n ...base,\n internalCore: createInternalClientCore(createInternalConfig(base)),\n }\n}\n\nasync function resolveConfiguredContext<TModels extends AthenaClientModelsInput | undefined>(\n core: AthenaClientCore<TModels>,\n viewContext: AthenaRequestContext | undefined,\n): Promise<AthenaRequestContext | undefined> {\n const configured = core.config.context\n const base = typeof configured === 'function' ? await configured() : configured\n return mergeAthenaRequestContexts(base, viewContext)\n}\n\nfunction createInternalConfig<TModels extends AthenaClientModelsInput | undefined>(\n core: AthenaClientCoreBase<TModels>,\n) {\n const { config, urls } = core\n const { url: _authUrl, ...authOptions } = config.auth ?? {}\n const {\n url: _storageUrl,\n directUpload,\n r2: _r2,\n prefix: _r2Prefix,\n ...storageOptions\n } = config.storage ?? {}\n void _authUrl\n void _storageUrl\n void _r2\n void _r2Prefix\n\n const diagnostics = resolveAthenaClientDiagnostics({\n diagnostics: config.diagnostics,\n debugAst: config.debugAst,\n findManyAst: config.findManyAst,\n traceQueries: config.traceQueries,\n env: config.env,\n })\n\n return {\n baseUrl: urls.db ?? MISSING_DB_SENTINEL,\n apiKey: core.key,\n client: core.client,\n backend:\n typeof config.backend === 'string'\n ? { type: config.backend }\n : config.backend,\n headers: config.headers,\n authUrl: urls.auth,\n chatUrl: urls.chat,\n chatWsUrl: urls.chatWs,\n storageUrl: urls.storage,\n pgUri: config.db?.pgUri,\n jdbcUrl: config.db?.jdbcUrl,\n auth: authOptions,\n models: config.models as ResolvedModels<TModels>,\n behavior: {\n retryReads: config.retryReads,\n traceQueries: diagnostics.traceQueries,\n debugAst: diagnostics.debugAst,\n findManyAst: diagnostics.findManyAst,\n },\n storage: {\n ...storageOptions,\n ...(directUpload ? { directUpload } : {}),\n },\n gatewayTransport: config.gatewayTransport,\n }\n}\n\nfunction serviceGuard(urls: ResolvedServiceUrls, service: AthenaService): void {\n if (!urls[service]) {\n throw new AthenaConfigurationError(\n 'ATHENA_SERVICE_NOT_CONFIGURED',\n `Athena ${service} is not configured.`,\n service,\n )\n }\n}\n\nfunction createUnavailableNamespace(\n service: AthenaService,\n urls: ResolvedServiceUrls,\n path: readonly PropertyKey[] = [],\n): unknown {\n return new Proxy(() => undefined, {\n get(_target, property) {\n return createUnavailableNamespace(service, urls, [...path, property])\n },\n apply() {\n serviceGuard(urls, service)\n throw new TypeError(`Athena service property ${path.map(String).join('.')} is not callable.`)\n },\n })\n}\n\nfunction isD1Binding(value: unknown): value is D1DatabaseLike {\n return Boolean(\n value &&\n typeof value === 'object' &&\n typeof (value as D1DatabaseLike).prepare === 'function',\n )\n}\n\nfunction isR2Binding(value: unknown): value is R2BucketLike {\n return Boolean(\n value &&\n typeof value === 'object' &&\n typeof (value as R2BucketLike).put === 'function' &&\n typeof (value as R2BucketLike).get === 'function',\n )\n}\n\n/**\n * Fold top-level Worker aliases into nested service config, then resolve\n * edge vs gateway so every path materializes through {@link createClient}.\n */\nfunction foldBindingAliases<TModels extends AthenaClientModelsInput | undefined>(\n config: AthenaClientConfig<TModels>,\n): AthenaClientConfig<TModels> {\n const d1 = config.db?.d1 ?? config.d1\n const r2 = config.storage?.r2 ?? config.r2\n const sessionMode = config.db?.sessionMode ?? config.sessionMode\n const prefix = config.storage?.prefix ?? config.storagePrefix\n\n let next: AthenaClientConfig<TModels> = { ...config }\n if (d1 !== undefined || sessionMode !== undefined) {\n next = {\n ...next,\n db: {\n ...next.db,\n ...(d1 !== undefined ? { d1 } : {}),\n ...(sessionMode !== undefined ? { sessionMode } : {}),\n },\n }\n }\n if (r2 !== undefined || prefix !== undefined) {\n next = {\n ...next,\n storage: {\n ...next.storage,\n ...(r2 !== undefined ? { r2 } : {}),\n ...(prefix !== undefined ? { prefix } : {}),\n },\n }\n }\n // Strip top-level aliases so they are not mistaken for service modules later.\n const {\n d1: _d1,\n r2: _r2,\n storagePrefix: _storagePrefix,\n sessionMode: _sessionMode,\n ...rest\n } = next\n void _d1\n void _r2\n void _storagePrefix\n void _sessionMode\n return rest\n}\n\n/**\n * When execution resolves to gateway, drop D1 so HTTP db routing wins.\n * R2 may still attach for hybrid local objects + remote gateway DB.\n */\nfunction applyExecutionMode<TModels extends AthenaClientModelsInput | undefined>(\n config: AthenaClientConfig<TModels>,\n): AthenaClientConfig<TModels> {\n const d1 = config.db?.d1\n const hasD1 = isD1Binding(d1)\n const hasUrl = Boolean(\n normalizeOptional(config.url) ??\n normalizeOptional(config.db?.url) ??\n (config.env\n ? normalizeOptional(config.env.ATHENA_URL) ??\n normalizeOptional(config.env.NEXT_PUBLIC_ATHENA_URL)\n : undefined),\n )\n\n // Only resolve when there is something to choose between (or explicit mode).\n const hasModeHint =\n config.mode != null ||\n config.prefer != null ||\n Boolean(config.env?.ATHENA_EXECUTION_MODE) ||\n Boolean(config.env?.ATHENA_EXECUTION_PREFER)\n\n if (!hasD1 && !hasModeHint) {\n return config\n }\n\n // Pure edge (only d1, no url) or pure gateway without mode hints: keep default behavior.\n if (hasD1 && !hasUrl && !hasModeHint) {\n return config\n }\n\n let resolved: AthenaExecutionMode | 'edge' | 'gateway'\n try {\n resolved = resolveAthenaExecutionMode({\n mode: config.mode,\n prefer: config.prefer,\n d1: hasD1 ? d1 : null,\n url: config.url ?? config.db?.url,\n env: config.env,\n })\n } catch (error) {\n // No mode/prefer and incomplete config: fall through to default materialize.\n if (!hasModeHint) return config\n throw error\n }\n\n if (resolved === 'gateway' && hasD1) {\n const { d1: _drop, sessionMode: _sm, ...dbRest } = config.db ?? {}\n void _drop\n void _sm\n return {\n ...config,\n db: Object.keys(dbRest).length > 0 ? dbRest : undefined,\n gatewayTransport: undefined,\n }\n }\n\n return config\n}\n\n/**\n * Unified remote root (top-level `url` or env ATHENA_URL / NEXT_PUBLIC_ATHENA_URL).\n * Used for billing hybrid routing and default service derivation.\n */\nfunction resolveUnifiedRemoteRoot<TModels extends AthenaClientModelsInput | undefined>(\n config: AthenaClientConfig<TModels>,\n): string | undefined {\n return normalizeOptional(config.url) ?? readFirstEnv(config.env, ENV_URL_KEYS)\n}\n\nfunction isEdgeLocalSentinelUrl(url: string | undefined): boolean {\n if (!url) return false\n return (\n url === CLOUDFLARE_EDGE_BASE_URL ||\n url.startsWith('https://athena.local/') ||\n url.startsWith('http://athena.local/')\n )\n}\n\n/**\n * True when a non-edge DB HTTP gateway is configured (nested `db.url` or env DB/gateway URL).\n * Important for hybrid `db: { d1, url: remoteGateway }` where top-level `url` may be unset.\n */\nfunction hasRemoteDbGatewayUrl<TModels extends AthenaClientModelsInput | undefined>(\n config: AthenaClientConfig<TModels>,\n): boolean {\n const dbUrl =\n normalizeOptional(config.db?.url) ?? readFirstEnv(config.env, ENV_DB_URL_KEYS)\n return Boolean(dbUrl && !isEdgeLocalSentinelUrl(dbUrl))\n}\n\n/**\n * True when any remote HTTP service is configured (explicit or via env).\n * Used to decide whether the edge-local API-key sentinel is safe to inject.\n */\nfunction hasRemoteHttpServices<TModels extends AthenaClientModelsInput | undefined>(\n config: AthenaClientConfig<TModels>,\n): boolean {\n return Boolean(\n resolveUnifiedRemoteRoot(config) ||\n hasRemoteDbGatewayUrl(config) ||\n normalizeOptional(config.auth?.url) ||\n readFirstEnv(config.env, ENV_AUTH_URL_KEYS) ||\n normalizeOptional(config.storage?.url) ||\n readFirstEnv(config.env, ENV_STORAGE_URL_KEYS) ||\n normalizeOptional(config.chat?.url) ||\n readFirstEnv(config.env, ENV_CHAT_URL_KEYS) ||\n normalizeOptional(config.billing?.url),\n )\n}\n\n/**\n * True when HTTP object storage is configured (explicit `storage.url`, env, or\n * a unified remote root that resolveCore can turn into `/storage`).\n */\nfunction hasRemoteHttpStorage<TModels extends AthenaClientModelsInput | undefined>(\n config: AthenaClientConfig<TModels>,\n): boolean {\n return Boolean(\n normalizeOptional(config.storage?.url) ||\n readFirstEnv(config.env, ENV_STORAGE_URL_KEYS) ||\n resolveUnifiedRemoteRoot(config),\n )\n}\n\nfunction hasRemoteAuthService<TModels extends AthenaClientModelsInput | undefined>(\n config: AthenaClientConfig<TModels>,\n): boolean {\n return Boolean(\n normalizeOptional(config.auth?.url) ||\n readFirstEnv(config.env, ENV_AUTH_URL_KEYS) ||\n resolveUnifiedRemoteRoot(config),\n )\n}\n\n/**\n * Wire Cloudflare D1/R2 bindings into the shared `createClient` config spine.\n * Drop-in: `createClient({ db: { d1 }, storage: { r2 } })` uses the same fluent\n * DB/storage call sites as gateway HTTP mode.\n */\nfunction materializeEdgeBindings<TModels extends AthenaClientModelsInput | undefined>(\n config: AthenaClientConfig<TModels>,\n): AthenaClientConfig<TModels> {\n const d1 = config.db?.d1\n const r2 = config.storage?.r2\n const hasD1 = isD1Binding(d1)\n const hasR2 = isR2Binding(r2)\n if (!hasD1 && !hasR2) {\n return config\n }\n\n if (hasD1 && d1 && typeof d1.prepare !== 'function') {\n throw new AthenaConfigurationError(\n 'ATHENA_NO_SERVICE_CONFIGURED',\n 'db.d1 must be a D1 binding with prepare().',\n 'db',\n )\n }\n\n const remoteRoot = resolveUnifiedRemoteRoot(config)\n const remoteServices = hasRemoteHttpServices(config)\n const remoteStorage = hasRemoteHttpStorage(config)\n const remoteAuth = hasRemoteAuthService(config)\n const next: AthenaClientConfig<TModels> = { ...config }\n\n if (hasD1 && d1) {\n if (!config.gatewayTransport) {\n next.gatewayTransport = createCloudflareD1GatewayTransport({\n d1,\n defaultSessionMode: config.db?.sessionMode,\n })\n }\n // Local D1 sentinel — not a real HTTP endpoint. Hybrid services must not inherit this for billing.\n // Do not plant the sentinel when env (or explicit) remote DB gateway URLs exist:\n // resolveCore prefers explicit `db.url` over ATHENA_DB_URL / ATHENA_GATEWAY_URL, so a\n // sentinel would shadow those env gateways after remote key selection already succeeded.\n const explicitDbUrl = normalizeOptional(config.db?.url)\n const remoteDbGateway = hasRemoteDbGatewayUrl(config)\n next.db = {\n ...config.db,\n d1,\n url: explicitDbUrl ?? (remoteDbGateway ? undefined : CLOUDFLARE_EDGE_BASE_URL),\n }\n // Pure edge-local needs a placeholder key for resolveCore. Hybrid clients\n // (top-level url, env ATHENA_URL, or any explicit/env remote service URL)\n // must not pre-fill the sentinel — leave key unset so resolveCore can use\n // ATHENA_API_KEY / ATHENA_GATEWAY_API_KEY (etc.) from the env object.\n const explicitKey = normalizeOptional(config.key)\n if (explicitKey) {\n next.key = explicitKey\n } else if (!remoteServices) {\n next.key = CLOUDFLARE_EDGE_API_KEY\n } else {\n // Hybrid without top-level key: strip accidental empty key so env keys apply.\n next.key = undefined\n }\n if (remoteRoot) {\n next.billing = {\n ...(config.billing ?? {}),\n url: normalizeOptional(config.billing?.url) ?? remoteRoot,\n }\n }\n if (!config.capabilities) {\n next.capabilities = createCloudflareEdgeCapabilities({\n hasR2,\n // Explicit storage.url / env storage URL / unified remote root all count.\n hasRemoteStorage: remoteStorage,\n authRemote: remoteAuth,\n findManyAst: false,\n })\n }\n } else if (hasR2 && r2) {\n // R2 without D1: storage-only edge, or gateway HTTP DB + local R2 objects.\n // ADR 0016: presence of storage.r2 alone is sufficient to configure object storage.\n if (\n !remoteRoot &&\n !normalizeOptional(config.db?.url) &&\n !normalizeOptional(config.storage?.url) &&\n !readFirstEnv(config.env, ENV_STORAGE_URL_KEYS)\n ) {\n next.storage = {\n ...config.storage,\n r2,\n // Local sentinel so resolveCore accepts a storage-only binding client.\n url: CLOUDFLARE_EDGE_BASE_URL,\n }\n if (!remoteServices) {\n next.key = normalizeOptional(config.key) ?? CLOUDFLARE_EDGE_API_KEY\n } else if (normalizeOptional(config.key)) {\n next.key = normalizeOptional(config.key)\n } else {\n next.key = undefined\n }\n }\n if (!config.capabilities) {\n if (remoteRoot || normalizeOptional(config.db?.url) || readFirstEnv(config.env, ENV_DB_URL_KEYS)) {\n // Gateway (or other remote) DB + local R2: keep gateway mode, advertise local objects.\n const base = createGatewayCapabilities({\n authRemote: remoteAuth,\n storageConfigured: true,\n })\n next.capabilities = {\n ...base,\n storage: {\n ...base.storage,\n local: true,\n objects: true,\n },\n }\n } else {\n // Storage-only edge client — no DB binding or remote root.\n next.capabilities = {\n mode: 'cloudflare-edge',\n db: {\n engine: 'unknown',\n local: false,\n layers: {\n query: false,\n flatCrud: false,\n findManyAst: false,\n rpc: false,\n relations: false,\n },\n },\n storage: {\n local: true,\n objects: true,\n catalogs: false,\n backups: false,\n },\n auth: {\n remote: remoteAuth,\n },\n }\n }\n }\n }\n\n return next\n}\n\n/** Single createClient normalization pipeline: aliases → mode → edge materialize. */\nfunction normalizeCreateClientConfig<TModels extends AthenaClientModelsInput | undefined>(\n config: AthenaClientConfig<TModels>,\n): AthenaClientConfig<TModels> {\n return materializeEdgeBindings(applyExecutionMode(foldBindingAliases(config)))\n}\n\nfunction createClientView<TModels extends AthenaClientModelsInput | undefined>(\n core: AthenaClientCore<TModels>,\n viewContext?: AthenaRequestContext,\n): AthenaClient<TModels> {\n const resolved: InternalAthenaClient<ResolvedModels<TModels>> =\n createInternalClientView(core.internalCore, () =>\n resolveConfiguredContext(core, viewContext),\n )\n const requireDb = (): void => serviceGuard(core.urls, 'db')\n\n const { url: _billingUrl, ...billingOptions } = core.config.billing ?? {}\n void _billingUrl\n const billingModule: AthenaBillingModule | unknown = core.urls.billing\n ? createBillingModule({\n baseUrl: core.urls.billing,\n apiKey: core.key,\n client: core.client,\n headers: {\n ...(core.config.headers ?? {}),\n ...(billingOptions.headers ?? {}),\n },\n ...billingOptions,\n })\n : createUnavailableNamespace('billing', core.urls)\n\n const capabilities =\n core.config.capabilities ??\n createGatewayCapabilities({\n authRemote: Boolean(core.urls.auth),\n // Match unavailable storage proxy when no storage URL was resolved.\n storageConfigured: Boolean(core.urls.storage),\n })\n\n const r2 = core.config.storage?.r2\n const storageModule: AthenaStorageModule | CloudflareR2StorageModule | unknown = isR2Binding(r2)\n ? createCloudflareR2StorageModule({\n r2,\n prefix: core.config.storage?.prefix ?? undefined,\n })\n : core.urls.storage\n ? resolved.storage\n : createUnavailableNamespace('storage', core.urls)\n\n const client: AthenaClient<TModels> = {\n db: (core.urls.db ? resolved.db : createUnavailableNamespace('db', core.urls)) as AthenaClient<TModels>['db'],\n auth: (core.urls.auth ? resolved.auth : createUnavailableNamespace('auth', core.urls)) as AthenaAuthBindings,\n chat: (core.urls.chat ? resolved.chat : createUnavailableNamespace('chat', core.urls)) as AthenaChatModule,\n storage: storageModule as AthenaStorageModule,\n billing: billingModule as AthenaBillingModule,\n capabilities,\n from: ((...args: unknown[]) => {\n requireDb()\n return Reflect.apply(resolved.from, resolved, args)\n }) as AthenaClient<TModels>['from'],\n rpc: ((...args: unknown[]) => {\n requireDb()\n return Reflect.apply(resolved.rpc, resolved, args)\n }) as AthenaClient<TModels>['rpc'],\n query<Row = unknown>(query: string, options?: AthenaGatewayCallOptions) {\n requireDb()\n return resolved.query<Row>(query, options)\n },\n request<T = unknown>(options: AthenaRequestOptions) {\n // Absolute URLs do not need a configured service base URL.\n if (!options.url?.trim()) {\n serviceGuard(core.urls, options.service ?? 'db')\n }\n return resolved.request<T>(options)\n },\n verifyConnection(options?: AthenaGatewayConnectionOptions) {\n requireDb()\n return resolved.verifyConnection(options)\n },\n withContext(context: AthenaRequestContext) {\n warnIfEmptyRequestContext(context)\n return createClientView(core, mergeAthenaRequestContexts(viewContext, context))\n },\n }\n\n return Object.freeze(client)\n}\n\n/**\n * True when a context object carries no identity, auth, cache, or header signal.\n * Used to catch the common footgun `withContext({})` in development.\n */\nexport function isEmptyAthenaRequestContext(\n context: AthenaRequestContext | undefined | null,\n): boolean {\n if (!context) return true\n const hasHeaders =\n context.headers != null && Object.keys(context.headers).length > 0\n return (\n context.userId == null &&\n context.organizationId == null &&\n !normalizeOptionalContextString(context.cookie) &&\n !normalizeOptionalContextString(context.bearerToken) &&\n !normalizeOptionalContextString(context.sessionToken) &&\n !context.forceNoCache &&\n !hasHeaders\n )\n}\n\nfunction normalizeOptionalContextString(\n value: string | null | undefined,\n): string | undefined {\n const trimmed = value?.trim()\n return trimmed || undefined\n}\n\nfunction warnIfEmptyRequestContext(context: AthenaRequestContext): void {\n if (!isEmptyAthenaRequestContext(context)) return\n // globalThis.process avoids DTS failures without @types/node (Workers CI).\n const nodeEnv = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process\n ?.env?.NODE_ENV\n if (nodeEnv === 'production') {\n return\n }\n console.warn(\n '[athena] withContext({}) has no userId, organizationId, cookie, bearerToken, sessionToken, headers, or forceNoCache. ' +\n 'Gateway scope headers will not change. Pass identity fields, or use createAthenaServerClient({ session, scope }).',\n )\n}\n\n/**\n * Materialize an Athena client (single public constructor).\n *\n * All backends and modes go through this API:\n * - Gateway HTTP: `createClient({ url, key })`\n * - Edge D1/R2: `createClient({ db: { d1 }, storage: { r2 } })` or top-level `{ d1, r2 }`\n * - Hybrid: edge D1 + `url` for remote auth/billing\n * - Switch: `mode: 'auto' | 'edge' | 'gateway'` and `prefer` when both D1 and URL exist\n *\n * Fluent `from` / `query` / `storage.*` call sites are identical across modes (ADR 0001 / 0015 / 0016).\n * `createCloudflareClient` / `createAthenaRuntime` are thin façades that only map config into this function.\n */\nexport function createClient<\n const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n config: AthenaClientConfigWithR2<TModels>,\n): AthenaClientWithR2Storage<TModels>\nexport function createClient<\n const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n config: AthenaClientConfig<TModels> & { r2: R2BucketLike },\n): AthenaClientWithR2Storage<TModels>\nexport function createClient<\n const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClient<TModels>\nexport function createClient<\n const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n config: AthenaClientConfig<TModels>,\n): AthenaClient<TModels> | AthenaClientWithR2Storage<TModels> {\n const normalized = normalizeCreateClientConfig(config)\n return createClientView(resolveCore(normalized))\n}\n","/**\n * Edge-only client façade over {@link createClient}.\n * Prefer `createClient({ db: { d1 }, storage: { r2 } })` for new code (ADR 0001).\n * This helper maps the historical top-level `d1` / `r2` shape onto that spine.\n */\n\nimport {\n createClient,\n type AthenaAuthConfig,\n type AthenaClient,\n type AthenaRequestContext,\n type AthenaRequestContextProvider,\n} from '../v3-client.ts'\nimport type { AthenaClientModelsInput } from '../schema/types.ts'\nimport type { CloudflareR2StorageModule } from './r2/storage.ts'\nimport type {\n AthenaClientCapabilities,\n D1DatabaseLike,\n R2BucketLike,\n} from './types.ts'\n\nexport interface CloudflareAthenaClientConfig<\n TModels extends AthenaClientModelsInput | undefined = undefined,\n> {\n /** D1 database binding (e.g. env.DB). */\n d1: D1DatabaseLike\n /** Optional R2 bucket binding for L3a object I/O. */\n r2?: R2BucketLike\n /** Object key prefix for R2. */\n storagePrefix?: string\n /** Default D1 session mode (`first-unconstrained`, `first-primary`, …). */\n sessionMode?: string | null\n /**\n * Optional unified / remote Athena URL for hybrid services (auth, billing).\n * Not required for pure D1/R2 local mode.\n */\n url?: string | null\n /**\n * API key for remote hybrid services.\n * Pure edge-local mode gets a local sentinel via {@link createClient} when omitted.\n * Hybrid configs (`url` set) must not pre-fill that sentinel — leave unset so\n * `createClient` / resolveCore can read `ATHENA_API_KEY` (etc.) from `env`.\n */\n key?: string | null\n client?: string | null\n models?: TModels\n headers?: Record<string, string>\n context?: AthenaRequestContext | AthenaRequestContextProvider\n auth?: AthenaAuthConfig\n env?: Record<string, string | undefined>\n retryReads?: boolean\n debugAst?: boolean\n findManyAst?: boolean\n traceQueries?: boolean\n}\n\nexport type CloudflareAthenaClientConfigWithR2<\n TModels extends AthenaClientModelsInput | undefined = undefined,\n> = CloudflareAthenaClientConfig<TModels> & {\n r2: R2BucketLike\n}\n\nexport type CloudflareAthenaClient<\n TModels extends AthenaClientModelsInput | undefined = undefined,\n> = AthenaClient<TModels> & {\n readonly capabilities: AthenaClientCapabilities\n}\n\n/** Edge client with L3a R2 object methods typed on `storage`. */\nexport type CloudflareAthenaClientWithR2<\n TModels extends AthenaClientModelsInput | undefined = undefined,\n> = Omit<CloudflareAthenaClient<TModels>, 'storage' | 'withContext'> & {\n readonly storage: CloudflareR2StorageModule\n withContext(context: AthenaRequestContext): CloudflareAthenaClientWithR2<TModels>\n}\n\n/**\n * Create an Athena client that executes DB operations against a D1 binding\n * (and optional R2 for object storage) inside a Cloudflare Worker.\n *\n * Thin façade over {@link createClient}:\n * ```ts\n * createClient({\n * db: { d1: env.DB, sessionMode },\n * storage: { r2: env.FILES, prefix: storagePrefix },\n * url, key, ...\n * })\n * ```\n *\n * To switch between edge and gateway at runtime, prefer {@link createAthenaRuntime}.\n */\nexport function createCloudflareClient<\n const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n config: CloudflareAthenaClientConfigWithR2<TModels>,\n): CloudflareAthenaClientWithR2<TModels>\nexport function createCloudflareClient<\n const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(config: CloudflareAthenaClientConfig<TModels>): CloudflareAthenaClient<TModels>\nexport function createCloudflareClient<\n const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n config: CloudflareAthenaClientConfig<TModels>,\n): CloudflareAthenaClient<TModels> | CloudflareAthenaClientWithR2<TModels> {\n if (!config.d1 || typeof config.d1.prepare !== 'function') {\n throw new Error('createCloudflareClient requires a D1 binding with prepare()')\n }\n\n // Do not default `key` to the edge sentinel here. Pure edge-local still gets a\n // placeholder inside createClient materialization; hybrid (url present) must keep\n // key unset so resolveCore can use ATHENA_API_KEY / ATHENA_GATEWAY_API_KEY from env.\n const client = createClient({\n ...(config.key !== undefined && config.key !== null ? { key: config.key } : {}),\n client: config.client,\n models: config.models,\n headers: config.headers,\n context: config.context,\n env: config.env,\n retryReads: config.retryReads,\n debugAst: config.debugAst,\n findManyAst: config.findManyAst,\n traceQueries: config.traceQueries,\n db: {\n d1: config.d1,\n sessionMode: config.sessionMode,\n },\n ...(config.r2\n ? {\n storage: {\n r2: config.r2,\n prefix: config.storagePrefix,\n },\n }\n : {}),\n ...(config.url ? { url: config.url } : {}),\n ...(config.auth ? { auth: config.auth } : {}),\n })\n\n return client as CloudflareAthenaClient<TModels> | CloudflareAthenaClientWithR2<TModels>\n}\n","/**\n * Switchable Athena runtime façades over {@link createClient}.\n *\n * Prefer `createClient({ db: { d1 }, storage: { r2 }, mode, prefer, url, key })` directly.\n * These helpers only map Worker/top-level shapes onto that single constructor.\n *\n * @see docs/cloudflare-edge-local.md\n * @see ADR 0015 / 0016 / 0019\n */\n\nimport {\n createClient,\n type AthenaAuthConfig,\n type AthenaBillingConfig,\n type AthenaChatConfig,\n type AthenaClient,\n type AthenaClientConfig,\n type AthenaClientWithR2Storage,\n type AthenaDbConfig,\n type AthenaRequestContext,\n type AthenaRequestContextProvider,\n type AthenaStorageConfig,\n} from \"../v3-client.ts\";\nimport type { AthenaClientModelsInput } from \"../schema/types.ts\";\nimport type { AthenaDiagnosticsMode } from \"../diagnostics.ts\";\nimport type { AthenaQueryTraceOptions } from \"../client.ts\";\nimport type { AthenaGatewayClient } from \"../gateway/client.ts\";\nimport type { BackendConfig, BackendType } from \"../gateway/types.ts\";\nimport type { D1DatabaseLike, R2BucketLike } from \"./types.ts\";\nimport {\n ATHENA_EXECUTION_MODE_ENV_KEY,\n ATHENA_EXECUTION_PREFER_ENV_KEY,\n resolveAthenaExecutionMode,\n type AthenaExecutionMode,\n type AthenaExecutionPrefer,\n type AthenaResolvedExecutionMode,\n type ResolveAthenaExecutionModeInput,\n} from \"./execution-mode.ts\";\n\nexport {\n ATHENA_EXECUTION_MODE_ENV_KEY,\n ATHENA_EXECUTION_PREFER_ENV_KEY,\n resolveAthenaExecutionMode,\n type AthenaExecutionMode,\n type AthenaExecutionPrefer,\n type AthenaResolvedExecutionMode,\n type ResolveAthenaExecutionModeInput,\n};\n\nexport interface AthenaRuntimeConfig<\n TModels extends AthenaClientModelsInput | undefined = undefined,\n> {\n /**\n * `gateway` — HTTP to athena_rs (server).\n * `edge` — D1/R2 bindings in-process.\n * `auto` — edge when `d1` is set, else gateway when `url` / env URL is set.\n * Default: `auto` (overridable via `ATHENA_EXECUTION_MODE`).\n */\n mode?: AthenaExecutionMode | string | null;\n\n // --- Edge bindings (aliases for createClient db.d1 / storage.r2) ---\n d1?: D1DatabaseLike | null;\n r2?: R2BucketLike | null;\n storagePrefix?: string;\n sessionMode?: string | null;\n\n // --- Shared createClient fields ---\n url?: string | null;\n key?: string | null;\n client?: string | null;\n backend?: BackendConfig | BackendType;\n headers?: Record<string, string>;\n models?: TModels;\n env?: Record<string, string | undefined>;\n context?: AthenaRequestContext | AthenaRequestContextProvider;\n db?: AthenaDbConfig;\n auth?: AthenaAuthConfig;\n chat?: AthenaChatConfig;\n storage?: AthenaStorageConfig;\n billing?: AthenaBillingConfig;\n retryReads?: boolean;\n diagnostics?: AthenaDiagnosticsMode;\n traceQueries?: boolean | AthenaQueryTraceOptions;\n debugAst?: boolean;\n findManyAst?: boolean;\n gatewayTransport?: AthenaGatewayClient;\n /**\n * When `mode` is `auto` and both D1 and gateway URL are set, which wins.\n * Default `edge`. Also readable from env `ATHENA_EXECUTION_PREFER`.\n */\n prefer?: AthenaExecutionPrefer | string | null;\n}\n\nexport type AthenaRuntimeClient<\n TModels extends AthenaClientModelsInput | undefined = undefined,\n> = AthenaClient<TModels> | AthenaClientWithR2Storage<TModels>;\n\nexport interface AthenaRuntimeResult<\n TModels extends AthenaClientModelsInput | undefined = undefined,\n TClient extends AthenaRuntimeClient<TModels> = AthenaRuntimeClient<TModels>,\n> {\n mode: AthenaResolvedExecutionMode;\n client: TClient;\n capabilities: TClient[\"capabilities\"];\n}\n\nexport type AthenaRuntimeConfigWithR2<\n TModels extends AthenaClientModelsInput | undefined = undefined,\n> = AthenaRuntimeConfig<TModels> & { r2: R2BucketLike };\n\n/**\n * Canonical Worker / Pages `env` bindings recognized by {@link createAthenaFromWorkerEnv}.\n * Gateway URL keys align with {@link resolveAthenaExecutionMode} / createClient env resolution.\n */\nexport interface AthenaWorkerEnv {\n DB?: D1DatabaseLike | null;\n FILES?: R2BucketLike | null;\n ATHENA_URL?: string;\n /** Alias for gateway/DB HTTP base (same keys as createClient env). */\n ATHENA_DB_URL?: string;\n ATHENA_GATEWAY_URL?: string;\n NEXT_PUBLIC_ATHENA_URL?: string;\n NEXT_PUBLIC_ATHENA_DB_API_URL?: string;\n ATHENA_API_KEY?: string;\n /** Same aliases as createClient / resolveCore `ENV_KEY_KEYS`. */\n NEXT_PUBLIC_ATHENA_API_KEY?: string;\n ATHENA_GATEWAY_API_KEY?: string;\n X_API_KEY?: string;\n ATHENA_AUTH_URL?: string;\n ATHENA_CLIENT?: string;\n ATHENA_EXECUTION_MODE?: string;\n ATHENA_EXECUTION_PREFER?: string;\n [key: string]: unknown;\n}\n\n/** Env keys forwarded into createClient for gateway URL / mode resolution. */\nconst WORKER_GATEWAY_URL_ENV_KEYS = [\n \"ATHENA_URL\",\n \"NEXT_PUBLIC_ATHENA_URL\",\n \"ATHENA_DB_URL\",\n \"ATHENA_GATEWAY_URL\",\n \"NEXT_PUBLIC_ATHENA_DB_API_URL\",\n] as const;\n\n/**\n * API-key env keys accepted by resolveCore — keep Worker façade in lockstep\n * so gateway Workers can use any published alias, not only `ATHENA_API_KEY`.\n */\nconst WORKER_API_KEY_ENV_KEYS = [\n \"ATHENA_API_KEY\",\n \"NEXT_PUBLIC_ATHENA_API_KEY\",\n \"ATHENA_GATEWAY_API_KEY\",\n \"X_API_KEY\",\n] as const;\n\nfunction normalizeOptional(\n value: string | null | undefined,\n): string | undefined {\n const trimmed = value?.trim();\n return trimmed || undefined;\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\n/** Map runtime/Worker shape → {@link AthenaClientConfig} (single constructor input). */\nexport function toCreateClientConfig<\n TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaRuntimeConfig<TModels>): AthenaClientConfig<TModels> {\n const env = config.env ?? {};\n return {\n url: config.url,\n key: config.key ?? normalizeOptional(env.ATHENA_API_KEY),\n client: config.client ?? normalizeOptional(env.ATHENA_CLIENT),\n backend: config.backend,\n headers: config.headers,\n models: config.models,\n env,\n context: config.context,\n db: config.db,\n auth:\n config.auth ??\n (normalizeOptional(env.ATHENA_AUTH_URL)\n ? { url: env.ATHENA_AUTH_URL }\n : undefined),\n chat: config.chat,\n storage: config.storage,\n billing: config.billing,\n d1: config.d1,\n r2: config.r2,\n storagePrefix: config.storagePrefix,\n sessionMode: config.sessionMode,\n mode: config.mode,\n prefer: config.prefer,\n retryReads: config.retryReads,\n diagnostics: config.diagnostics,\n traceQueries: config.traceQueries,\n debugAst: config.debugAst,\n findManyAst: config.findManyAst,\n gatewayTransport: config.gatewayTransport,\n };\n}\n\nfunction resolveModeLabel(\n config: AthenaRuntimeConfig,\n client: AthenaClient,\n): AthenaResolvedExecutionMode {\n if (client.capabilities.mode === \"cloudflare-edge\") return \"edge\";\n // Prefer explicit resolution for gateway when bindings were intentionally ignored.\n try {\n return resolveAthenaExecutionMode({\n mode: config.mode,\n prefer: config.prefer,\n d1: config.d1 ?? config.db?.d1,\n url: config.url ?? config.db?.url,\n env: config.env,\n });\n } catch {\n return \"gateway\";\n }\n}\n\n/**\n * Create an Athena client for either gateway or edge execution.\n * Thin façade: always materializes via {@link createClient}.\n */\nexport function createAthenaRuntime<\n const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n config: AthenaRuntimeConfigWithR2<TModels> & {\n mode?: \"edge\" | \"auto\" | string | null;\n },\n): AthenaRuntimeResult<TModels, AthenaClientWithR2Storage<TModels>>;\nexport function createAthenaRuntime<\n const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(config: AthenaRuntimeConfig<TModels>): AthenaRuntimeResult<TModels>;\nexport function createAthenaRuntime<\n const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(config: AthenaRuntimeConfig<TModels>): AthenaRuntimeResult<TModels> {\n const clientConfig = toCreateClientConfig(config);\n // Fill url from env when omitted so mode resolution + gateway path work.\n if (!normalizeOptional(clientConfig.url as string | null | undefined)) {\n clientConfig.url =\n normalizeOptional(config.env?.ATHENA_URL) ??\n normalizeOptional(config.env?.NEXT_PUBLIC_ATHENA_URL);\n }\n if (!normalizeOptional(clientConfig.key as string | null | undefined)) {\n clientConfig.key = normalizeOptional(config.env?.ATHENA_API_KEY);\n }\n\n // Façade boundary: materialize through createClient, then present a stable\n // runtime result shape without re-expanding deep model generics.\n const client = createClient(\n clientConfig as AthenaClientConfig,\n ) as unknown as AthenaRuntimeClient<TModels>;\n const mode = resolveModeLabel(\n config as AthenaRuntimeConfig,\n client as unknown as AthenaClient,\n );\n return {\n mode,\n client,\n capabilities: client.capabilities,\n };\n}\n\nexport function createAthenaRuntimeClient<\n const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n config: AthenaRuntimeConfigWithR2<TModels> & {\n mode?: \"edge\" | \"auto\" | string | null;\n },\n): AthenaClientWithR2Storage<TModels>;\nexport function createAthenaRuntimeClient<\n const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(config: AthenaRuntimeConfig<TModels>): AthenaRuntimeClient<TModels>;\nexport function createAthenaRuntimeClient<\n const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(config: AthenaRuntimeConfig<TModels>): AthenaRuntimeClient<TModels> {\n return createAthenaRuntime(config).client;\n}\n\nexport type CreateAthenaFromWorkerEnvOptions<\n TModels extends AthenaClientModelsInput | undefined = undefined,\n> = Omit<\n AthenaRuntimeConfig<TModels>,\n \"d1\" | \"r2\" | \"url\" | \"key\" | \"env\" | \"auth\" | \"client\"\n> & {\n d1Binding?: string;\n r2Binding?: string;\n storagePrefix?: string;\n auth?: AthenaAuthConfig;\n client?: string | null;\n models?: TModels;\n};\n\n/**\n * One-call Worker setup: map standard `env` bindings, then {@link createClient}.\n */\nexport function createAthenaFromWorkerEnv<\n const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n workerEnv: AthenaWorkerEnv,\n options: CreateAthenaFromWorkerEnvOptions<TModels> = {},\n): AthenaRuntimeResult<TModels> {\n const {\n d1Binding = \"DB\",\n r2Binding = \"FILES\",\n storagePrefix = options.storagePrefix,\n ...rest\n } = options;\n\n const d1 = workerEnv[d1Binding] as D1DatabaseLike | null | undefined;\n const r2 = workerEnv[r2Binding] as R2BucketLike | null | undefined;\n\n const stringEnv: Record<string, string | undefined> = {\n ATHENA_AUTH_URL: asString(workerEnv.ATHENA_AUTH_URL),\n ATHENA_CLIENT: asString(workerEnv.ATHENA_CLIENT),\n [ATHENA_EXECUTION_MODE_ENV_KEY]: asString(workerEnv.ATHENA_EXECUTION_MODE),\n [ATHENA_EXECUTION_PREFER_ENV_KEY]: asString(\n workerEnv.ATHENA_EXECUTION_PREFER,\n ),\n };\n for (const key of WORKER_GATEWAY_URL_ENV_KEYS) {\n stringEnv[key] = asString(workerEnv[key]);\n }\n for (const key of WORKER_API_KEY_ENV_KEYS) {\n stringEnv[key] = asString(workerEnv[key]);\n }\n\n // Prefer explicit ATHENA_URL, then other supported gateway/DB URL env keys.\n let resolvedUrl: string | undefined;\n for (const key of WORKER_GATEWAY_URL_ENV_KEYS) {\n resolvedUrl = asString(workerEnv[key]);\n if (resolvedUrl) break;\n }\n\n // Prefer ATHENA_API_KEY, then the same aliases resolveCore accepts.\n let resolvedKey: string | undefined;\n for (const key of WORKER_API_KEY_ENV_KEYS) {\n resolvedKey = asString(workerEnv[key]);\n if (resolvedKey) break;\n }\n\n return createAthenaRuntime({\n ...rest,\n mode: rest.mode ?? asString(workerEnv.ATHENA_EXECUTION_MODE) ?? \"auto\",\n prefer: rest.prefer ?? asString(workerEnv.ATHENA_EXECUTION_PREFER),\n d1,\n ...(r2 ? { r2 } : {}),\n storagePrefix,\n url: resolvedUrl,\n key: resolvedKey,\n client: rest.client ?? asString(workerEnv.ATHENA_CLIENT),\n env: stringEnv,\n auth:\n options.auth ??\n (asString(workerEnv.ATHENA_AUTH_URL)\n ? { url: asString(workerEnv.ATHENA_AUTH_URL) }\n : undefined),\n });\n}\n"]}
|