@xylex-group/athena 2.1.2 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +306 -117
  2. package/dist/browser.cjs +2151 -194
  3. package/dist/browser.cjs.map +1 -1
  4. package/dist/browser.d.cts +14 -14
  5. package/dist/browser.d.ts +14 -14
  6. package/dist/browser.js +2146 -194
  7. package/dist/browser.js.map +1 -1
  8. package/dist/cli/index.cjs +2035 -172
  9. package/dist/cli/index.cjs.map +1 -1
  10. package/dist/cli/index.d.cts +3 -3
  11. package/dist/cli/index.d.ts +3 -3
  12. package/dist/cli/index.js +2036 -173
  13. package/dist/cli/index.js.map +1 -1
  14. package/dist/index.cjs +2166 -190
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.d.cts +7 -7
  17. package/dist/index.d.ts +7 -7
  18. package/dist/index.js +2162 -191
  19. package/dist/index.js.map +1 -1
  20. package/dist/{model-form-2hqmoOUX.d.ts → model-form-C0FAbOaf.d.ts} +97 -2
  21. package/dist/{model-form-Cy-zaO0u.d.cts → model-form-GzTqhEzM.d.cts} +97 -2
  22. package/dist/{pipeline-BOPszLsL.d.ts → pipeline-CR4V15jF.d.ts} +1 -1
  23. package/dist/{pipeline-E3FDbs4W.d.cts → pipeline-DZeExYMA.d.cts} +1 -1
  24. package/dist/{client-BX0NQqOn.d.ts → react-email-BuApZuyG.d.ts} +362 -174
  25. package/dist/{client-dpAp-NZK.d.cts → react-email-CQJq92zQ.d.cts} +362 -174
  26. package/dist/react.cjs +279 -21
  27. package/dist/react.cjs.map +1 -1
  28. package/dist/react.d.cts +4 -4
  29. package/dist/react.d.ts +4 -4
  30. package/dist/react.js +279 -21
  31. package/dist/react.js.map +1 -1
  32. package/dist/{types-BaBzjwXr.d.cts → types-09Q4D86N.d.cts} +24 -2
  33. package/dist/{types-BaBzjwXr.d.ts → types-09Q4D86N.d.ts} +24 -2
  34. package/dist/{types-CpqL-pZx.d.cts → types-D1JvL21V.d.cts} +1 -1
  35. package/dist/{types-CeBPrnGj.d.ts → types-DU3gNdFv.d.ts} +1 -1
  36. package/dist/utils.cjs +153 -0
  37. package/dist/utils.cjs.map +1 -0
  38. package/dist/utils.d.cts +23 -0
  39. package/dist/utils.d.ts +23 -0
  40. package/dist/utils.js +146 -0
  41. package/dist/utils.js.map +1 -0
  42. package/package.json +74 -16
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/gateway/errors.ts","../src/gateway/client.ts","../src/sql-identifiers.ts","../src/auth/client.ts","../src/auxiliaries.ts","../src/db/module.ts","../src/client.ts","../src/gateway/types.ts","../src/schema/definitions.ts","../src/schema/typed-client.ts","../src/schema/postgres-introspection-core.ts","../src/schema/postgres-provider.ts","../src/schema/model-form.ts","../src/generator/schema-selection.ts","../src/generator/config.ts","../src/generator/naming.ts","../src/generator/placeholders.ts","../src/generator/postgres-type-mapping.ts","../src/generator/renderer.ts","../src/generator/providers.ts","../src/generator/pipeline.ts"],"names":["identifier","FALLBACK_SDK_VERSION","SDK_NAME","SDK_VERSION","SDK_HEADER_VALUE","isRecord","normalizeHeaderValue","parseResponseBody","resolveRequestId","resolveErrorMessage","buildHeaders","token","sessions","message","kind","resolve","filterMethods","existsSync","readFileSync","pathToFileURL","posix","relationKey","mkdir","dirname","writeFile"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n AthenaGatewayEndpointPath,\n AthenaGatewayErrorCode,\n AthenaGatewayErrorDetails,\n AthenaGatewayMethod,\n AthenaGatewayResponse,\n} from './types.js'\n\nexport interface AthenaGatewayErrorInput {\n code: AthenaGatewayErrorCode\n message: string\n status?: number\n endpoint?: AthenaGatewayEndpointPath\n method?: AthenaGatewayMethod\n requestId?: string\n hint?: string\n cause?: string\n}\n\n/**\n * Canonical error for gateway failures.\n * Holds request context and machine-readable classification.\n */\nexport class AthenaGatewayError extends Error {\n readonly code: AthenaGatewayErrorCode\n readonly status: number\n readonly endpoint?: AthenaGatewayEndpointPath\n readonly method?: AthenaGatewayMethod\n readonly requestId?: string\n readonly hint?: string\n readonly causeDetail?: string\n\n constructor(input: AthenaGatewayErrorInput) {\n super(input.message)\n this.name = 'AthenaGatewayError'\n this.code = input.code\n this.status = input.status ?? 0\n this.endpoint = input.endpoint\n this.method = input.method\n this.requestId = input.requestId\n this.hint = input.hint\n this.causeDetail = input.cause\n }\n\n toDetails(): AthenaGatewayErrorDetails {\n return {\n code: this.code,\n message: this.message,\n status: this.status,\n endpoint: this.endpoint,\n method: this.method,\n requestId: this.requestId,\n hint: this.hint,\n cause: this.causeDetail,\n }\n }\n\n static fromResponse<T>(\n response: AthenaGatewayResponse<T>,\n fallback: Omit<AthenaGatewayErrorInput, 'code' | 'message' | 'status'>,\n ) {\n const details = response.errorDetails\n if (details) {\n return new AthenaGatewayError({\n code: details.code,\n message: details.message,\n status: details.status,\n endpoint: details.endpoint ?? fallback.endpoint,\n method: details.method ?? fallback.method,\n requestId: details.requestId ?? fallback.requestId,\n hint: details.hint,\n cause: details.cause,\n })\n }\n\n return new AthenaGatewayError({\n code: 'HTTP_ERROR',\n message: response.error ?? 'Gateway request failed',\n status: response.status,\n endpoint: fallback.endpoint,\n method: fallback.method,\n requestId: fallback.requestId,\n })\n }\n}\n\nexport function isAthenaGatewayError(error: unknown): error is AthenaGatewayError {\n return error instanceof AthenaGatewayError\n}\n","import type {\r\n AthenaGatewayBaseOptions,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayEndpointPath,\r\n AthenaGatewayErrorDetails,\r\n AthenaGatewayMethod,\r\n AthenaRpcCallOptions,\r\n AthenaRpcPayload,\r\n AthenaGatewayResponse,\r\n} from \"./types.js\";\r\nimport type {\r\n AthenaDeletePayload,\r\n AthenaFetchPayload,\r\n AthenaInsertPayload,\r\n AthenaRpcFilter,\r\n AthenaUpdatePayload,\r\n AthenaQueryPayload,\r\n} from \"./types.js\";\r\nimport { AthenaGatewayError } from \"./errors.ts\";\r\n\r\nconst DEFAULT_BASE_URL = \"https://athena-db.com\";\r\nconst DEFAULT_CLIENT = \"railway_direct\";\r\nconst FALLBACK_SDK_VERSION = \"1.3.0\";\r\nconst SDK_NAME = \"xylex-group/athena\";\r\n\r\nconst SDK_VERSION =\r\n typeof process !== \"undefined\" && process?.env?.npm_package_version\r\n ? process.env.npm_package_version\r\n : FALLBACK_SDK_VERSION;\r\nconst SDK_HEADER_VALUE = `${SDK_NAME} ${SDK_VERSION}`;\r\n\r\nfunction parseResponseBody(rawText: string, contentType: string | null) {\r\n if (!rawText) {\r\n return { parsed: null as unknown, parseFailed: false };\r\n }\r\n\r\n const contentTypeSuggestsJson =\r\n contentType?.toLowerCase().includes(\"application/json\") ?? false;\r\n const looksJson =\r\n contentTypeSuggestsJson || rawText.startsWith(\"{\") || rawText.startsWith(\"[\");\r\n\r\n if (!looksJson) {\r\n return { parsed: rawText as unknown, parseFailed: false };\r\n }\r\n\r\n try {\r\n return { parsed: JSON.parse(rawText) as unknown, parseFailed: false };\r\n } catch {\r\n return { parsed: rawText as unknown, parseFailed: true };\r\n }\r\n}\r\n\r\nfunction normalizeHeaderValue(value?: string | null) {\r\n return value ? value : undefined;\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\r\n}\r\n\r\nfunction resolveRequestId(headers: Headers): string | undefined {\r\n return (\r\n headers.get(\"x-request-id\") ??\r\n headers.get(\"x-correlation-id\") ??\r\n headers.get(\"x-athena-request-id\") ??\r\n undefined\r\n );\r\n}\r\n\r\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\r\n if (isRecord(payload)) {\r\n const messageCandidates = [payload.error, payload.message, payload.details];\r\n for (const candidate of messageCandidates) {\r\n if (typeof candidate === \"string\" && candidate.trim().length > 0) {\r\n return candidate.trim();\r\n }\r\n }\r\n }\r\n\r\n if (typeof payload === \"string\" && payload.trim().length > 0) {\r\n return payload.trim();\r\n }\r\n\r\n return fallback;\r\n}\r\n\r\nfunction detailsFromError(error: AthenaGatewayError): AthenaGatewayErrorDetails {\r\n return error.toDetails();\r\n}\r\n\r\nfunction toQueryScalar(value: unknown): string {\r\n if (value === null || value === undefined) return \"null\";\r\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\r\n if (typeof value === \"number\") return Number.isFinite(value) ? String(value) : \"null\";\r\n return String(value);\r\n}\r\n\r\nfunction toQueryArray(values: unknown[]): string {\r\n return `{${values.map(toQueryScalar).join(\",\")}}`;\r\n}\r\n\r\nfunction toRpcArgumentQueryValue(value: unknown): string {\r\n if (Array.isArray(value)) return toQueryArray(value);\r\n if (value && typeof value === \"object\") return JSON.stringify(value);\r\n return toQueryScalar(value);\r\n}\r\n\r\nfunction toRpcFilterQueryValue(filter: AthenaRpcFilter): string {\r\n const value = filter.value;\r\n switch (filter.operator) {\r\n case \"in\": {\r\n if (!Array.isArray(value)) {\r\n throw new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message: `RPC filter \"${filter.column}\" with operator \"in\" requires an array value`,\r\n status: 0,\r\n });\r\n }\r\n return `in.${toQueryArray(value)}`;\r\n }\r\n case \"is\":\r\n return `is.${toQueryScalar(value)}`;\r\n case \"eq\":\r\n case \"neq\":\r\n case \"gt\":\r\n case \"gte\":\r\n case \"lt\":\r\n case \"lte\":\r\n case \"like\":\r\n case \"ilike\":\r\n return `${filter.operator}.${toQueryScalar(value)}`;\r\n }\r\n}\r\n\r\nfunction buildRpcGetEndpoint(payload: AthenaRpcPayload): AthenaGatewayEndpointPath {\r\n const functionName = (payload.function_name ?? payload.function).trim();\r\n if (!functionName) {\r\n throw new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message: \"rpc requires a function name\",\r\n status: 0,\r\n endpoint: \"/gateway/rpc\",\r\n method: \"GET\",\r\n });\r\n }\r\n\r\n const query = new URLSearchParams();\r\n if (payload.schema) query.set(\"schema\", payload.schema);\r\n if (payload.select) query.set(\"select\", payload.select);\r\n if (payload.count) query.set(\"count\", payload.count);\r\n if (payload.head) query.set(\"head\", \"true\");\r\n if (typeof payload.limit === \"number\") query.set(\"limit\", String(payload.limit));\r\n if (typeof payload.offset === \"number\") query.set(\"offset\", String(payload.offset));\r\n if (payload.order?.column) {\r\n query.set(\r\n \"order\",\r\n payload.order.ascending === false\r\n ? `${payload.order.column}.desc`\r\n : payload.order.column,\r\n );\r\n }\r\n\r\n if (payload.args) {\r\n for (const [key, value] of Object.entries(payload.args)) {\r\n query.set(key, toRpcArgumentQueryValue(value));\r\n }\r\n }\r\n\r\n if (payload.filters?.length) {\r\n for (const filter of payload.filters) {\r\n if (payload.args && Object.prototype.hasOwnProperty.call(payload.args, filter.column)) {\r\n throw new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message: `RPC filter \"${filter.column}\" conflicts with RPC argument \"${filter.column}\" in GET mode`,\r\n status: 0,\r\n });\r\n }\r\n query.set(filter.column, toRpcFilterQueryValue(filter));\r\n }\r\n }\r\n\r\n const endpoint = `/rpc/${encodeURIComponent(functionName)}`;\r\n const queryText = query.toString();\r\n const withQuery = queryText ? `${endpoint}?${queryText}` : endpoint;\r\n return withQuery as AthenaGatewayEndpointPath;\r\n}\r\n\r\nfunction buildHeaders(\r\n config: AthenaGatewayBaseOptions,\r\n options?: AthenaGatewayCallOptions,\r\n): Record<string, string> {\r\n const mergedStripNulls = options?.stripNulls ?? true;\r\n const extraHeaders = {\r\n ...(config.headers ?? {}),\r\n ...(options?.headers ?? {}),\r\n };\r\n const headerClient =\r\n extraHeaders[\"x-athena-client\"] ?? extraHeaders[\"X-Athena-Client\"];\r\n const finalClient =\r\n options?.client ??\r\n config.client ??\r\n (typeof headerClient === \"string\" ? headerClient : undefined) ??\r\n DEFAULT_CLIENT;\r\n const finalApiKey = options?.apiKey ?? config.apiKey;\r\n const finalPublishEvent = options?.publishEvent ?? config.publishEvent;\r\n\r\n const headers: Record<string, string> = {\r\n \"Content-Type\": \"application/json\",\r\n \"X-Athena-Sdk\": SDK_HEADER_VALUE,\r\n };\r\n\r\n if (options?.userId ?? config.userId) {\r\n headers[\"X-User-Id\"] = options?.userId ?? config.userId ?? \"\";\r\n }\r\n\r\n if (options?.organizationId ?? config.organizationId) {\r\n headers[\"X-Organization-Id\"] =\r\n options?.organizationId ?? config.organizationId ?? \"\";\r\n }\r\n\r\n if (finalClient) {\r\n headers[\"X-Athena-Client\"] = finalClient;\r\n }\r\n\r\n const finalBackend = options?.backend ?? config.backend;\r\n if (finalBackend) {\r\n const type =\r\n typeof finalBackend === \"string\" ? finalBackend : finalBackend.type;\r\n if (type) headers[\"X-Backend-Type\"] = type;\r\n }\r\n\r\n if (typeof mergedStripNulls === \"boolean\") {\r\n headers[\"X-Strip-Nulls\"] = mergedStripNulls ? \"true\" : \"false\";\r\n }\r\n\r\n if (finalPublishEvent) {\r\n headers[\"X-Publish-Event\"] = finalPublishEvent;\r\n }\r\n\r\n if (finalApiKey) {\r\n headers[\"apikey\"] = finalApiKey;\r\n headers[\"x-api-key\"] = headers[\"x-api-key\"] ?? finalApiKey;\r\n }\r\n\r\n const athenaClientKeys = [\"x-athena-client\", \"X-Athena-Client\"];\r\n Object.entries(extraHeaders).forEach(([key, value]) => {\r\n if (athenaClientKeys.includes(key)) return;\r\n const normalized = normalizeHeaderValue(value);\r\n if (normalized) {\r\n headers[key] = normalized;\r\n }\r\n });\r\n\r\n return headers;\r\n}\r\n\r\nasync function callAthena<T>(\r\n config: AthenaGatewayBaseOptions,\r\n endpoint: AthenaGatewayEndpointPath,\r\n method: AthenaGatewayMethod,\r\n payload: unknown,\r\n options?: AthenaGatewayCallOptions,\r\n): Promise<AthenaGatewayResponse<T>> {\r\n const baseUrl = (\r\n options?.baseUrl ??\r\n config.baseUrl ??\r\n DEFAULT_BASE_URL\r\n ).replace(/\\/$/, \"\");\r\n const url = `${baseUrl}${endpoint}`;\r\n const headers = buildHeaders(config, options);\r\n\r\n try {\r\n const requestInit: RequestInit = {\r\n method,\r\n headers,\r\n };\r\n if (method !== \"GET\") {\r\n requestInit.body = JSON.stringify(payload);\r\n }\r\n\r\n const response = await fetch(url, requestInit);\r\n\r\n const rawText = await response.text();\r\n const requestId = resolveRequestId(response.headers);\r\n const parsedBody = parseResponseBody(\r\n rawText ?? \"\",\r\n response.headers.get(\"content-type\"),\r\n );\r\n\r\n if (parsedBody.parseFailed) {\r\n const invalidJsonError = new AthenaGatewayError({\r\n code: \"INVALID_JSON\",\r\n message: \"Gateway returned malformed JSON\",\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n hint: \"Verify the gateway response body is valid JSON.\",\r\n cause: rawText.slice(0, 300),\r\n });\r\n return {\r\n ok: false,\r\n status: response.status,\r\n data: null,\r\n error: invalidJsonError.message,\r\n errorDetails: detailsFromError(invalidJsonError),\r\n raw: parsedBody.parsed,\r\n };\r\n }\r\n\r\n const parsed = parsedBody.parsed;\r\n const parsedPayload = isRecord(parsed) ? parsed : null;\r\n\r\n if (!response.ok) {\r\n const httpError = new AthenaGatewayError({\r\n code: \"HTTP_ERROR\",\r\n message: resolveErrorMessage(\r\n parsed,\r\n `Athena gateway ${method} ${endpoint} failed with status ${response.status}`,\r\n ),\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n });\r\n\r\n return {\r\n ok: false,\r\n status: response.status,\r\n data: null,\r\n error: httpError.message,\r\n errorDetails: detailsFromError(httpError),\r\n raw: parsed,\r\n };\r\n }\r\n\r\n // Unwrap envelope: API may return { data: [...], error: null } (e.g. when cached)\r\n // vs raw array when uncached. Use inner data when present to avoid double nesting.\r\n const payloadData =\r\n parsedPayload && \"data\" in parsedPayload\r\n ? (parsedPayload.data as T)\r\n : (parsed as T);\r\n const payloadCount =\r\n parsedPayload && \"count\" in parsedPayload\r\n ? typeof parsedPayload.count === \"number\" || parsedPayload.count === null\r\n ? (parsedPayload.count as number | null)\r\n : undefined\r\n : undefined;\r\n\r\n return {\r\n ok: true,\r\n status: response.status,\r\n data: payloadData ?? null,\r\n count: payloadCount,\r\n error: undefined,\r\n errorDetails: null,\r\n raw: parsed,\r\n };\r\n } catch (callError) {\r\n const message = callError instanceof Error ? callError.message : String(callError);\r\n const networkError = new AthenaGatewayError({\r\n code: \"NETWORK_ERROR\",\r\n message: `Network error while calling ${method} ${endpoint}: ${message}`,\r\n endpoint,\r\n method,\r\n cause: message,\r\n hint: \"Check gateway URL, DNS, and network reachability.\",\r\n });\r\n return {\r\n ok: false,\r\n status: 0,\r\n data: null,\r\n error: networkError.message,\r\n errorDetails: detailsFromError(networkError),\r\n raw: null,\r\n };\r\n }\r\n}\r\n\r\nexport interface AthenaGatewayClient {\r\n baseUrl: string;\r\n buildHeaders(options?: AthenaGatewayCallOptions): Record<string, string>;\r\n fetchGateway<T>(\r\n payload: AthenaFetchPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n insertGateway<T>(\r\n payload: AthenaInsertPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n updateGateway<T>(\r\n payload: AthenaUpdatePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n deleteGateway<T>(\r\n payload: AthenaDeletePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n rpcGateway<T>(\r\n payload: AthenaRpcPayload,\r\n options?: AthenaRpcCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n queryGateway<T>(\r\n payload: AthenaQueryPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n}\r\n\r\nexport function createAthenaGatewayClient(\r\n config: AthenaGatewayBaseOptions = {},\r\n): AthenaGatewayClient {\r\n return {\r\n baseUrl: (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\"),\r\n buildHeaders(options) {\r\n return buildHeaders(config, options);\r\n },\r\n fetchGateway(payload, options) {\r\n return callAthena(config, \"/gateway/fetch\", \"POST\", payload, options);\r\n },\r\n insertGateway(payload, options) {\r\n return callAthena(config, \"/gateway/insert\", \"PUT\", payload, options);\r\n },\r\n updateGateway(payload, options) {\r\n return callAthena(config, \"/gateway/update\", \"POST\", payload, options);\r\n },\r\n deleteGateway(payload, options) {\r\n return callAthena(config, \"/gateway/delete\", \"DELETE\", payload, options);\r\n },\r\n rpcGateway(payload, options) {\r\n if (options?.get) {\r\n const endpoint = buildRpcGetEndpoint(payload);\r\n return callAthena(config, endpoint, \"GET\", null, options);\r\n }\r\n return callAthena(config, \"/gateway/rpc\", \"POST\", payload, options);\r\n },\r\n queryGateway(payload, options) {\r\n return callAthena(config, \"/gateway/query\", \"POST\", payload, options);\r\n },\r\n };\r\n}\r\n","const SIMPLE_IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/\r\nconst COMPOSITE_IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$/\r\nconst ALIAS_PATTERN = /^([A-Za-z_][A-Za-z0-9_.]*)\\s+(?:as\\s+)?([A-Za-z_][A-Za-z0-9_]*)$/i\r\n\r\nfunction quoteIdentifierSegment(identifier: string): string {\r\n return `\"${identifier.replace(/\"/g, '\"\"')}\"`\r\n}\r\n\r\n/**\r\n * Quotes a `schema.table.column`-style identifier path safely for SQL.\r\n */\r\nexport function quoteQualifiedIdentifier(identifier: string): string {\r\n return identifier\r\n .split('.')\r\n .map(segment => quoteIdentifierSegment(segment))\r\n .join('.')\r\n}\r\n\r\nfunction quoteSelectToken(token: string): string {\r\n if (token === '*') return token\r\n if (COMPOSITE_IDENTIFIER_PATTERN.test(token)) {\r\n return quoteQualifiedIdentifier(token)\r\n }\r\n\r\n const aliasMatch = ALIAS_PATTERN.exec(token)\r\n if (!aliasMatch) {\r\n return token\r\n }\r\n\r\n const [, baseIdentifier, aliasIdentifier] = aliasMatch\r\n if (!COMPOSITE_IDENTIFIER_PATTERN.test(baseIdentifier) || !SIMPLE_IDENTIFIER_PATTERN.test(aliasIdentifier)) {\r\n return token\r\n }\r\n return `${quoteQualifiedIdentifier(baseIdentifier)} AS ${quoteIdentifierSegment(aliasIdentifier)}`\r\n}\r\n\r\nfunction canAutoQuoteToken(token: string): boolean {\r\n if (token === '*') return true\r\n if (COMPOSITE_IDENTIFIER_PATTERN.test(token)) return true\r\n\r\n const aliasMatch = ALIAS_PATTERN.exec(token)\r\n if (!aliasMatch) return false\r\n const [, baseIdentifier, aliasIdentifier] = aliasMatch\r\n return COMPOSITE_IDENTIFIER_PATTERN.test(baseIdentifier) && SIMPLE_IDENTIFIER_PATTERN.test(aliasIdentifier)\r\n}\r\n\r\nfunction splitTopLevelCommaSeparated(input: string): string[] | null {\r\n const parts: string[] = []\r\n let buffer = ''\r\n let singleQuoted = false\r\n let doubleQuoted = false\r\n let depth = 0\r\n\r\n for (let index = 0; index < input.length; index += 1) {\r\n const char = input[index]\r\n const next = index + 1 < input.length ? input[index + 1] : ''\r\n\r\n if (singleQuoted) {\r\n buffer += char\r\n if (char === \"'\" && next === \"'\") {\r\n buffer += next\r\n index += 1\r\n continue\r\n }\r\n if (char === \"'\") {\r\n singleQuoted = false\r\n }\r\n continue\r\n }\r\n\r\n if (doubleQuoted) {\r\n buffer += char\r\n if (char === '\"' && next === '\"') {\r\n buffer += next\r\n index += 1\r\n continue\r\n }\r\n if (char === '\"') {\r\n doubleQuoted = false\r\n }\r\n continue\r\n }\r\n\r\n if (char === \"'\") {\r\n singleQuoted = true\r\n buffer += char\r\n continue\r\n }\r\n if (char === '\"') {\r\n doubleQuoted = true\r\n buffer += char\r\n continue\r\n }\r\n\r\n if (char === '(') {\r\n depth += 1\r\n buffer += char\r\n continue\r\n }\r\n if (char === ')') {\r\n depth -= 1\r\n if (depth < 0) return null\r\n buffer += char\r\n continue\r\n }\r\n\r\n if (char === ',' && depth === 0) {\r\n parts.push(buffer.trim())\r\n buffer = ''\r\n continue\r\n }\r\n\r\n buffer += char\r\n }\r\n\r\n if (singleQuoted || doubleQuoted || depth !== 0) {\r\n return null\r\n }\r\n\r\n if (buffer.trim().length > 0) {\r\n parts.push(buffer.trim())\r\n }\r\n\r\n return parts\r\n}\r\n\r\n/**\r\n * Quotes identifier lists while preserving raw SQL expressions.\r\n *\r\n * Examples:\r\n * - `\"table, user\"` -> `\"\\\"table\\\", \\\"user\\\"\"`\r\n * - `concat(name, ',') as label, id` -> unchanged\r\n */\r\nexport function quoteSelectColumnsExpression(columns: string): string {\r\n const trimmed = columns.trim()\r\n if (!trimmed || trimmed === '*') return trimmed || '*'\r\n\r\n const tokens = splitTopLevelCommaSeparated(trimmed)\r\n if (!tokens || tokens.length === 0) {\r\n return trimmed\r\n }\r\n\r\n if (!tokens.every(canAutoQuoteToken)) {\r\n return trimmed\r\n }\r\n\r\n return tokens.map(quoteSelectToken).join(', ')\r\n}\r\n\r\n/**\r\n * Immutable identifier object with consistent SQL rendering.\r\n */\r\nexport interface SqlIdentifier {\r\n readonly segments: string[]\r\n toSql(): string\r\n toString(): string\r\n}\r\n\r\nclass SqlIdentifierPath implements SqlIdentifier {\r\n readonly segments: string[]\r\n\r\n constructor(segments: string[]) {\r\n this.segments = segments\r\n }\r\n\r\n toSql(): string {\r\n return this.segments.map(quoteIdentifierSegment).join('.')\r\n }\r\n\r\n toString(): string {\r\n return this.toSql()\r\n }\r\n}\r\n\r\n/**\r\n * Creates a quoted identifier object from segment or dotted inputs.\r\n */\r\nexport function identifier(...segments: string[]): SqlIdentifier {\r\n const expandedSegments = segments\r\n .flatMap(segment => segment.split('.'))\r\n .map(segment => segment.trim())\r\n .filter(segment => segment.length > 0)\r\n\r\n return new SqlIdentifierPath(expandedSegments)\r\n}\r\n\r\n","import type {\n AthenaAdminRevokeUserSessionRequest,\n AthenaAdminRevokeUserSessionsRequest,\n AthenaAdminSuccessResponse,\n AthenaAdminHasPermissionResponse,\n AthenaApiKeyDeleteAllExpiredResponse,\n AthenaAuthCallOptions,\n AthenaAuthClientConfig,\n AthenaAuthEndpointPath,\n AthenaAuthErrorCode,\n AthenaAuthErrorDetails,\n AthenaAuthFetchCompatibleInput,\n AthenaAuthGenericInput,\n AthenaAuthGenericQueryInput,\n AthenaAuthBindings,\n AthenaAuthEmailListQuery,\n AthenaAuthEmailListResponse,\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,\r\n AthenaAuthResult,\r\n AthenaAuthSdkClient,\r\n AthenaAuthSession,\r\n AthenaAuthSessionResponse,\r\n AthenaAuthSignInResponse,\r\n AthenaAuthSignOutResponse,\r\n AthenaAuthSocialRedirectResponse,\r\n AthenaAuthStatusResponse,\r\n AthenaAuthUser,\r\n AthenaChangeEmailRequest,\r\n AthenaChangePasswordRequest,\r\n AthenaDeleteUserCallbackRequest,\r\n AthenaDeleteUserRequest,\r\n AthenaDeleteUserResponse,\r\n AthenaEmailSignInRequest,\r\n AthenaEmailSignUpRequest,\r\n AthenaForgetPasswordRequest,\r\n AthenaLinkSocialRequest,\r\n AthenaOAuthAccountTokenRequest,\r\n AthenaOAuthTokenBundle,\r\n AthenaResetPasswordRequest,\r\n AthenaSendVerificationEmailRequest,\r\n AthenaSocialSignInRequest,\n AthenaTwoFactorGenerateBackupCodesRequest,\n AthenaTwoFactorGenerateBackupCodesResponse,\n AthenaUnlinkAccountRequest,\n AthenaUpdateUserRequest,\n AthenaVerifyEmailRequest,\n AthenaUsernameSignInRequest,\n} from './types.ts'\n\r\nconst DEFAULT_AUTH_BASE_URL = 'http://localhost:3001/api/auth'\r\nconst FALLBACK_SDK_VERSION = '1.0.0'\r\nconst SDK_NAME = 'xylex-group/athena-auth'\r\n\r\nconst SDK_VERSION =\r\n typeof process !== 'undefined' && process?.env?.npm_package_version\r\n ? process.env.npm_package_version\r\n : FALLBACK_SDK_VERSION\r\nconst SDK_HEADER_VALUE = `${SDK_NAME} ${SDK_VERSION}`\r\n\r\ntype AuthRequestContext = {\r\n endpoint: AthenaAuthEndpointPath\r\n method: AthenaAuthMethod\r\n}\r\n\r\ntype InternalErrorInput = AuthRequestContext & {\r\n code: AthenaAuthErrorCode\r\n status: number\r\n message: string\r\n requestId?: string\r\n hint?: string\r\n cause?: string\r\n}\r\n\r\nfunction normalizeBaseUrl(baseUrl?: string): string {\r\n return (baseUrl ?? DEFAULT_AUTH_BASE_URL).replace(/\\/$/, '')\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction normalizeHeaderValue(value?: string | null): string | undefined {\r\n return value ? value : undefined\r\n}\r\n\r\nfunction parseResponseBody(rawText: string, contentType: string | null) {\r\n if (!rawText) {\r\n return { parsed: null as unknown, parseFailed: false }\r\n }\r\n\r\n const contentTypeSuggestsJson =\r\n contentType?.toLowerCase().includes('application/json') ?? false\r\n const looksJson =\r\n contentTypeSuggestsJson || rawText.startsWith('{') || rawText.startsWith('[')\r\n\r\n if (!looksJson) {\r\n return { parsed: rawText as unknown, parseFailed: false }\r\n }\r\n\r\n try {\r\n return { parsed: JSON.parse(rawText) as unknown, parseFailed: false }\r\n } catch {\r\n return { parsed: rawText as unknown, parseFailed: true }\r\n }\r\n}\r\n\r\nfunction resolveRequestId(headers: Headers): string | undefined {\r\n return (\r\n headers.get('x-request-id') ??\r\n headers.get('x-correlation-id') ??\r\n headers.get('x-athena-request-id') ??\r\n undefined\r\n )\r\n}\r\n\r\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\r\n if (isRecord(payload)) {\r\n const messageCandidates = [payload.error, payload.message, payload.details]\r\n for (const candidate of messageCandidates) {\r\n if (typeof candidate === 'string' && candidate.trim().length > 0) {\r\n return candidate.trim()\r\n }\r\n }\r\n }\r\n\r\n if (typeof payload === 'string' && payload.trim().length > 0) {\r\n return payload.trim()\r\n }\r\n\r\n return fallback\r\n}\r\n\r\nfunction toErrorDetails(input: InternalErrorInput): AthenaAuthErrorDetails {\r\n return {\r\n code: input.code,\r\n message: input.message,\r\n status: input.status,\r\n endpoint: input.endpoint,\r\n method: input.method,\r\n requestId: input.requestId,\r\n hint: input.hint,\r\n cause: input.cause,\r\n }\r\n}\r\n\r\nfunction mergeCallOptions(\r\n base?: AthenaAuthCallOptions,\r\n override?: AthenaAuthCallOptions,\r\n): AthenaAuthCallOptions | undefined {\r\n if (!base && !override) return undefined\r\n return {\r\n ...base,\r\n ...override,\r\n headers: {\r\n ...(base?.headers ?? {}),\r\n ...(override?.headers ?? {}),\r\n },\r\n }\r\n}\r\n\r\nfunction extractFetchOptions<T extends AthenaAuthFetchCompatibleInput | undefined>(input: T) {\r\n if (!input) {\r\n return {\r\n payload: undefined,\r\n fetchOptions: undefined,\r\n }\r\n }\r\n\r\n const { fetchOptions, ...rest } = input\r\n const hasPayloadKeys = Object.keys(rest).length > 0\r\n return {\r\n payload: hasPayloadKeys ? rest : undefined,\r\n fetchOptions,\r\n }\r\n}\r\n\r\nfunction buildHeaders(\r\n config: AthenaAuthClientConfig,\r\n options?: AthenaAuthCallOptions,\r\n): Record<string, string> {\r\n const headers: Record<string, string> = {\r\n 'Content-Type': 'application/json',\r\n 'X-Athena-Sdk': SDK_HEADER_VALUE,\r\n }\r\n\r\n const apiKey = options?.apiKey ?? config.apiKey\r\n if (apiKey) {\r\n headers.apikey = apiKey\r\n headers['x-api-key'] = apiKey\r\n }\r\n\r\n const bearerToken = options?.bearerToken ?? config.bearerToken\r\n if (bearerToken) {\r\n headers.Authorization = `Bearer ${bearerToken}`\r\n }\r\n\r\n const mergedExtraHeaders = {\r\n ...(config.headers ?? {}),\r\n ...(options?.headers ?? {}),\r\n }\r\n\r\n Object.entries(mergedExtraHeaders).forEach(([key, value]) => {\r\n const normalized = normalizeHeaderValue(value)\r\n if (normalized) {\r\n headers[key] = normalized\r\n }\r\n })\r\n\r\n return headers\r\n}\r\n\r\nfunction appendQueryParam(searchParams: URLSearchParams, key: string, value: AthenaAuthQueryValue) {\r\n if (value === undefined || value === null) return\r\n if (Array.isArray(value)) {\r\n value.forEach(item => {\r\n searchParams.append(key, String(item))\r\n })\r\n return\r\n }\r\n searchParams.append(key, String(value))\r\n}\r\n\r\nfunction buildRequestUrl(\r\n baseUrl: string,\r\n endpoint: AthenaAuthEndpointPath,\r\n query?: Record<string, AthenaAuthQueryValue>,\r\n) {\r\n const url = `${baseUrl}${endpoint}`\r\n if (!query || Object.keys(query).length === 0) return url\r\n const searchParams = new URLSearchParams()\r\n Object.entries(query).forEach(([key, value]) => appendQueryParam(searchParams, key, value))\r\n const queryText = searchParams.toString()\r\n return queryText ? `${url}?${queryText}` : url\r\n}\r\n\r\nfunction inferDefaultMethod(endpoint: AthenaAuthEndpointPath): AthenaAuthMethod {\r\n if (endpoint.startsWith('/reset-password/')) {\r\n return 'GET'\r\n }\r\n\r\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:\r\n return 'POST'\r\n }\r\n}\r\n\r\nasync function callAuthEndpoint<T>(\r\n config: AthenaAuthClientConfig,\r\n context: AuthRequestContext,\r\n body?: unknown,\r\n query?: Record<string, AthenaAuthQueryValue>,\r\n options?: AthenaAuthCallOptions,\r\n): Promise<AthenaAuthResult<T>> {\r\n const baseUrl = normalizeBaseUrl(options?.baseUrl ?? config.baseUrl)\r\n const url = buildRequestUrl(baseUrl, context.endpoint, query)\r\n const headers = buildHeaders(config, options)\r\n const credentials = options?.credentials ?? config.credentials ?? 'include'\r\n const requestInit: RequestInit = {\r\n method: context.method,\r\n headers,\r\n credentials,\r\n signal: options?.signal,\r\n }\r\n\r\n if (context.method !== 'GET') {\r\n requestInit.body = JSON.stringify(body ?? {})\r\n }\r\n\r\n const fetcher = config.fetch ?? globalThis.fetch\r\n if (!fetcher) {\r\n const details = toErrorDetails({\r\n code: 'UNKNOWN_ERROR',\r\n message: 'No fetch implementation available for auth client',\r\n status: 0,\r\n endpoint: context.endpoint,\r\n method: context.method,\r\n hint: 'Use Node 18+ or provide `fetch` via createClient(..., { auth: { fetch } }) or createAuthClient({ fetch })',\n })\r\n return {\r\n ok: false,\r\n status: 0,\r\n data: null,\r\n error: details.message,\r\n errorDetails: details,\r\n raw: null,\r\n }\r\n }\r\n\r\n try {\r\n const response = await fetcher(url, requestInit)\r\n const rawText = await response.text()\r\n const requestId = resolveRequestId(response.headers)\r\n const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\r\n\r\n if (parsedBody.parseFailed) {\r\n const details = toErrorDetails({\r\n code: 'INVALID_JSON',\r\n message: 'Auth server returned malformed JSON',\r\n status: response.status,\r\n endpoint: context.endpoint,\r\n method: context.method,\r\n requestId,\r\n hint: 'Verify the auth endpoint response body is valid JSON.',\r\n cause: rawText.slice(0, 300),\r\n })\r\n return {\r\n ok: false,\r\n status: response.status,\r\n data: null,\r\n error: details.message,\r\n errorDetails: details,\r\n raw: parsedBody.parsed,\r\n }\r\n }\r\n\r\n const parsed = parsedBody.parsed\r\n\r\n if (!response.ok) {\r\n const details = toErrorDetails({\r\n code: 'HTTP_ERROR',\r\n message: resolveErrorMessage(\r\n parsed,\r\n `Auth endpoint ${context.method} ${context.endpoint} failed with status ${response.status}`,\r\n ),\r\n status: response.status,\r\n endpoint: context.endpoint,\r\n method: context.method,\r\n requestId,\r\n })\r\n return {\r\n ok: false,\r\n status: response.status,\r\n data: null,\r\n error: details.message,\r\n errorDetails: details,\r\n raw: parsed,\r\n }\r\n }\r\n\r\n return {\r\n ok: true,\r\n status: response.status,\r\n data: (parsed as T) ?? null,\r\n error: null,\r\n errorDetails: null,\r\n raw: parsed,\r\n }\r\n } catch (callError) {\r\n const message = callError instanceof Error ? callError.message : String(callError)\r\n const details = toErrorDetails({\r\n code: 'NETWORK_ERROR',\r\n message: `Network error while calling ${context.method} ${context.endpoint}: ${message}`,\r\n status: 0,\r\n endpoint: context.endpoint,\r\n method: context.method,\r\n cause: message,\r\n hint: 'Check auth server URL, DNS, and network reachability.',\r\n })\r\n return {\r\n ok: false,\r\n status: 0,\r\n data: null,\r\n error: details.message,\r\n errorDetails: details,\r\n raw: null,\r\n }\r\n }\r\n}\r\n\r\nfunction executePostWithCompatibleInput<TPayload extends AthenaAuthFetchCompatibleInput, TResult>(\r\n config: AthenaAuthClientConfig,\r\n context: AuthRequestContext,\r\n input: TPayload,\r\n options?: AthenaAuthCallOptions,\r\n) {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n return callAuthEndpoint<TResult>(config, context, payload ?? {}, undefined, mergedOptions)\r\n}\r\n\r\nfunction executePostWithOptionalInput<TResult>(\r\n config: AthenaAuthClientConfig,\r\n context: AuthRequestContext,\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n) {\r\n const { fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n return callAuthEndpoint<TResult>(config, context, {}, undefined, mergedOptions)\r\n}\r\n\r\nfunction executeGetWithCompatibleInput<TResult>(\n config: AthenaAuthClientConfig,\n context: AuthRequestContext,\n input?: AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\r\n) {\r\n const { fetchOptions } = extractFetchOptions(input)\r\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 * @deprecated Prefer `createClient(...).auth` from `@xylex-group/athena`.\n */\nexport function createAuthClient(config: AthenaAuthClientConfig = {}): AthenaAuthSdkClient {\n const normalizedBaseUrl = normalizeBaseUrl(config.baseUrl)\r\n const resolvedConfig: AthenaAuthClientConfig = {\r\n ...config,\r\n baseUrl: normalizedBaseUrl,\r\n }\r\n\r\n const request = <T = unknown>(\n input: AthenaAuthRequestInput,\n options?: AthenaAuthCallOptions,\n ): Promise<AthenaAuthResult<T>> => {\n const method = input.method ?? (input.body !== undefined ? 'POST' : inferDefaultMethod(input.endpoint))\r\n const mergedOptions = mergeCallOptions(input.fetchOptions, options)\r\n return callAuthEndpoint<T>(\r\n resolvedConfig,\r\n { endpoint: input.endpoint, method },\r\n input.body,\r\n input.query,\r\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 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 = (\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithOptionalInput<AthenaAuthSignOutResponse>(\r\n resolvedConfig,\r\n { endpoint: '/sign-out', method: 'POST' },\r\n input,\r\n options,\r\n )\r\n\r\n const revokeSessions = (\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithOptionalInput<AthenaAuthStatusResponse>(\r\n resolvedConfig,\r\n { endpoint: '/revoke-sessions', method: 'POST' },\r\n input,\r\n options,\r\n )\r\n\r\n const revokeOtherSessions = (\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithOptionalInput<AthenaAuthStatusResponse>(\r\n resolvedConfig,\r\n { endpoint: '/revoke-other-sessions', method: 'POST' },\r\n input,\r\n options,\r\n )\r\n\r\n const revokeSession = (\r\n input: { token: string } & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<typeof input, AthenaAuthStatusResponse>(\r\n resolvedConfig,\r\n { endpoint: '/revoke-session', method: 'POST' },\r\n input,\r\n options,\r\n )\r\n\r\n const deleteUser = (\r\n input?: AthenaDeleteUserRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n return callAuthEndpoint<AthenaDeleteUserResponse>(\r\n resolvedConfig,\r\n { endpoint: '/delete-user', method: 'POST' },\r\n payload ?? {},\r\n undefined,\r\n mergedOptions,\r\n )\r\n }\r\n\r\n const deleteUserCallback = (\r\n input?: AthenaDeleteUserCallbackRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n const query = (payload ?? {}) as AthenaDeleteUserCallbackRequest\r\n return callAuthEndpoint<AthenaDeleteUserResponse>(\r\n resolvedConfig,\r\n { endpoint: '/delete-user/callback', method: 'GET' },\r\n undefined,\r\n {\r\n token: query.token,\r\n callbackURL: query.callbackURL,\r\n },\r\n mergedOptions,\r\n )\r\n }\r\n\r\n const resolveResetPasswordToken = (\n input: { token: string; callbackURL?: string } & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) => {\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n const query = payload as { token?: string; callbackURL?: string } | undefined\r\n const token = query?.token?.trim()\r\n if (!token) {\r\n throw new Error('resolveResetPasswordToken requires a non-empty token')\r\n }\r\n const endpoint = `/reset-password/${encodeURIComponent(token)}` as AthenaAuthEndpointPath\r\n return callAuthEndpoint<{ token?: string }>(\r\n resolvedConfig,\r\n { endpoint, method: 'GET' },\r\n undefined,\r\n query?.callbackURL ? { callbackURL: query.callbackURL } : undefined,\r\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 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 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 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 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: (input, options) => postGeneric('/admin/email/create', input, options),\n update: (input, options) => postGeneric('/admin/email/update', input, options),\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: (input, options) => postGeneric('/admin/email-template/create', input, options),\n update: (input, options) => postGeneric('/admin/email-template/update', input, options),\n delete: (input, options) => postGeneric('/admin/email-template/delete', input, options),\n },\n },\n emailTemplate: {\n get: (input, options) => getWithQuery('/admin/email-template/get', input, options),\n create: (input, options) => postGeneric('/admin/email-template/create', input, options),\n delete: (input, options) => postGeneric('/admin/email-template/delete', input, options),\n list: (input, options) => getWithQuery('/admin/email-template/list', input, options),\n update: (input, options) => postGeneric('/admin/email-template/update', 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\r\n return {\r\n baseUrl: normalizedBaseUrl,\r\n request,\r\n signIn: {\r\n email: (\r\n input: AthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSignInResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/sign-in/email', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n username: (\r\n input: AthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSignInResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/sign-in/username', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n social: (\r\n input: AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSocialRedirectResponse | AthenaAuthSignInResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/sign-in/social', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n },\r\n signUp: {\r\n email: (\r\n input: AthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSignInResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/sign-up/email', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n },\r\n signOut,\r\n logout: signOut,\r\n getSession: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\r\n executeGetWithCompatibleInput<AthenaAuthSessionResponse>(\r\n resolvedConfig,\r\n { endpoint: '/get-session', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n listSessions: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\r\n executeGetWithCompatibleInput<AthenaAuthSession[]>(\r\n resolvedConfig,\r\n { endpoint: '/list-sessions', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n revokeSession,\r\n clearSession: revokeSession,\r\n revokeSessions,\r\n clearSessions: revokeSessions,\r\n revokeOtherSessions,\r\n clearOtherSessions: revokeOtherSessions,\r\n forgetPassword: (\r\n input: AthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/forget-password', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n resetPassword: (\r\n input: AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/reset-password', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n resolveResetPasswordToken,\r\n verifyEmail: (\r\n input: AthenaVerifyEmailRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n const query = payload as AthenaVerifyEmailRequest | undefined\r\n return callAuthEndpoint<{ user: AthenaAuthUser; status: boolean }>(\r\n resolvedConfig,\r\n { endpoint: '/verify-email', method: 'GET' },\r\n undefined,\r\n query\r\n ? {\r\n token: query.token,\r\n callbackURL: query.callbackURL,\r\n }\r\n : undefined,\r\n mergedOptions,\r\n )\r\n },\r\n sendVerificationEmail: (\r\n input: AthenaSendVerificationEmailRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaSendVerificationEmailRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/send-verification-email', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n changeEmail: (\r\n input: AthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\r\n { status: boolean; message?: string | null }\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/change-email', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n changePassword: (\r\n input: AthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\r\n { token?: string | null; user: AthenaAuthUser }\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/change-password', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n updateUser: (\r\n input: AthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/update-user', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n deleteUser,\r\n deleteUserCallback,\r\n linkSocial: (\r\n input: AthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSocialRedirectResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/link-social', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n listAccounts: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\r\n executeGetWithCompatibleInput<AthenaAuthLinkedAccount[]>(\r\n resolvedConfig,\r\n { endpoint: '/list-accounts', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n unlinkAccount: (\r\n input: AthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/unlink-account', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n refreshToken: (\r\n input: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaOAuthTokenBundle\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/refresh-token', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n getAccessToken: (\n input: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n options?: AthenaAuthCallOptions,\n ) =>\n executePostWithCompatibleInput<\r\n AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaOAuthTokenBundle\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/get-access-token', method: 'POST' },\n input,\n options,\n ),\n organization,\n auth,\n }\n}\n","import type { AthenaResult } from './client.ts'\r\nimport { AthenaGatewayError, isAthenaGatewayError } from './gateway/errors.ts'\r\nimport type { AthenaGatewayErrorCode, AthenaGatewayErrorDetails } from './gateway/types.ts'\r\n\r\nexport type AthenaErrorKind =\r\n | 'unique_violation'\r\n | 'not_found'\r\n | 'validation'\r\n | 'auth'\r\n | 'rate_limit'\r\n | 'transient'\r\n | 'unknown'\r\n\r\nexport const AthenaErrorKind = {\r\n UniqueViolation: 'unique_violation',\r\n NotFound: 'not_found',\r\n Validation: 'validation',\r\n Auth: 'auth',\r\n RateLimit: 'rate_limit',\r\n Transient: 'transient',\r\n Unknown: 'unknown',\r\n} as const\r\n\r\nexport type AthenaErrorCode =\r\n | 'UNIQUE_VIOLATION'\r\n | 'NOT_FOUND'\r\n | 'VALIDATION_FAILED'\r\n | 'AUTH_UNAUTHORIZED'\r\n | 'AUTH_FORBIDDEN'\r\n | 'RATE_LIMITED'\r\n | 'NETWORK_UNAVAILABLE'\r\n | 'TRANSIENT_FAILURE'\r\n | 'HTTP_FAILURE'\r\n | 'UNKNOWN'\r\n\r\nexport const AthenaErrorCode = {\r\n UniqueViolation: 'UNIQUE_VIOLATION',\r\n NotFound: 'NOT_FOUND',\r\n ValidationFailed: 'VALIDATION_FAILED',\r\n AuthUnauthorized: 'AUTH_UNAUTHORIZED',\r\n AuthForbidden: 'AUTH_FORBIDDEN',\r\n RateLimited: 'RATE_LIMITED',\r\n NetworkUnavailable: 'NETWORK_UNAVAILABLE',\r\n TransientFailure: 'TRANSIENT_FAILURE',\r\n HttpFailure: 'HTTP_FAILURE',\r\n Unknown: 'UNKNOWN',\r\n} as const satisfies Record<string, AthenaErrorCode>\r\n\r\nexport type AthenaErrorCategory = 'transport' | 'client' | 'server' | 'database' | 'unknown'\r\n\r\nexport const AthenaErrorCategory = {\r\n Transport: 'transport',\r\n Client: 'client',\r\n Server: 'server',\r\n Database: 'database',\r\n Unknown: 'unknown',\r\n} as const satisfies Record<string, AthenaErrorCategory>\r\n\r\nexport interface AthenaOperationContext {\r\n table?: string\r\n operation?: string\r\n identity?: string | Record<string, unknown>\r\n}\r\n\r\nexport interface NormalizedAthenaError {\r\n kind: AthenaErrorKind\r\n code: AthenaErrorCode\r\n category: AthenaErrorCategory\r\n retryable: boolean\r\n status?: number\r\n constraint?: string\r\n table?: string\r\n operation?: string\r\n message: string\r\n raw: unknown\r\n}\r\n\r\nexport interface AthenaErrorInput {\r\n code: AthenaErrorCode\r\n kind: AthenaErrorKind\r\n category: AthenaErrorCategory\r\n message: string\r\n status?: number\r\n retryable?: boolean\r\n requestId?: string\r\n context?: AthenaOperationContext\r\n raw?: unknown\r\n}\r\n\r\nexport interface UnwrapOptions {\r\n allowNull?: boolean\r\n context?: AthenaOperationContext\r\n}\r\n\r\nexport interface UnwrapOneOptions extends UnwrapOptions {\r\n requireExactlyOne?: boolean\r\n}\r\n\r\nexport interface IntCoercionOptions {\n strictBigInt?: boolean\n min?: number\n max?: number\n}\n\r\nexport type RetryBackoffStrategy =\r\n | 'linear'\r\n | 'exponential'\r\n | ((attempt: number, error: unknown) => number)\r\n\r\nexport interface RetryConfig {\r\n retries: number\r\n baseDelayMs?: number\r\n maxDelayMs?: number\r\n backoff?: RetryBackoffStrategy\r\n jitter?: boolean | number\r\n shouldRetry?: (error: unknown, attempt: number) => boolean | Promise<boolean>\r\n}\r\n\r\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 if (!rawValue) return fallback\n\n const normalized = rawValue.trim().toLowerCase()\n\n if (\n normalized === '1' ||\n normalized === 'true' ||\n normalized === 'yes' ||\n normalized === 'on'\n ) {\n return true\n }\n\n if (\n normalized === '0' ||\n normalized === 'false' ||\n normalized === 'no' ||\n normalized === 'off'\n ) {\n return false\n }\n\n return fallback\n}\n\r\nexport class AthenaError extends Error {\r\n readonly code: AthenaErrorCode\r\n readonly kind: AthenaErrorKind\r\n readonly category: AthenaErrorCategory\r\n readonly status?: number\r\n readonly retryable: boolean\r\n readonly requestId?: string\r\n readonly context?: AthenaOperationContext\r\n readonly raw?: unknown\r\n\r\n constructor(input: AthenaErrorInput) {\r\n super(input.message)\r\n this.name = 'AthenaError'\r\n this.code = input.code\r\n this.kind = input.kind\r\n this.category = input.category\r\n this.status = input.status\r\n this.retryable = input.retryable ?? false\r\n this.requestId = input.requestId\r\n this.context = input.context\r\n this.raw = input.raw\r\n }\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\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\r\nfunction safeStringify(value: unknown): string {\r\n try {\r\n const serialized = JSON.stringify(value)\r\n return serialized ?? String(value)\r\n } catch {\r\n return '[unserializable]'\r\n }\r\n}\r\n\r\nfunction contextHint(context?: AthenaOperationContext): string | undefined {\r\n if (!context?.identity) return undefined\r\n const identity =\r\n typeof context.identity === 'string' ? context.identity : safeStringify(context.identity)\r\n return `Identity: ${identity}`\r\n}\r\n\r\nfunction isAthenaResultLike(value: unknown): value is AthenaResult<unknown> {\r\n return (\r\n isRecord(value) &&\r\n 'status' in value &&\r\n 'error' in value &&\r\n 'data' in value &&\r\n typeof value.status === 'number'\r\n )\r\n}\r\n\r\nfunction operationFromDetails(details?: AthenaGatewayErrorDetails | null): string | undefined {\r\n if (!details?.endpoint) return undefined\r\n if (details.endpoint === '/gateway/fetch' || details.endpoint === '/gateway/query') return 'select'\r\n if (details.endpoint === '/gateway/insert') return 'insert'\r\n if (details.endpoint === '/gateway/update') return 'update'\r\n if (details.endpoint === '/gateway/delete') return 'delete'\r\n if (details.endpoint === '/gateway/rpc' || details.endpoint.startsWith('/rpc/')) return 'rpc'\r\n return undefined\r\n}\r\n\r\nfunction matchRegex(input: string, patterns: RegExp[]): string | undefined {\r\n for (const pattern of patterns) {\r\n const match = pattern.exec(input)\r\n if (match?.[1]) return match[1]\r\n }\r\n return undefined\r\n}\r\n\r\nfunction extractConstraint(message: string): string | undefined {\r\n return matchRegex(message, [\r\n /unique constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\r\n /constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\r\n ])\r\n}\r\n\r\nfunction extractTable(message: string): string | undefined {\r\n return matchRegex(message, [\r\n /(?:table|relation)\\s+[\"'`]([^\"'`]+)[\"'`]/i,\r\n /on\\s+table\\s+([a-zA-Z0-9_.]+)/i,\r\n ])\r\n}\r\n\r\nfunction classifyKind(status: number | undefined, code: AthenaGatewayErrorCode | undefined, message: string): AthenaErrorKind {\r\n const lower = message.toLowerCase()\r\n const hasUniquePattern =\r\n lower.includes('unique constraint') ||\r\n lower.includes('duplicate key') ||\r\n lower.includes('already exists') ||\r\n lower.includes('duplicate')\r\n const hasNotFoundPattern = lower.includes('not found') || lower.includes('no rows')\r\n const hasValidationPattern =\r\n lower.includes('validation') || lower.includes('invalid') || lower.includes('malformed')\r\n const hasAuthPattern =\r\n lower.includes('unauthorized') || lower.includes('forbidden') || lower.includes('auth')\r\n const hasRateLimitPattern = lower.includes('rate limit') || lower.includes('too many requests')\r\n const hasTransientPattern =\r\n lower.includes('timeout') ||\r\n lower.includes('temporar') ||\r\n lower.includes('connection reset') ||\r\n lower.includes('socket') ||\r\n lower.includes('deadlock')\r\n\r\n if (status === 409 || hasUniquePattern) return 'unique_violation'\r\n if (status === 404 || hasNotFoundPattern) return 'not_found'\r\n if (status === 401 || status === 403 || hasAuthPattern) return 'auth'\r\n if (status === 429 || hasRateLimitPattern) return 'rate_limit'\r\n if (status === 400 || status === 422 || hasValidationPattern) return 'validation'\r\n if (code === 'NETWORK_ERROR' || status === 0 || (status !== undefined && status >= 500) || hasTransientPattern) {\r\n return 'transient'\r\n }\r\n return 'unknown'\r\n}\r\n\r\nfunction toAthenaErrorCode(\r\n kind: AthenaErrorKind,\r\n status: number | undefined,\r\n gatewayCode?: AthenaGatewayErrorCode,\r\n): AthenaErrorCode {\r\n if (gatewayCode === 'NETWORK_ERROR' || (kind === 'transient' && status === 0)) {\r\n return AthenaErrorCode.NetworkUnavailable\r\n }\r\n\r\n switch (kind) {\r\n case 'unique_violation':\r\n return AthenaErrorCode.UniqueViolation\r\n case 'not_found':\r\n return AthenaErrorCode.NotFound\r\n case 'validation':\r\n return AthenaErrorCode.ValidationFailed\r\n case 'rate_limit':\r\n return AthenaErrorCode.RateLimited\r\n case 'auth':\r\n if (status === 403) {\r\n return AthenaErrorCode.AuthForbidden\r\n }\r\n return AthenaErrorCode.AuthUnauthorized\r\n case 'transient':\r\n return status !== undefined && status >= 500\r\n ? AthenaErrorCode.HttpFailure\r\n : AthenaErrorCode.TransientFailure\r\n case 'unknown':\r\n default:\r\n return status !== undefined && status >= 400\r\n ? AthenaErrorCode.HttpFailure\r\n : AthenaErrorCode.Unknown\r\n }\r\n}\r\n\r\nfunction toAthenaErrorCategory(kind: AthenaErrorKind, status: number | undefined): AthenaErrorCategory {\r\n if (kind === 'transient' && (status === 0 || status === undefined)) {\r\n return AthenaErrorCategory.Transport\r\n }\r\n if (kind === 'unique_violation') return AthenaErrorCategory.Database\r\n if (kind === 'validation' || kind === 'auth' || kind === 'not_found') return AthenaErrorCategory.Client\r\n if (kind === 'rate_limit' || kind === 'transient') return AthenaErrorCategory.Server\r\n return AthenaErrorCategory.Unknown\r\n}\r\n\r\nfunction isRetryable(kind: AthenaErrorKind, status: number | undefined): boolean {\r\n if (kind === 'rate_limit' || kind === 'transient') return true\r\n return status !== undefined && status >= 500\r\n}\r\n\r\nfunction toGatewayCode(kind: AthenaErrorKind, status?: number): AthenaGatewayErrorCode {\r\n if (kind === 'transient' && (status === 0 || status === undefined)) return 'NETWORK_ERROR'\r\n if (kind === 'validation') return 'INVALID_JSON'\r\n if (status !== undefined && status >= 400) return 'HTTP_ERROR'\r\n return 'UNKNOWN_ERROR'\r\n}\r\n\r\nfunction toAthenaGatewayError(\r\n source: unknown,\r\n fallbackMessage: string,\r\n context?: AthenaOperationContext,\r\n): AthenaGatewayError {\r\n if (isAthenaGatewayError(source)) {\r\n return source\r\n }\r\n\r\n if (isAthenaResultLike(source) && source.errorDetails) {\r\n return new AthenaGatewayError({\r\n code: source.errorDetails.code,\r\n message: source.error ?? source.errorDetails.message,\r\n status: source.status,\r\n endpoint: source.errorDetails.endpoint,\r\n method: source.errorDetails.method,\r\n requestId: source.errorDetails.requestId,\r\n hint: source.errorDetails.hint,\r\n cause: source.errorDetails.cause,\r\n })\r\n }\r\n\r\n const normalized = normalizeAthenaError(source, context)\r\n const message =\r\n isAthenaResultLike(source) && source.error == null && source.errorDetails == null\r\n ? fallbackMessage\r\n : normalized.message || fallbackMessage\r\n\r\n return new AthenaGatewayError({\r\n code: toGatewayCode(normalized.kind, normalized.status),\r\n message,\r\n status: normalized.status ?? 0,\r\n hint:\r\n normalized.constraint != null\r\n ? `Constraint: ${normalized.constraint}`\r\n : contextHint(context),\r\n cause: typeof normalized.raw === 'string' ? normalized.raw : safeStringify(normalized.raw),\r\n })\r\n}\r\n\r\n/**\r\n * Returns `true` when a result is successful (`2xx` status and no `error`).\r\n */\r\nexport function isOk<T>(result: AthenaResult<T>): boolean {\r\n return result.error == null && result.status >= 200 && result.status < 300\r\n}\r\n\r\n/**\r\n * Normalizes any Athena failure shape into a stable, typed error envelope.\r\n *\r\n * Accepts `AthenaResult`, `AthenaGatewayError`, native `Error`, or unknown values.\r\n * Optional `context` can override inferred table/operation metadata for clearer diagnostics.\r\n */\r\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 const details = resultOrError.errorDetails\r\n const message =\r\n resultOrError.error ??\r\n details?.message ??\r\n `Athena ${context?.operation ?? operationFromDetails(details) ?? 'request'} failed`\r\n const operation = context?.operation ?? operationFromDetails(details)\r\n const table = context?.table ?? extractTable(message)\r\n const constraint = extractConstraint(message)\r\n const kind = classifyKind(resultOrError.status, details?.code, message)\r\n const code = toAthenaErrorCode(kind, resultOrError.status, details?.code)\r\n const category = toAthenaErrorCategory(kind, resultOrError.status)\r\n return {\r\n kind,\r\n code,\r\n category,\r\n retryable: isRetryable(kind, resultOrError.status),\r\n status: resultOrError.status,\r\n constraint,\r\n table,\r\n operation,\r\n message,\r\n raw: resultOrError.raw,\r\n }\r\n }\r\n\r\n if (isAthenaGatewayError(resultOrError)) {\r\n const details = resultOrError.toDetails()\r\n const operation = context?.operation ?? operationFromDetails(details)\r\n const table = context?.table ?? extractTable(resultOrError.message)\r\n const constraint = extractConstraint(resultOrError.message)\r\n const kind = classifyKind(resultOrError.status, resultOrError.code, resultOrError.message)\r\n const code = toAthenaErrorCode(kind, resultOrError.status, resultOrError.code)\r\n const category = toAthenaErrorCategory(kind, resultOrError.status)\r\n return {\r\n kind,\r\n code,\r\n category,\r\n retryable: isRetryable(kind, resultOrError.status),\r\n status: resultOrError.status,\r\n constraint,\r\n table,\r\n operation,\r\n message: resultOrError.message,\r\n raw: resultOrError,\r\n }\r\n }\r\n\r\n if (resultOrError instanceof Error) {\r\n const maybeStatus =\r\n isRecord(resultOrError) && typeof resultOrError.status === 'number'\r\n ? resultOrError.status\r\n : undefined\r\n const kind = classifyKind(maybeStatus, undefined, resultOrError.message)\r\n return {\r\n kind,\r\n code: toAthenaErrorCode(kind, maybeStatus),\r\n category: toAthenaErrorCategory(kind, maybeStatus),\r\n retryable: isRetryable(kind, maybeStatus),\r\n status: maybeStatus,\r\n constraint: extractConstraint(resultOrError.message),\r\n table: context?.table ?? extractTable(resultOrError.message),\r\n operation: context?.operation,\r\n message: resultOrError.message,\r\n raw: resultOrError,\r\n }\r\n }\r\n\r\n const message = typeof resultOrError === 'string' ? resultOrError : 'Unknown Athena error'\r\n const kind = classifyKind(undefined, undefined, message)\r\n return {\r\n kind,\r\n code: toAthenaErrorCode(kind, undefined),\r\n category: toAthenaErrorCategory(kind, undefined),\r\n retryable: isRetryable(kind, undefined),\r\n status: undefined,\r\n constraint: extractConstraint(message),\r\n table: context?.table ?? extractTable(message),\r\n operation: context?.operation,\r\n message,\r\n raw: resultOrError,\r\n }\r\n}\r\n\r\n/**\r\n * Unwraps a successful result into a row array.\r\n *\r\n * - Throws on failed results.\r\n * - Converts `null` data to an empty array.\r\n * - Wraps scalar data in a single-element array.\r\n */\r\nexport function unwrapRows<T>(\r\n result: AthenaResult<T[] | T | null>,\r\n options?: UnwrapOptions,\r\n): T[] {\r\n if (!isOk(result)) {\r\n throw toAthenaGatewayError(result, 'Athena request failed', options?.context)\r\n }\r\n if (result.data == null) return []\r\n return Array.isArray(result.data) ? result.data : [result.data]\r\n}\r\n\r\n/**\r\n * Unwraps successful result data from `AthenaResult<T | null>`.\r\n *\r\n * By default, `null` data throws. Pass `{ allowNull: true }` to permit nullable payloads.\r\n */\r\nexport function unwrap<T>(\r\n result: AthenaResult<T | null>,\r\n options: UnwrapOptions & { allowNull: true },\r\n): T | null\r\nexport function unwrap<T>(result: AthenaResult<T | null>, options?: UnwrapOptions): T\r\nexport function unwrap<T>(\r\n result: AthenaResult<T | null>,\r\n options?: UnwrapOptions,\r\n): T | null {\r\n if (!isOk(result)) {\r\n throw toAthenaGatewayError(result, 'Athena request failed', options?.context)\r\n }\r\n if (result.data == null && !options?.allowNull) {\r\n throw toAthenaGatewayError(result, 'Expected data but received null', options?.context)\r\n }\r\n return result.data\r\n}\r\n\r\n/**\r\n * Unwraps the first row from a successful result that may contain arrays/scalars/null.\r\n *\r\n * - Throws on failed results.\r\n * - Throws when no row exists unless `allowNull: true` is provided.\r\n * - Optionally enforces exact cardinality via `requireExactlyOne`.\r\n */\r\nexport function unwrapOne<T>(\r\n result: AthenaResult<T[] | T | null>,\r\n options: UnwrapOneOptions & { allowNull: true },\r\n): T | null\r\nexport function unwrapOne<T>(result: AthenaResult<T[] | T | null>, options?: UnwrapOneOptions): T\r\nexport function unwrapOne<T>(\r\n result: AthenaResult<T[] | T | null>,\r\n options?: UnwrapOneOptions,\r\n): T | null {\r\n const rows = unwrapRows(result, options)\r\n if (!rows.length) {\r\n if (options?.allowNull) return null\r\n throw toAthenaGatewayError(result, 'Expected one row but received none', options?.context)\r\n }\r\n if (options?.requireExactlyOne && rows.length !== 1) {\r\n throw toAthenaGatewayError(\r\n result,\r\n `Expected exactly one row but received ${rows.length}`,\r\n options.context,\r\n )\r\n }\r\n return rows[0]\r\n}\r\n\r\n/**\r\n * Asserts that an Athena result is successful.\r\n *\r\n * Returns the original result for fluent composition and throws `AthenaGatewayError` on failure.\r\n */\r\nexport function requireSuccess<T>(\r\n result: AthenaResult<T>,\r\n context?: AthenaOperationContext,\r\n): AthenaResult<T> {\r\n if (!isOk(result)) {\r\n throw toAthenaGatewayError(\r\n result,\r\n `Athena ${context?.operation ?? 'request'} failed`,\r\n context,\r\n )\r\n }\r\n return result\r\n}\r\n\r\n/**\r\n * Enforces mutation postconditions based on `result.count`.\r\n *\r\n * - Validates success first.\r\n * - Requires a non-null count in the response.\r\n * - Validates `count >= min` (default: `1`).\r\n *\r\n * Useful for guaranteeing that critical writes actually affected rows.\r\n */\r\nexport function requireAffected<T>(\r\n result: AthenaResult<T>,\r\n options?: RequireAffectedOptions,\r\n context?: AthenaOperationContext,\r\n): number {\r\n requireSuccess(result, context)\r\n\r\n const minimum = options?.min ?? 1\r\n const count = result.count\r\n if (count == null) {\r\n throw new AthenaGatewayError({\r\n code: 'UNKNOWN_ERROR',\r\n status: result.status,\r\n message: 'Expected affected row count but response.count is missing',\r\n hint: 'Set call option { count: \"exact\" } for mutation postcondition checks.',\r\n cause: safeStringify(result.raw),\r\n })\r\n }\r\n\r\n if (count < minimum) {\r\n throw new AthenaGatewayError({\r\n code: 'UNKNOWN_ERROR',\r\n status: result.status,\r\n message: `Expected at least ${minimum} affected rows but received ${count}`,\r\n hint: contextHint(context),\r\n cause: safeStringify(result.raw),\r\n })\r\n }\r\n\r\n return count\r\n}\r\n\r\nfunction applyBounds(value: number, options?: IntCoercionOptions): number | null {\r\n if (options?.min !== undefined && value < options.min) return null\r\n if (options?.max !== undefined && value > options.max) return null\r\n return value\r\n}\r\n\r\nfunction parseIntegerString(value: string): number | null {\r\n const normalized = value.trim()\r\n if (!/^[-+]?\\d+$/.test(normalized)) return null\r\n const parsed = Number(normalized)\r\n if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) return null\r\n return parsed\r\n}\r\n\r\n/**\r\n * Safely coerces `unknown` values into finite integers.\r\n *\r\n * Returns `null` when coercion fails or bounds/strict bigint checks are violated.\r\n */\r\nexport function coerceInt(value: unknown, options?: IntCoercionOptions): number | null {\r\n if (value == null) return null\r\n\r\n if (typeof value === 'number') {\r\n if (!Number.isFinite(value) || !Number.isInteger(value)) return null\r\n return applyBounds(value, options)\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const parsed = parseIntegerString(value)\r\n if (parsed == null) return null\r\n return applyBounds(parsed, options)\r\n }\r\n\r\n if (typeof value === 'bigint') {\r\n if (options?.strictBigInt) {\r\n if (value > BigInt(Number.MAX_SAFE_INTEGER) || value < BigInt(Number.MIN_SAFE_INTEGER)) {\r\n return null\r\n }\r\n }\r\n const parsed = Number(value)\r\n if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) return null\r\n return applyBounds(parsed, options)\r\n }\r\n\r\n return null\r\n}\r\n\r\n/**\r\n * Strict integer assertion wrapper around `coerceInt`.\r\n *\r\n * Throws a `TypeError` with the provided label when coercion fails.\r\n */\r\nexport function assertInt(value: unknown, label = 'value', options?: IntCoercionOptions): number {\r\n const parsed = coerceInt(value, options)\r\n if (parsed == null) {\r\n throw new TypeError(`${label} must be a finite integer`)\r\n }\r\n return parsed\r\n}\r\n\r\nfunction defaultShouldRetry(error: unknown): boolean {\r\n const normalized = normalizeAthenaError(error)\r\n return normalized.kind === 'transient' || normalized.kind === 'rate_limit'\r\n}\r\n\r\nfunction computeDelayMs(\r\n attempt: number,\r\n error: unknown,\r\n config: Required<Pick<RetryConfig, 'baseDelayMs' | 'backoff' | 'maxDelayMs' | 'jitter'>>,\r\n): number {\r\n const baseDelay = config.baseDelayMs\r\n const rawDelay =\r\n typeof config.backoff === 'function'\r\n ? config.backoff(attempt, error)\r\n : config.backoff === 'linear'\r\n ? baseDelay * attempt\r\n : baseDelay * Math.pow(2, attempt - 1)\r\n\r\n const safeDelay = Number.isFinite(rawDelay) ? Math.max(0, rawDelay) : 0\r\n const clamped = Math.min(config.maxDelayMs, safeDelay)\r\n const jitterFactor =\r\n typeof config.jitter === 'number'\r\n ? Math.max(0, Math.min(1, config.jitter))\r\n : config.jitter\r\n ? 0.2\r\n : 0\r\n\r\n if (!jitterFactor) return clamped\r\n const deviation = clamped * jitterFactor\r\n const offset = (Math.random() * 2 - 1) * deviation\r\n return Math.max(0, clamped + offset)\r\n}\r\n\r\nfunction sleep(ms: number): Promise<void> {\r\n if (ms <= 0) return Promise.resolve()\r\n return new Promise(resolve => {\r\n setTimeout(resolve, ms)\r\n })\r\n}\r\n\r\n/**\r\n * Retries an async operation with configurable backoff and retry policy.\r\n *\r\n * `retries` represents additional attempts after the first failure.\r\n * By default, transient and rate-limit errors are retried.\r\n */\r\nexport async function withRetry<T>(config: RetryConfig, fn: () => Promise<T>): Promise<T> {\r\n const retries = Math.max(0, Math.trunc(config.retries))\r\n const shouldRetry = config.shouldRetry ?? defaultShouldRetry\r\n const resolvedConfig = {\r\n baseDelayMs: config.baseDelayMs ?? 100,\r\n maxDelayMs: config.maxDelayMs ?? 10_000,\r\n backoff: config.backoff ?? 'exponential',\r\n jitter: config.jitter ?? false,\r\n } satisfies Required<Pick<RetryConfig, 'baseDelayMs' | 'backoff' | 'maxDelayMs' | 'jitter'>>\r\n\r\n for (let attempts = 0; attempts <= retries; attempts += 1) {\r\n try {\r\n return await fn()\r\n } catch (error) {\r\n if (attempts >= retries) {\r\n throw error\r\n }\r\n\r\n const currentAttempt = attempts + 1\r\n const retry = await shouldRetry(error, currentAttempt)\r\n if (!retry) {\r\n throw error\r\n }\r\n\r\n const delay = computeDelayMs(currentAttempt, error, resolvedConfig)\r\n await sleep(delay)\r\n }\r\n }\r\n\r\n throw new Error('withRetry reached an unexpected state')\r\n}\r\n","import type {\n AthenaGatewayCallOptions,\n AthenaJsonObject,\n AthenaJsonValue,\n AthenaRpcCallOptions,\n} from '../gateway/types.ts'\nimport type {\n AthenaResult,\n AthenaSdkClient,\n MutationQuery,\n RpcQueryBuilder,\n SelectChain,\n TableQueryBuilder,\n UpdateChain,\n} from '../client.ts'\n\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>\n\ntype AthenaUpsertOptions<Update> = AthenaGatewayCallOptions & {\n updateBody?: Update\n onConflict?: string | string[]\n}\n\nexport interface AthenaDbModule {\n from<\n Row = AthenaRowShape,\n Insert = Partial<Row>,\n Update = Partial<Insert>,\n >(table: string): TableQueryBuilder<Row, Insert, Update>\n\n select<\n Row = AthenaRowShape,\n SelectedRow = Row,\n >(\n table: string,\n columns?: string | string[],\n options?: AthenaGatewayCallOptions,\n ): SelectChain<Row, SelectedRow>\n\n insert<\n Row = AthenaRowShape,\n Insert = Partial<Row>,\n >(table: string, values: Insert, options?: AthenaGatewayCallOptions): MutationQuery<Row>\n insert<\n Row = AthenaRowShape,\n Insert = Partial<Row>,\n >(table: string, values: Insert[], options?: AthenaGatewayCallOptions): MutationQuery<Row[]>\n\n upsert<\n Row = AthenaRowShape,\n Insert = Partial<Row>,\n Update = Partial<Insert>,\n >(\n table: string,\n values: Insert,\n options?: AthenaUpsertOptions<Update>,\n ): MutationQuery<Row>\n upsert<\n Row = AthenaRowShape,\n Insert = Partial<Row>,\n Update = Partial<Insert>,\n >(\n table: string,\n values: Insert[],\n options?: AthenaUpsertOptions<Update>,\n ): MutationQuery<Row[]>\n\n update<\n Row = AthenaRowShape,\n Insert = Partial<Row>,\n Update = Partial<Insert>,\n >(table: string, values: Update, options?: AthenaGatewayCallOptions): UpdateChain<Row>\n\n delete<Row = AthenaRowShape>(\n table: string,\n options?: AthenaGatewayCallOptions & { resourceId?: string },\n ): MutationQuery<Row | null>\n\n rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\n fn: string,\n args?: Args,\n options?: AthenaRpcCallOptions,\n ): RpcQueryBuilder<Row>\n\n query<Row = unknown>(\n query: string,\n options?: AthenaGatewayCallOptions,\n ): Promise<AthenaResult<Row[]>>\n}\n\ninterface AthenaDbModuleFactoryInput {\n from: AthenaSdkClient['from']\n rpc: AthenaSdkClient['rpc']\n query: AthenaSdkClient['query']\n}\n\nexport function createDbModule(input: AthenaDbModuleFactoryInput): AthenaDbModule {\n const db: AthenaDbModule = {\n from<Row = AthenaRowShape, Insert = Partial<Row>, Update = Partial<Insert>>(table: string) {\n return input.from<Row, Insert, Update>(table)\n },\n select<\n Row = AthenaRowShape,\n SelectedRow = Row,\n >(\n table: string,\n columns?: string | string[],\n options?: AthenaGatewayCallOptions,\n ) {\n return input.from<Row>(table).select<SelectedRow>(columns, options)\n },\n insert<Row = AthenaRowShape, Insert = Partial<Row>>(\n table: string,\n values: Insert | Insert[],\n options?: AthenaGatewayCallOptions,\n ): MutationQuery<Row> | MutationQuery<Row[]> {\n return Array.isArray(values)\n ? input.from<Row, Insert, Partial<Insert>>(table).insert(values, options)\n : input.from<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?: AthenaUpsertOptions<Update>,\n ): MutationQuery<Row> | MutationQuery<Row[]> {\n return Array.isArray(values)\n ? input.from<Row, Insert, Update>(table).upsert(values, options)\n : input.from<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 input.from<Row, Insert, Update>(table).update(values, options)\n },\n delete<Row = AthenaRowShape>(\n table: string,\n options?: AthenaGatewayCallOptions & { resourceId?: string },\n ) {\n return input.from<Row>(table).delete(options)\n },\n rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\n fn: string,\n args?: Args,\n options?: AthenaRpcCallOptions,\n ) {\n return input.rpc<Row, Args>(fn, args, options)\n },\n query<Row = unknown>(query: string, options?: AthenaGatewayCallOptions) {\n return input.query<Row>(query, options)\n },\n }\n\n return db\n}\n","import type {\n AthenaConditionArrayValue,\r\n AthenaConditionCastType,\r\n AthenaConditionOperator,\r\n AthenaConditionValue,\r\n AthenaDeletePayload,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayCondition,\r\n AthenaGatewayErrorDetails,\r\n AthenaGatewayResponse,\r\n AthenaInsertPayload,\r\n AthenaJsonObject,\r\n AthenaJsonValue,\r\n AthenaRpcCallOptions,\r\n AthenaRpcFilter,\r\n AthenaRpcFilterOperator,\r\n AthenaRpcPayload,\r\n AthenaSortBy,\r\n AthenaUpdatePayload,\r\n} from './gateway/types.ts'\nimport type { BackendConfig, BackendType } from './gateway/types.ts'\nimport { createAthenaGatewayClient } from './gateway/client.ts'\nimport { quoteQualifiedIdentifier, quoteSelectColumnsExpression } from './sql-identifiers.ts'\nimport { createAuthClient } from './auth/client.ts'\nimport type { AthenaAuthBindings, AthenaAuthClientConfig } from './auth/types.ts'\nimport { normalizeAthenaError } from './auxiliaries.ts'\nimport type { AthenaOperationContext, NormalizedAthenaError } from './auxiliaries.ts'\nimport { createDbModule } from './db/module.ts'\nimport type { AthenaDbModule } from './db/module.ts'\n\r\nexport interface AthenaResult<T> {\n data: T | null\n error: string | null\n errorDetails?: AthenaGatewayErrorDetails | null\n status: number\n count?: number | null\n raw: unknown\n}\n\nexport interface AthenaClientExperimentalOptions {\n /**\n * Pre-compute and attach normalized error metadata to failed AthenaResult values.\n * Keeps AthenaResult shape intact and enables context-aware normalizeAthenaError(result) usage.\n */\n enableErrorNormalization?: boolean\n}\n\r\ntype TableBuilderState = {\r\n conditions: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n order?: AthenaSortBy\r\n currentPage?: number\r\n pageSize?: number\r\n totalPages?: number\r\n}\r\n\r\ntype ConditionCastHints = {\r\n valueCast?: AthenaConditionCastType\r\n columnCast?: AthenaConditionCastType\r\n}\r\n\r\ntype MutationSingleResult<Result> = Result extends Array<infer Item> ? Item | null : Result | null\r\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>\r\ntype FilterColumnKey<Row> = Extract<keyof NonNullable<Row>, string>\r\ntype ResolvedFilterColumnKey<Row> = [FilterColumnKey<Row>] extends [never] ? string : FilterColumnKey<Row>\r\nconst DEFAULT_COLUMNS = '*'\r\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\nconst SAFE_CAST_PATTERN = /^[a-z_][a-z0-9_]*(?:\\[\\])?$/i\nconst ATHENA_NORMALIZED_ERROR_KEY = '__athenaNormalizedError' as const\n\r\nexport interface MutationQuery<Result> extends PromiseLike<AthenaResult<Result>> {\r\n select(columns?: string | string[], options?: AthenaGatewayCallOptions): Promise<AthenaResult<Result>>\r\n returning(columns?: string | string[], options?: AthenaGatewayCallOptions): Promise<AthenaResult<Result>>\r\n single(\r\n columns?: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<MutationSingleResult<Result>>>\r\n maybeSingle(\r\n columns?: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<MutationSingleResult<Result>>>\r\n then<TResult1 = AthenaResult<Result>, TResult2 = never>(\r\n onfulfilled?: ((value: AthenaResult<Result>) => TResult1 | PromiseLike<TResult1>) | undefined | null,\r\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null,\r\n ): Promise<TResult1 | TResult2>\r\n catch<TResult = never>(\r\n onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | undefined | null,\r\n ): Promise<AthenaResult<Result> | TResult>\r\n finally(onfinally?: (() => void) | undefined | null): Promise<AthenaResult<Result>>\r\n}\r\n\r\nfunction formatResult<T>(response: AthenaGatewayResponse<T>): AthenaResult<T> {\n const result: AthenaResult<T> = {\n data: response.data ?? null,\n error: response.error ?? null,\r\n errorDetails: response.errorDetails ?? null,\r\n status: response.status,\r\n raw: response.raw,\r\n }\r\n if (response.count !== undefined) {\r\n result.count = response.count\r\n }\n return result\n}\n\ntype AthenaResultFormatter = <T>(\n response: AthenaGatewayResponse<T>,\n context?: AthenaOperationContext,\n) => AthenaResult<T>\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 createResultFormatter(\n experimental?: AthenaClientExperimentalOptions,\n): AthenaResultFormatter {\n if (!experimental?.enableErrorNormalization) {\n return formatResult\n }\n\n return <T>(response: AthenaGatewayResponse<T>, context?: AthenaOperationContext): AthenaResult<T> => {\n const result = formatResult(response)\n if (result.error == null) {\n return result\n }\n const normalizedError = normalizeAthenaError(result, context)\n attachNormalizedError(result, normalizedError)\n return result\n }\n}\n\r\nfunction toSingleResult<Result>(response: AthenaResult<Result>): AthenaResult<MutationSingleResult<Result>> {\r\n const payload = response.data\r\n const singleData =\r\n Array.isArray(payload) ? (payload.length ? payload[0] : null) : payload ?? null\r\n return {\r\n ...response,\r\n data: singleData as MutationSingleResult<Result>,\r\n }\r\n}\r\n\r\nfunction mergeOptions<T extends object>(...options: Array<T | undefined>): T | undefined {\r\n return options.reduce<T | undefined>((acc, next) => {\r\n if (!next) return acc\r\n return { ...acc, ...next }\r\n }, undefined)\r\n}\r\n\r\nfunction asAthenaJsonObject(value: unknown): AthenaJsonObject {\r\n return value as unknown as AthenaJsonObject\r\n}\r\n\r\nfunction asAthenaJsonObjectArray(values: unknown[]): AthenaJsonObject[] {\r\n return values as unknown as AthenaJsonObject[]\r\n}\r\n\r\nfunction createMutationQuery<Result>(\r\n executor: (\r\n columns?: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n ) => Promise<AthenaResult<Result>>,\r\n defaultColumns: string | string[] | null = DEFAULT_COLUMNS,\r\n): MutationQuery<Result> {\r\n let selectedColumns: string | string[] | undefined = defaultColumns === null ? undefined : defaultColumns\r\n let selectedOptions: AthenaGatewayCallOptions | undefined\r\n let promise: Promise<AthenaResult<Result>> | null = null\r\n\r\n const run = (columns?: string | string[], options?: AthenaGatewayCallOptions) => {\r\n const payloadColumns = columns ?? selectedColumns\r\n const payloadOptions = options ?? selectedOptions\r\n if (!promise) {\r\n promise = executor(payloadColumns, payloadOptions)\r\n }\r\n return promise\r\n }\r\n\r\n const mutationQuery: MutationQuery<Result> = {\r\n select(columns = selectedColumns, options) {\r\n selectedColumns = columns\r\n selectedOptions = options ?? selectedOptions\r\n return run(columns, options)\r\n },\r\n returning(columns = selectedColumns, options) {\r\n return mutationQuery.select(columns, options)\r\n },\r\n single(columns = selectedColumns, options) {\r\n selectedColumns = columns\r\n selectedOptions = options ?? selectedOptions\r\n return run(columns, options).then(toSingleResult)\r\n },\r\n maybeSingle(columns = selectedColumns, options) {\r\n return mutationQuery.single(columns, options)\r\n },\r\n then(onfulfilled, onrejected) {\r\n return run(selectedColumns, selectedOptions).then(onfulfilled, onrejected)\r\n },\r\n catch(onrejected) {\r\n return run(selectedColumns, selectedOptions).catch(onrejected)\r\n },\r\n finally(onfinally) {\r\n return run(selectedColumns, selectedOptions).finally(onfinally)\r\n },\r\n }\r\n\r\n return mutationQuery\r\n}\r\n\r\nexport interface OrderOptions {\r\n ascending?: boolean\r\n}\r\n\r\n/** Shared filter chain - supports eq, limit, etc. in any order relative to select/update */\r\ninterface FilterChain<Self, Row> {\r\n eq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n eqCast(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue, cast: AthenaConditionCastType): Self\r\n eqUuid(column: ResolvedFilterColumnKey<Row>, value: string): Self\r\n match(filters: Partial<Record<ResolvedFilterColumnKey<Row>, AthenaConditionValue>>): Self\r\n range(from: number, to: number): Self\r\n limit(count: number): Self\r\n offset(count: number): Self\r\n currentPage(value: number): Self\r\n pageSize(value: number): Self\r\n totalPages(value: number): Self\r\n order(column: ResolvedFilterColumnKey<Row>, options?: OrderOptions): Self\r\n gt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n gte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n lt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n lte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n neq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n like(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n ilike(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n is(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n in(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\r\n contains(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\r\n containedBy(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\r\n not(\r\n columnOrExpression: ResolvedFilterColumnKey<Row> | string,\r\n operator?: AthenaConditionOperator,\r\n value?: AthenaConditionValue,\r\n ): Self\r\n or(expression: string): Self\r\n}\r\n\r\n/** Chain returned by select() - supports filters and single/maybeSingle before execution */\r\nexport interface SelectChain<Row, SelectedRow = Row>\r\n extends FilterChain<SelectChain<Row, SelectedRow>, Row>, PromiseLike<AthenaResult<SelectedRow[]>> {\r\n single<T = SelectedRow>(\r\n columns?: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<T | null>>\r\n maybeSingle<T = SelectedRow>(\r\n columns?: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<T | null>>\r\n}\r\n\r\n/** Chain returned by update() - supports filters before execution, plus select/returning */\r\nexport interface UpdateChain<Row>\r\n extends FilterChain<UpdateChain<Row>, Row>, MutationQuery<Row[]> {}\r\n\r\ninterface RpcFilterChain<Self> {\r\n eq(column: string, value: AthenaConditionValue): Self\r\n neq(column: string, value: AthenaConditionValue): Self\r\n gt(column: string, value: AthenaConditionValue): Self\r\n gte(column: string, value: AthenaConditionValue): Self\r\n lt(column: string, value: AthenaConditionValue): Self\r\n lte(column: string, value: AthenaConditionValue): Self\r\n like(column: string, value: AthenaConditionValue): Self\r\n ilike(column: string, value: AthenaConditionValue): Self\r\n is(column: string, value: AthenaConditionValue): Self\r\n in(column: string, values: AthenaConditionArrayValue): Self\r\n}\r\n\r\nexport interface RpcOrderOptions {\r\n ascending?: boolean\r\n}\r\n\r\nexport interface RpcQueryBuilder<Row>\r\n extends RpcFilterChain<RpcQueryBuilder<Row>>, PromiseLike<AthenaResult<Row[]>> {\r\n select(columns?: string | string[], options?: AthenaRpcCallOptions): Promise<AthenaResult<Row[]>>\r\n single<T = Row>(columns?: string | string[], options?: AthenaRpcCallOptions): Promise<AthenaResult<T | null>>\r\n maybeSingle<T = Row>(\r\n columns?: string | string[],\r\n options?: AthenaRpcCallOptions,\r\n ): Promise<AthenaResult<T | null>>\r\n order(column: string, options?: RpcOrderOptions): RpcQueryBuilder<Row>\r\n limit(count: number): RpcQueryBuilder<Row>\r\n offset(count: number): RpcQueryBuilder<Row>\r\n range(from: number, to: number): RpcQueryBuilder<Row>\r\n}\r\n\r\nexport interface TableQueryBuilder<\r\n Row,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n> extends FilterChain<TableQueryBuilder<Row, Insert, Update>, Row> {\r\n select<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions): SelectChain<Row, T>\r\n insert(values: Insert, options?: AthenaGatewayCallOptions): MutationQuery<Row>\r\n insert(values: Insert[], options?: AthenaGatewayCallOptions): MutationQuery<Row[]>\r\n upsert(\r\n values: Insert,\r\n options?: AthenaGatewayCallOptions & {\r\n updateBody?: Update\r\n onConflict?: string | string[]\r\n },\r\n ): MutationQuery<Row>\r\n upsert(\r\n values: Insert[],\r\n options?: AthenaGatewayCallOptions & {\r\n updateBody?: Update\r\n onConflict?: string | string[]\r\n },\r\n ): MutationQuery<Row[]>\r\n update(values: Update, options?: AthenaGatewayCallOptions): UpdateChain<Row>\r\n delete(options?: AthenaGatewayCallOptions & { resourceId?: string }): MutationQuery<Row | null>\r\n single<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions): Promise<AthenaResult<T | null>>\r\n maybeSingle<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions): Promise<AthenaResult<T | null>>\r\n reset(): TableQueryBuilder<Row, Insert, Update>\r\n}\r\n\r\nfunction getResourceId(state: TableBuilderState): string | undefined {\r\n const candidate = state.conditions.find(\r\n condition =>\r\n condition.operator === 'eq' &&\r\n (condition.column === 'resource_id' || condition.column === 'id'),\r\n )\r\n return candidate?.value?.toString()\r\n}\r\n\r\nfunction stringifyFilterValue(value: AthenaConditionValue | AthenaConditionArrayValue | string): string {\r\n if (Array.isArray(value)) {\r\n return value.join(',')\r\n }\r\n return String(value)\r\n}\r\n\r\nfunction isUuidString(value: string): boolean {\r\n return UUID_PATTERN.test(value.trim())\r\n}\r\n\r\nfunction isUuidIdentifierColumn(column: string): boolean {\r\n return column === 'id' || /(?:^|_)uuid(?:_|$)/i.test(column) || /_id$/i.test(column)\r\n}\r\n\r\nfunction shouldUseUuidTextComparison(column: string, value: AthenaConditionValue): boolean {\r\n return typeof value === 'string' && isUuidString(value) && isUuidIdentifierColumn(column)\r\n}\r\n\r\nfunction normalizeCast(cast: AthenaConditionCastType): string {\r\n const normalized = cast.trim().toLowerCase()\r\n if (!SAFE_CAST_PATTERN.test(normalized)) {\r\n throw new Error(`Invalid cast type \"${cast}\"`)\r\n }\r\n return normalized\r\n}\r\n\r\nfunction escapeSqlStringLiteral(value: string): string {\r\n return value.replace(/'/g, \"''\")\r\n}\r\n\r\nfunction toSqlLiteral(value: AthenaConditionValue): string {\r\n if (value === null) return 'NULL'\r\n if (typeof value === 'number') return Number.isFinite(value) ? String(value) : 'NULL'\r\n if (typeof value === 'boolean') return value ? 'TRUE' : 'FALSE'\r\n return `'${escapeSqlStringLiteral(value)}'`\r\n}\r\n\r\nfunction withCast(expression: string, cast?: AthenaConditionCastType): string {\r\n if (!cast) return expression\r\n return `${expression}::${normalizeCast(cast)}`\r\n}\r\n\r\nfunction buildSelectColumnsClause(columns: string | string[]): string {\r\n if (Array.isArray(columns)) {\r\n return columns.map(column => quoteQualifiedIdentifier(column)).join(', ')\r\n }\r\n return quoteSelectColumnsExpression(columns)\r\n}\r\n\r\nfunction resolveTableNameForCall(tableName: string, schema: string | undefined): string {\r\n if (!schema) return tableName\r\n const normalizedSchema = schema.trim()\r\n if (!normalizedSchema) {\r\n throw new Error('schema option must be a non-empty string')\r\n }\r\n if (tableName.includes('.')) {\r\n if (tableName.startsWith(`${normalizedSchema}.`)) {\r\n return tableName\r\n }\r\n throw new Error(\r\n `schema option \"${normalizedSchema}\" conflicts with schema-qualified table \"${tableName}\"`,\r\n )\r\n }\r\n return `${normalizedSchema}.${tableName}`\r\n}\r\n\r\nfunction conditionToSqlClause(condition: AthenaGatewayCondition): string | null {\r\n if (!condition.column) return null\r\n const column = withCast(quoteQualifiedIdentifier(condition.column), condition.column_cast)\r\n const value = condition.value\r\n const sqlOperator = {\r\n eq: '=',\r\n neq: '!=',\r\n gt: '>',\r\n gte: '>=',\r\n lt: '<',\r\n lte: '<=',\r\n like: 'LIKE',\r\n ilike: 'ILIKE',\r\n } as const\r\n\r\n switch (condition.operator) {\r\n case 'eq':\r\n case 'neq':\r\n case 'gt':\r\n case 'gte':\r\n case 'lt':\r\n case 'lte':\r\n case 'like':\r\n case 'ilike': {\r\n if (Array.isArray(value) || value === undefined) return null\r\n const rhs = withCast(toSqlLiteral(value), condition.value_cast)\r\n return `${column} ${sqlOperator[condition.operator]} ${rhs}`\r\n }\r\n case 'is': {\r\n if (value === null) return `${column} IS NULL`\r\n if (value === true) return `${column} IS TRUE`\r\n if (value === false) return `${column} IS FALSE`\r\n return null\r\n }\r\n case 'in': {\r\n if (!Array.isArray(value)) return null\r\n if (value.length === 0) return 'FALSE'\r\n const values = value.map(item => withCast(toSqlLiteral(item), condition.value_cast))\r\n return `${column} IN (${values.join(', ')})`\r\n }\r\n default:\r\n return null\r\n }\r\n}\r\n\r\nfunction buildTypedSelectQuery(input: {\r\n tableName: string\r\n columns: string | string[]\r\n conditions: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n currentPage?: number\r\n pageSize?: number\r\n order?: AthenaSortBy\r\n}): string | null {\r\n const whereClauses: string[] = []\r\n for (const condition of input.conditions) {\r\n const clause = conditionToSqlClause(condition)\r\n if (!clause) return null\r\n whereClauses.push(clause)\r\n }\r\n\r\n let limit = input.limit\r\n let offset = input.offset\r\n if (limit === undefined && input.pageSize !== undefined) {\r\n limit = input.pageSize\r\n }\r\n if (\r\n offset === undefined &&\r\n input.pageSize !== undefined &&\r\n input.currentPage !== undefined &&\r\n input.currentPage > 0\r\n ) {\r\n offset = (input.currentPage - 1) * input.pageSize\r\n }\r\n\r\n const sqlParts = [\r\n `SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\r\n ]\r\n\r\n if (whereClauses.length > 0) {\r\n sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\r\n }\r\n\r\n if (input.order?.field) {\r\n const direction = input.order.direction === 'descending' ? 'DESC' : 'ASC'\r\n sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(input.order.field)} ${direction}`)\r\n }\r\n\r\n if (limit !== undefined) {\r\n sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`)\r\n }\r\n\r\n if (offset !== undefined) {\r\n sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`)\r\n }\r\n\r\n return `${sqlParts.join(' ')};`\r\n}\r\n\r\nfunction createFilterMethods<Self, Row>(\r\n state: TableBuilderState,\r\n addCondition: (\r\n operator: AthenaConditionOperator,\r\n column?: string,\r\n value?: AthenaConditionValue | AthenaConditionArrayValue | string,\r\n hints?: ConditionCastHints,\r\n ) => void,\r\n self: Self,\r\n): FilterChain<Self, Row> {\r\n return {\r\n eq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n const columnName = String(column)\r\n if (shouldUseUuidTextComparison(columnName, value)) {\r\n addCondition('eq', columnName, value, { columnCast: 'text' })\r\n } else {\r\n addCondition('eq', columnName, value)\r\n }\r\n return self\r\n },\r\n eqCast(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue, cast: AthenaConditionCastType) {\r\n addCondition('eq', String(column), value, { valueCast: cast })\r\n return self\r\n },\r\n eqUuid(column: ResolvedFilterColumnKey<Row>, value: string) {\r\n addCondition('eq', String(column), value, { valueCast: 'uuid' })\r\n return self\r\n },\r\n match(filters: Partial<Record<ResolvedFilterColumnKey<Row>, AthenaConditionValue>>) {\r\n Object.entries(filters as Record<string, AthenaConditionValue | undefined>).forEach(([column, value]) => {\r\n if (value === undefined) {\r\n return\r\n }\r\n if (shouldUseUuidTextComparison(column, value)) {\r\n addCondition('eq', column, value, { columnCast: 'text' })\r\n } else {\r\n addCondition('eq', column, value)\r\n }\r\n })\r\n return self\r\n },\r\n range(from: number, to: number) {\r\n state.offset = from\r\n state.limit = to - from + 1\r\n return self\r\n },\r\n limit(count: number) {\r\n state.limit = count\r\n return self\r\n },\r\n offset(count: number) {\r\n state.offset = count\r\n return self\r\n },\r\n currentPage(value: number) {\r\n state.currentPage = value\r\n return self\r\n },\r\n pageSize(value: number) {\r\n state.pageSize = value\r\n return self\r\n },\r\n totalPages(value: number) {\r\n state.totalPages = value\r\n return self\r\n },\r\n order(column: ResolvedFilterColumnKey<Row>, options?: OrderOptions) {\r\n state.order = {\r\n field: String(column),\r\n direction: options?.ascending === false ? 'descending' : 'ascending',\r\n }\r\n return self\r\n },\r\n gt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('gt', String(column), value)\r\n return self\r\n },\r\n gte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('gte', String(column), value)\r\n return self\r\n },\r\n lt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('lt', String(column), value)\r\n return self\r\n },\r\n lte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('lte', String(column), value)\r\n return self\r\n },\r\n neq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('neq', String(column), value)\r\n return self\r\n },\r\n like(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('like', String(column), value)\r\n return self\r\n },\r\n ilike(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('ilike', String(column), value)\r\n return self\r\n },\r\n is(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('is', String(column), value)\r\n return self\r\n },\r\n in(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\r\n addCondition('in', String(column), values)\r\n return self\r\n },\r\n contains(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\r\n addCondition('contains', String(column), values)\r\n return self\r\n },\r\n containedBy(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\r\n addCondition('containedBy', String(column), values)\r\n return self\r\n },\r\n not(\r\n columnOrExpression: ResolvedFilterColumnKey<Row> | string,\r\n operator?: AthenaConditionOperator,\r\n value?: AthenaConditionValue,\r\n ) {\r\n const expression = String(columnOrExpression)\r\n if (operator != null && value !== undefined) {\r\n addCondition('not', undefined, `${expression}.${operator}.${stringifyFilterValue(value)}`)\r\n } else {\r\n addCondition('not', undefined, expression)\r\n }\r\n return self\r\n },\r\n or(expression: string) {\r\n addCondition('or', undefined, expression)\r\n return self\r\n },\r\n }\r\n}\r\n\r\nfunction toRpcSelect(columns?: string | string[]) {\r\n if (!columns) return undefined\r\n return Array.isArray(columns) ? columns.join(',') : columns\r\n}\r\n\r\nfunction createRpcFilterMethods<Self>(\r\n filters: AthenaRpcFilter[],\r\n self: Self,\r\n) {\r\n const addFilter = (\r\n operator: AthenaRpcFilterOperator,\r\n column: string,\r\n value: AthenaConditionValue | AthenaConditionArrayValue | string,\r\n ) => {\r\n filters.push({ column, operator, value })\r\n }\r\n\r\n return {\r\n eq(column: string, value: AthenaConditionValue) {\r\n addFilter('eq', column, value)\r\n return self\r\n },\r\n neq(column: string, value: AthenaConditionValue) {\r\n addFilter('neq', column, value)\r\n return self\r\n },\r\n gt(column: string, value: AthenaConditionValue) {\r\n addFilter('gt', column, value)\r\n return self\r\n },\r\n gte(column: string, value: AthenaConditionValue) {\r\n addFilter('gte', column, value)\r\n return self\r\n },\r\n lt(column: string, value: AthenaConditionValue) {\r\n addFilter('lt', column, value)\r\n return self\r\n },\r\n lte(column: string, value: AthenaConditionValue) {\r\n addFilter('lte', column, value)\r\n return self\r\n },\r\n like(column: string, value: AthenaConditionValue) {\r\n addFilter('like', column, value)\r\n return self\r\n },\r\n ilike(column: string, value: AthenaConditionValue) {\r\n addFilter('ilike', column, value)\r\n return self\r\n },\r\n is(column: string, value: AthenaConditionValue) {\r\n addFilter('is', column, value)\r\n return self\r\n },\r\n in(column: string, values: AthenaConditionArrayValue) {\r\n addFilter('in', column, values)\r\n return self\r\n },\r\n }\r\n}\r\n\r\nfunction createRpcBuilder<Row>(\n functionName: string,\n args: AthenaJsonObject | undefined,\n baseOptions: AthenaRpcCallOptions | undefined,\n client: ReturnType<typeof createAthenaGatewayClient>,\n formatGatewayResult: AthenaResultFormatter,\n): RpcQueryBuilder<Row> {\n const state: {\r\n filters: AthenaRpcFilter[]\r\n limit?: number\r\n offset?: number\r\n order?: { column: string; ascending?: boolean }\r\n } = {\r\n filters: [],\r\n }\r\n\r\n let selectedColumns: string | string[] | undefined\r\n let selectedOptions: AthenaRpcCallOptions | undefined\r\n let promise: Promise<AthenaResult<Row[]>> | null = null\r\n\r\n const executeRpc = async <SelectedRow = Row>(\r\n columns?: string | string[],\r\n options?: AthenaRpcCallOptions,\r\n ): Promise<AthenaResult<SelectedRow[]>> => {\r\n const mergedOptions = mergeOptions(baseOptions, options)\r\n const payload: AthenaRpcPayload = {\r\n function: functionName,\r\n args,\r\n schema: mergedOptions?.schema,\r\n select: toRpcSelect(columns),\r\n filters: state.filters.length ? [...state.filters] : undefined,\r\n count: mergedOptions?.count,\r\n head: mergedOptions?.head,\r\n limit: state.limit,\r\n offset: state.offset,\r\n order: state.order,\r\n }\n const response = await client.rpcGateway<SelectedRow[]>(payload, mergedOptions)\n return formatGatewayResult(response, { operation: 'rpc' })\n }\n\r\n const run = (columns?: string | string[], options?: AthenaRpcCallOptions) => {\r\n const payloadColumns = columns ?? selectedColumns\r\n const payloadOptions = options ?? selectedOptions\r\n if (!promise) {\r\n promise = executeRpc<Row>(payloadColumns, payloadOptions)\r\n }\r\n return promise\r\n }\r\n\r\n const builder = {} as RpcQueryBuilder<Row>\r\n const filterMethods = createRpcFilterMethods(state.filters, builder)\r\n\r\n Object.assign(builder, filterMethods, {\r\n select(columns = selectedColumns, options?: AthenaRpcCallOptions) {\r\n selectedColumns = columns\r\n selectedOptions = options ?? selectedOptions\r\n return run(columns, options)\r\n },\r\n async single<T = Row>(columns?: string | string[], options?: AthenaRpcCallOptions) {\r\n const result = await run(columns, options)\r\n return toSingleResult(result) as AthenaResult<T | null>\r\n },\r\n maybeSingle<T = Row>(columns?: string | string[], options?: AthenaRpcCallOptions) {\r\n return builder.single<T>(columns, options)\r\n },\r\n order(column: string, options?: RpcOrderOptions) {\r\n state.order = { column, ascending: options?.ascending ?? true }\r\n return builder\r\n },\r\n limit(count: number) {\r\n state.limit = count\r\n return builder\r\n },\r\n offset(count: number) {\r\n state.offset = count\r\n return builder\r\n },\r\n range(from: number, to: number) {\r\n state.offset = from\r\n state.limit = to - from + 1\r\n return builder\r\n },\r\n then<T1 = AthenaResult<Row[]>, T2 = never>(\r\n onfulfilled?: (v: AthenaResult<Row[]>) => T1 | PromiseLike<T1>,\r\n onrejected?: (reason: unknown) => T2 | PromiseLike<T2>,\r\n ) {\r\n return run(selectedColumns, selectedOptions).then(onfulfilled, onrejected)\r\n },\r\n catch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\r\n return run(selectedColumns, selectedOptions).catch(onrejected)\r\n },\r\n finally(onfinally?: () => void) {\r\n return run(selectedColumns, selectedOptions).finally(onfinally)\r\n },\r\n })\r\n\r\n return builder\r\n}\r\n\r\nfunction createTableBuilder<\n Row,\n Insert = Partial<Row>,\n Update = Partial<Insert>,\n>(\n tableName: string,\n client: ReturnType<typeof createAthenaGatewayClient>,\n formatGatewayResult: AthenaResultFormatter,\n): TableQueryBuilder<Row, Insert, Update> {\n const state: TableBuilderState = {\r\n conditions: [],\r\n }\r\n\r\n const addCondition = (\r\n operator: AthenaConditionOperator,\r\n column?: string,\r\n value?: AthenaConditionValue | AthenaConditionArrayValue | string,\r\n hints?: ConditionCastHints,\r\n ) => {\r\n const condition: AthenaGatewayCondition = { operator }\r\n if (column) {\r\n condition.column = column\r\n if (operator === 'eq') {\r\n // include legacy gateway shape for compatibility\r\n condition.eq_column = column\r\n }\r\n }\r\n if (value !== undefined) {\r\n condition.value = value\r\n if (operator === 'eq') {\r\n condition.eq_value = value\r\n }\r\n }\r\n if (hints?.valueCast) {\r\n condition.value_cast = hints.valueCast\r\n if (operator === 'eq') {\r\n condition.eq_value_cast = hints.valueCast\r\n }\r\n }\r\n if (hints?.columnCast) {\r\n condition.column_cast = hints.columnCast\r\n if (operator === 'eq') {\r\n condition.eq_column_cast = hints.columnCast\r\n }\r\n }\r\n state.conditions.push(condition)\r\n }\r\n\r\n const builder = {} as TableQueryBuilder<Row, Insert, Update>\r\n\r\n const filterMethods = createFilterMethods<TableQueryBuilder<Row, Insert, Update>, Row>(\r\n state,\r\n addCondition,\r\n builder,\r\n )\r\n\r\n const runSelect = async <T = Row>(\r\n columns: string | string[] = DEFAULT_COLUMNS,\r\n options?: AthenaGatewayCallOptions,\r\n ) => {\r\n const resolvedTableName = resolveTableNameForCall(tableName, options?.schema)\r\n const conditions = state.conditions.length\r\n ? state.conditions.map(condition => ({ ...condition }))\r\n : undefined\r\n const hasTypedEqualityComparison =\r\n conditions?.some(\r\n condition =>\r\n condition.operator === 'eq' &&\r\n (condition.value_cast !== undefined || condition.column_cast !== undefined),\r\n ) ?? false\r\n\r\n if (hasTypedEqualityComparison && !options?.head && !options?.count && conditions) {\r\n const query = buildTypedSelectQuery({\r\n tableName: resolvedTableName,\r\n columns,\r\n conditions,\r\n limit: state.limit,\r\n offset: state.offset,\r\n currentPage: state.currentPage,\r\n pageSize: state.pageSize,\r\n order: state.order,\r\n })\n if (query) {\n const queryResponse = await client.queryGateway<T>({ query }, options)\n return formatGatewayResult(queryResponse, { table: resolvedTableName, operation: 'select' })\n }\n }\n\r\n const payload = {\r\n table_name: resolvedTableName,\r\n columns,\r\n conditions,\r\n limit: state.limit,\r\n offset: state.offset,\r\n current_page: state.currentPage,\r\n page_size: state.pageSize,\r\n total_pages: state.totalPages,\r\n sort_by: state.order,\r\n strip_nulls: options?.stripNulls ?? true,\r\n count: options?.count,\r\n head: options?.head,\r\n }\n const response = await client.fetchGateway<T>(payload, options)\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'select' })\n }\n\r\n const createSelectChain = <SelectedRow>(\r\n columns: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n ): SelectChain<Row, SelectedRow> => {\r\n const chain = {} as SelectChain<Row, SelectedRow>\r\n const filterMethods = createFilterMethods<SelectChain<Row, SelectedRow>, Row>(state, addCondition, chain)\r\n Object.assign(chain, filterMethods, {\r\n async single<T = SelectedRow>(cols?: string | string[], opts?: AthenaGatewayCallOptions) {\r\n const r = await runSelect<T[]>(cols ?? columns, opts ?? options)\r\n return toSingleResult(r)\r\n },\r\n maybeSingle<T = SelectedRow>(cols?: string | string[], opts?: AthenaGatewayCallOptions) {\r\n return chain.single<T>(cols, opts)\r\n },\r\n then<T1 = AthenaResult<SelectedRow[]>, T2 = never>(\r\n onfulfilled?: (v: AthenaResult<SelectedRow[]>) => T1 | PromiseLike<T1>,\r\n onrejected?: (reason: unknown) => T2 | PromiseLike<T2>,\r\n ) {\r\n return runSelect<SelectedRow[]>(columns, options).then(onfulfilled, onrejected)\r\n },\r\n catch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\r\n return runSelect<SelectedRow[]>(columns, options).catch(onrejected)\r\n },\r\n finally(onfinally?: () => void) {\r\n return runSelect<SelectedRow[]>(columns, options).finally(onfinally)\r\n },\r\n })\r\n return chain\r\n }\r\n\r\n Object.assign(builder, filterMethods, {\r\n reset() {\r\n state.conditions = []\r\n state.limit = undefined\r\n state.offset = undefined\r\n state.order = undefined\r\n state.currentPage = undefined\r\n state.pageSize = undefined\r\n state.totalPages = undefined\r\n return builder\r\n },\r\n select<T = Row>(columns: string | string[] = DEFAULT_COLUMNS, options?: AthenaGatewayCallOptions) {\r\n return createSelectChain<T>(columns, options)\r\n },\r\n insert(values: Insert | Insert[], options?: AthenaGatewayCallOptions) {\r\n if (Array.isArray(values)) {\r\n const executeInsertMany = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaInsertPayload = {\r\n table_name: resolvedTableName,\r\n insert_body: asAthenaJsonObjectArray(values),\r\n }\r\n if (columns) payload.columns = columns\r\n if (mergedOptions?.count) payload.count = mergedOptions.count\r\n if (mergedOptions?.head) payload.head = mergedOptions.head\r\n if (mergedOptions?.defaultToNull !== undefined) {\n payload.default_to_null = mergedOptions.defaultToNull\n }\n const response = await client.insertGateway<Row[]>(payload, mergedOptions)\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\n }\n return createMutationQuery<Row[]>(executeInsertMany)\n }\n const executeInsertOne = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaInsertPayload = {\r\n table_name: resolvedTableName,\r\n insert_body: asAthenaJsonObject(values),\r\n }\r\n if (columns) payload.columns = columns\r\n if (mergedOptions?.count) payload.count = mergedOptions.count\r\n if (mergedOptions?.head) payload.head = mergedOptions.head\r\n if (mergedOptions?.defaultToNull !== undefined) {\n payload.default_to_null = mergedOptions.defaultToNull\n }\n const response = await client.insertGateway<Row>(payload, mergedOptions)\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\n }\n return createMutationQuery<Row>(executeInsertOne)\n },\r\n upsert(\r\n values: Insert | Insert[],\r\n options?: AthenaGatewayCallOptions & { updateBody?: Update; onConflict?: string | string[] },\r\n ) {\r\n if (Array.isArray(values)) {\r\n const executeUpsertMany = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaInsertPayload = {\r\n table_name: resolvedTableName,\r\n insert_body: asAthenaJsonObjectArray(values),\r\n update_body: options?.updateBody ? asAthenaJsonObject(options.updateBody) : undefined,\r\n }\r\n if (columns) payload.columns = columns\r\n if (options?.onConflict) payload.on_conflict = options.onConflict\r\n if (mergedOptions?.count) payload.count = mergedOptions.count\r\n if (mergedOptions?.head) payload.head = mergedOptions.head\r\n if (mergedOptions?.defaultToNull !== undefined) {\n payload.default_to_null = mergedOptions.defaultToNull\n }\n const response = await client.insertGateway<Row[]>(payload, mergedOptions)\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\n }\n return createMutationQuery<Row[]>(executeUpsertMany)\n }\n const executeUpsertOne = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaInsertPayload = {\r\n table_name: resolvedTableName,\r\n insert_body: asAthenaJsonObject(values),\r\n update_body: options?.updateBody ? asAthenaJsonObject(options.updateBody) : undefined,\r\n }\r\n if (columns) payload.columns = columns\r\n if (options?.onConflict) payload.on_conflict = options.onConflict\r\n if (mergedOptions?.count) payload.count = mergedOptions.count\r\n if (mergedOptions?.head) payload.head = mergedOptions.head\r\n if (mergedOptions?.defaultToNull !== undefined) {\n payload.default_to_null = mergedOptions.defaultToNull\n }\n const response = await client.insertGateway<Row>(payload, mergedOptions)\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\n }\n return createMutationQuery<Row>(executeUpsertOne)\n },\r\n update(values: Update, options?: AthenaGatewayCallOptions) {\r\n const executeUpdate = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n ) => {\r\n const filters = state.conditions.length ? [...state.conditions] : undefined\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaUpdatePayload = {\r\n table_name: resolvedTableName,\r\n set: asAthenaJsonObject(values),\r\n conditions: filters,\r\n strip_nulls: mergedOptions?.stripNulls ?? true,\r\n }\r\n if (state.order) payload.sort_by = state.order\r\n if (state.currentPage !== undefined) payload.current_page = state.currentPage\r\n if (state.pageSize !== undefined) payload.page_size = state.pageSize\r\n if (state.totalPages !== undefined) payload.total_pages = state.totalPages\n if (columns) payload.columns = columns\n const response = await client.updateGateway<Row[]>(payload, mergedOptions)\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'update' })\n }\n const mutation = createMutationQuery<Row[]>(executeUpdate, null)\r\n const updateChain = {} as UpdateChain<Row>\r\n const filterMethods = createFilterMethods<UpdateChain<Row>, Row>(state, addCondition, updateChain)\r\n Object.assign(updateChain, filterMethods, mutation)\r\n return updateChain\r\n },\r\n delete(options?: AthenaGatewayCallOptions & { resourceId?: string }) {\r\n const filters = state.conditions.length ? [...state.conditions] : undefined\r\n const resourceId = options?.resourceId ?? getResourceId(state)\r\n if (!resourceId && !filters?.length) {\r\n throw new Error('delete requires a resource_id either via eq(\"resource_id\", ...) or options.resourceId')\r\n }\r\n const executeDelete = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaDeletePayload = {\r\n table_name: resolvedTableName,\r\n resource_id: resourceId,\r\n conditions: filters,\r\n }\r\n if (state.order) payload.sort_by = state.order\r\n if (state.currentPage !== undefined) payload.current_page = state.currentPage\r\n if (state.pageSize !== undefined) payload.page_size = state.pageSize\r\n if (state.totalPages !== undefined) payload.total_pages = state.totalPages\n if (columns) payload.columns = columns\n const response = await client.deleteGateway<Row | null>(payload, mergedOptions)\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'delete' })\n }\n return createMutationQuery<Row | null>(executeDelete, null)\r\n },\r\n async single<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions) {\r\n const response = await builder.select<T[]>(columns, options)\r\n return toSingleResult(response)\r\n },\r\n async maybeSingle<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions) {\r\n return builder.single<T>(columns, options)\r\n },\r\n })\r\n\r\n return builder\r\n}\r\n\r\nfunction createQueryBuilder(\n client: ReturnType<typeof createAthenaGatewayClient>,\n formatGatewayResult: AthenaResultFormatter,\n) {\n return async function query<Row = unknown>(\r\n query: string,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<Row[]>> {\r\n const normalizedQuery = query.trim()\r\n if (!normalizedQuery) {\n throw new Error('query requires a non-empty string')\n }\n const response = await client.queryGateway<Row[]>({ query: normalizedQuery }, options)\n return formatGatewayResult(response, { operation: 'query' })\n }\n}\n\r\nexport interface AthenaSdkClient {\n from<\n Row = AthenaRowShape,\n Insert = Partial<Row>,\n Update = Partial<Insert>,\n >(table: string): TableQueryBuilder<Row, Insert, Update>\n db: AthenaDbModule\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}\n\nexport interface AthenaSdkClientWithAuth extends AthenaSdkClient {\n auth: AthenaAuthBindings\n}\n\r\n/** Client config for builder */\r\nexport interface AthenaClientConfig {\n baseUrl: string\n apiKey: string\n client?: string\n backend?: BackendConfig\n headers?: Record<string, string>\n healthTracking?: boolean\n auth?: AthenaAuthClientConfig\n experimental?: AthenaClientExperimentalOptions\n}\n\nfunction createClientFromConfig(config: AthenaClientConfig): AthenaSdkClientWithAuth {\n const gateway = createAthenaGatewayClient({\n baseUrl: config.baseUrl,\n apiKey: config.apiKey,\n client: config.client,\n backend: config.backend,\n headers: config.headers,\n })\n const formatGatewayResult = createResultFormatter(config.experimental)\n const auth = createAuthClient(config.auth)\n const from: AthenaSdkClient['from'] = <\n Row = AthenaRowShape,\n Insert = Partial<Row>,\n Update = Partial<Insert>,\n >(table: string) => createTableBuilder<Row, Insert, Update>(table, gateway, formatGatewayResult)\n const rpc: AthenaSdkClient['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 )\n }\n const query = createQueryBuilder(gateway, formatGatewayResult) as AthenaSdkClient['query']\n const db = createDbModule({ from, rpc, query })\n\n return {\n from,\n db,\n rpc,\n query,\n auth: auth.auth,\n }\n}\n\r\nexport interface AthenaClientBuilder {\n /** Set the gateway base URL. */\r\n url(url: string): AthenaClientBuilder\r\n /** Set the API key used for all requests. */\r\n key(apiKey: string): AthenaClientBuilder\r\n /** Set the default backend routing strategy. */\r\n backend(backend: BackendConfig | BackendType): AthenaClientBuilder\r\n /** Set the default Athena client routing key. */\r\n client(clientName: string): AthenaClientBuilder\r\n /** Attach static headers to every request. */\r\n headers(headers: Record<string, string>): AthenaClientBuilder\r\n /** Enable or disable health tracking metadata. */\r\n healthTracking(enabled: boolean): AthenaClientBuilder\r\n /** Build the immutable Athena SDK client. */\n build(): AthenaSdkClientWithAuth\n}\n\r\nconst DEFAULT_BACKEND: BackendConfig = { type: 'athena' }\r\n\r\nfunction toBackendConfig(b: BackendConfig | BackendType | undefined): BackendConfig {\r\n if (!b) return DEFAULT_BACKEND\r\n return typeof b === 'string' ? { type: b } : b\r\n}\r\n\r\nclass AthenaClientBuilderImpl implements AthenaClientBuilder {\n private baseUrl?: string\r\n private apiKey?: string\r\n private backendConfig: BackendConfig = DEFAULT_BACKEND\r\n private clientName?: string\r\n private defaultHeaders?: Record<string, string>\r\n private isHealthTrackingEnabled = false\r\n\r\n url(url: string): AthenaClientBuilder {\r\n this.baseUrl = url\r\n return this\r\n }\r\n\r\n key(apiKey: string): AthenaClientBuilder {\r\n this.apiKey = apiKey\r\n return this\r\n }\r\n\r\n backend(backend: BackendConfig | BackendType): AthenaClientBuilder {\r\n this.backendConfig = toBackendConfig(backend)\r\n return this\r\n }\r\n\r\n client(clientName: string): AthenaClientBuilder {\r\n this.clientName = clientName\r\n return this\r\n }\r\n\r\n headers(headers: Record<string, string>): AthenaClientBuilder {\r\n this.defaultHeaders = headers\r\n return this\r\n }\r\n\r\n healthTracking(enabled: boolean): AthenaClientBuilder {\r\n this.isHealthTrackingEnabled = enabled\r\n return this\r\n }\r\n\r\n build(): AthenaSdkClientWithAuth {\n if (!this.baseUrl || !this.apiKey) {\r\n throw new Error('AthenaClient requires url and key; call .url() and .key() before .build()')\r\n }\r\n\r\n return createClientFromConfig({\r\n baseUrl: this.baseUrl,\r\n apiKey: this.apiKey,\r\n client: this.clientName,\r\n backend: this.backendConfig,\r\n headers: this.defaultHeaders,\r\n healthTracking: this.isHealthTrackingEnabled,\r\n })\r\n }\r\n}\r\n\r\n/** Canonical Athena client factory with builder-based configuration. */\r\nexport class AthenaClient {\n /** Create a fluent builder for a strongly-typed Athena SDK client. */\r\n static builder(): AthenaClientBuilder {\r\n return new AthenaClientBuilderImpl()\r\n }\r\n\r\n /** Build a client from process environment variables. */\r\n static fromEnvironment(): AthenaSdkClientWithAuth {\n const url =\r\n process.env.ATHENA_URL ??\r\n process.env.ATHENA_GATEWAY_URL\r\n const key =\r\n process.env.ATHENA_API_KEY ??\r\n process.env.ATHENA_GATEWAY_API_KEY\r\n\r\n if (!url || !key) {\r\n throw new Error(\r\n 'ATHENA_URL and ATHENA_API_KEY (or ATHENA_GATEWAY_URL and ATHENA_GATEWAY_API_KEY) are required',\r\n )\r\n }\r\n\r\n return AthenaClient.builder()\r\n .url(url)\r\n .key(key)\r\n .build()\r\n }\n}\n\nexport interface AthenaCreateClientOptions extends Pick<AthenaGatewayCallOptions, 'client' | 'headers' | 'backend'> {\n auth?: AthenaAuthClientConfig\n experimental?: AthenaClientExperimentalOptions\n}\n\n/** Create client (convenience wrapper; use AthenaClient.builder() for full control) */\nexport function createClient(\n url: string,\n apiKey: string,\n options?: AthenaCreateClientOptions,\n): AthenaSdkClientWithAuth {\n return createClientFromConfig({\n baseUrl: url,\n apiKey,\n client: options?.client,\n backend: toBackendConfig(options?.backend),\n headers: options?.headers,\n auth: options?.auth,\n experimental: options?.experimental,\n })\n}\n","/**\r\n * athena gateway types\r\n *\r\n * type definitions for the athena gateway api client and react hook\r\n */\r\n\r\nexport type AthenaGatewayMethod = 'GET' | 'POST' | 'PUT' | 'DELETE'\r\nexport type AthenaGatewayEndpointPath =\r\n | '/gateway/fetch'\r\n | '/gateway/insert'\r\n | '/gateway/update'\r\n | '/gateway/delete'\r\n | '/gateway/rpc'\r\n | '/gateway/query'\r\n | `/rpc/${string}`\r\n\r\nexport type AthenaCountOption = 'exact' | 'planned' | 'estimated'\r\n\r\nexport type AthenaJsonPrimitive = string | number | boolean | null\r\nexport type AthenaJsonValue = AthenaJsonPrimitive | AthenaJsonObject | AthenaJsonArray\r\nexport interface AthenaJsonObject {\r\n [key: string]: AthenaJsonValue\r\n}\r\nexport type AthenaJsonArray = AthenaJsonValue[]\r\n\r\nexport type AthenaConditionValue = AthenaJsonPrimitive\r\nexport type AthenaConditionArrayValue = Array<AthenaConditionValue>\r\nexport type AthenaConditionCastType = string\r\n\r\nexport type AthenaConditionOperator =\r\n | 'eq'\r\n | 'neq'\r\n | 'gt'\r\n | 'gte'\r\n | 'lt'\r\n | 'lte'\r\n | 'like'\r\n | 'ilike'\r\n | 'is'\r\n | 'in'\r\n | 'contains'\r\n | 'containedBy'\r\n | 'not'\r\n | 'or'\r\n\r\nexport interface AthenaGatewayCondition {\r\n column?: string\r\n operator: AthenaConditionOperator\r\n value?: AthenaConditionValue | AthenaConditionArrayValue | string\r\n /**\r\n * Optional explicit cast for `value` (for example `\"uuid\"`).\r\n * Older gateways ignore unknown fields; newer gateways may use this hint.\r\n */\r\n value_cast?: AthenaConditionCastType\r\n /**\r\n * Optional explicit cast for `column` (for example `\"text\"`).\r\n * Used by SDK SQL fallback for typed comparisons.\r\n */\r\n column_cast?: AthenaConditionCastType\r\n /** Back-compat shape expected by older gateway implementations */\r\n eq_column?: string\r\n eq_value?: AthenaConditionValue | AthenaConditionArrayValue | string\r\n /** Optional cast hint aligned with legacy eq_* fields */\r\n eq_value_cast?: AthenaConditionCastType\r\n /** Optional cast hint aligned with legacy eq_* fields */\r\n eq_column_cast?: AthenaConditionCastType\r\n}\r\n\r\nexport type AthenaSortDirection = 'ascending' | 'descending'\r\n\r\nexport interface AthenaSortBy {\r\n field: string\r\n direction: AthenaSortDirection\r\n}\r\n\r\nexport interface AthenaFetchPayload {\r\n view_name?: string\r\n table_name?: string\r\n columns?: string[] | string\r\n conditions?: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n current_page?: number\r\n page_size?: number\r\n total_pages?: number\r\n strip_nulls?: boolean\r\n group_by?: string\r\n time_granularity?: 'day' | 'hour' | 'minute'\r\n aggregation_column?: string\r\n aggregation_strategy?: 'cumulative_sum'\r\n aggregation_dedup?: boolean\r\n sort_by?: AthenaSortBy\r\n}\r\n\r\nexport interface AthenaInsertPayload<\r\n TInsertBody = AthenaJsonObject,\r\n TUpdateBody = AthenaJsonObject,\r\n> {\r\n table_name: string\r\n insert_body: TInsertBody | TInsertBody[]\r\n update_body?: TUpdateBody\r\n columns?: string[] | string\r\n count?: AthenaCountOption\r\n head?: boolean\r\n default_to_null?: boolean\r\n on_conflict?: string | string[]\r\n}\r\n\r\nexport interface AthenaDeletePayload {\r\n table_name: string\r\n resource_id?: string\r\n columns?: string[] | string\r\n conditions?: AthenaGatewayCondition[]\r\n sort_by?: AthenaSortBy\r\n current_page?: number\r\n page_size?: number\r\n total_pages?: number\r\n}\r\n\r\nexport interface AthenaUpdatePayload<TUpdateBody = AthenaJsonObject>\r\n extends AthenaFetchPayload {\r\n set?: TUpdateBody\r\n data?: TUpdateBody\r\n}\r\n\r\nexport type AthenaRpcFilterOperator =\r\n | 'eq'\r\n | 'neq'\r\n | 'gt'\r\n | 'gte'\r\n | 'lt'\r\n | 'lte'\r\n | 'like'\r\n | 'ilike'\r\n | 'is'\r\n | 'in'\r\n\r\nexport interface AthenaRpcFilter {\r\n column: string\r\n operator: AthenaRpcFilterOperator\r\n value?: AthenaConditionValue | AthenaConditionArrayValue | string\r\n}\r\n\r\nexport interface AthenaRpcOrder {\r\n column: string\r\n ascending?: boolean\r\n}\r\n\r\nexport interface AthenaRpcPayload<TArgs = AthenaJsonObject> {\r\n function: string\r\n function_name?: string\r\n schema?: string\r\n args?: TArgs\r\n select?: string\r\n filters?: AthenaRpcFilter[]\r\n count?: AthenaCountOption\r\n head?: boolean\r\n limit?: number\r\n offset?: number\r\n order?: AthenaRpcOrder\r\n}\r\n\r\nexport interface AthenaQueryPayload {\r\n query: string\r\n}\r\n\r\n/** Backend type for Athena client (aligns with athena-rs) */\r\nexport type BackendType = 'athena' | 'postgrest' | 'postgresql' | 'scylladb'\r\n\r\n/** Backend config: type from SDK + backend-scoped options */\r\nexport interface BackendConfig {\r\n type: BackendType\r\n options?: AthenaJsonObject\r\n}\r\n\r\n/** Pre-defined backends for lean usage: backend: Backend.Athena */\r\nexport const Backend = {\r\n Athena: { type: 'athena' } as const,\r\n Postgrest: { type: 'postgrest' } as const,\r\n PostgreSQL: { type: 'postgresql' } as const,\r\n ScyllaDB: { type: 'scylladb' } as const,\r\n} as const satisfies Record<string, BackendConfig>\r\n\r\nexport type BackendOption = BackendConfig | BackendType\r\n\r\nexport interface AthenaGatewayBaseOptions {\r\n baseUrl?: string\r\n apiKey?: string\r\n client?: string\r\n backend?: BackendOption\r\n publishEvent?: string\r\n headers?: Record<string, string>\r\n userId?: string | null\r\n organizationId?: string | null\r\n}\r\n\r\nexport type AthenaGatewayHookConfig = AthenaGatewayBaseOptions\r\nexport interface AthenaGatewayCallOptions extends AthenaGatewayBaseOptions {\r\n schema?: string\r\n count?: AthenaCountOption\r\n head?: boolean\r\n defaultToNull?: boolean\r\n stripNulls?: boolean\r\n onConflict?: string | string[]\r\n updateBody?: AthenaJsonObject\r\n}\r\n\r\nexport interface AthenaRpcCallOptions extends AthenaGatewayCallOptions {\r\n count?: AthenaCountOption\r\n get?: boolean\r\n}\r\n\r\nexport interface AthenaGatewayResponse<T = unknown> {\r\n ok: boolean\r\n status: number\r\n data: T | null\r\n count?: number | null\r\n error?: string\r\n errorDetails?: AthenaGatewayErrorDetails | null\r\n raw: unknown\r\n}\r\n\r\nexport type AthenaGatewayErrorCode =\r\n | 'NETWORK_ERROR'\r\n | 'HTTP_ERROR'\r\n | 'INVALID_JSON'\r\n | 'UNKNOWN_ERROR'\r\n\r\nexport interface AthenaGatewayErrorDetails {\r\n code: AthenaGatewayErrorCode\r\n message: string\r\n status: number\r\n endpoint?: AthenaGatewayEndpointPath\r\n method?: AthenaGatewayMethod\r\n requestId?: string\r\n hint?: string\r\n cause?: string\r\n}\r\n\r\nexport interface AthenaGatewayResponseLog extends AthenaGatewayResponse {\r\n timestamp: string\r\n}\r\n\r\nexport interface AthenaGatewayCallLog {\r\n endpoint: AthenaGatewayEndpointPath\r\n method: AthenaGatewayMethod\r\n payload: unknown\r\n headers: Record<string, string>\r\n timestamp: string\r\n}\r\n\r\nexport interface AthenaGatewayHookResult {\r\n fetchGateway: <T = unknown>(\r\n payload: AthenaFetchPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n insertGateway: <T = unknown>(\r\n payload: AthenaInsertPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n updateGateway: <T = unknown>(\r\n payload: AthenaUpdatePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n deleteGateway: <T = unknown>(\r\n payload: AthenaDeletePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n rpcGateway: <T = unknown>(\r\n payload: AthenaRpcPayload,\r\n options?: AthenaRpcCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n isLoading: boolean\r\n error: string | null\r\n lastRequest: AthenaGatewayCallLog | null\r\n lastResponse: AthenaGatewayResponseLog | null\r\n baseUrl: string\r\n}\r\n","import type {\r\n AnyModelDef,\r\n DatabaseDef,\r\n ModelDef,\r\n ModelMetadata,\r\n RegistryDef,\r\n SchemaDef,\r\n} from './types.ts'\r\n\r\n/**\r\n * Declares a model contract with explicit metadata and typed row/insert/update shapes.\r\n */\r\nexport function defineModel<\r\n Row,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n Meta extends ModelMetadata<Row> = ModelMetadata<Row>,\r\n>(input: { meta: Meta }): ModelDef<Row, Insert, Update, Meta> {\r\n return input\r\n}\r\n\r\n/**\r\n * Declares a schema-level model map.\r\n */\r\nexport function defineSchema<\r\n Models extends Record<string, AnyModelDef>,\r\n>(models: Models): SchemaDef<Models> {\r\n return { models }\r\n}\r\n\r\n/**\r\n * Declares a database-level schema map.\r\n */\r\nexport function defineDatabase<\r\n Schemas extends Record<string, SchemaDef<Record<string, AnyModelDef>>>,\r\n>(schemas: Schemas): DatabaseDef<Schemas> {\r\n return { schemas }\r\n}\r\n\r\n/**\r\n * Declares a top-level multi-database registry.\r\n */\r\nexport function defineRegistry<\r\n Databases extends Record<string, DatabaseDef<Record<string, SchemaDef<Record<string, AnyModelDef>>>>>,\r\n>(databases: Databases): RegistryDef<Databases> {\r\n return databases\r\n}\r\n\r\n","import {\r\n createClient,\r\n type AthenaResult,\r\n type AthenaSdkClient,\r\n type RpcQueryBuilder,\r\n type TableQueryBuilder,\r\n} from '../client.ts'\r\nimport type { AthenaGatewayCallOptions, AthenaJsonObject, AthenaRpcCallOptions } from '../gateway/types.ts'\r\nimport type {\r\n AnyModelDef,\r\n DatabaseDef,\r\n InsertOf,\r\n ModelAt,\r\n RegistryDef,\r\n RowOf,\r\n SchemaDef,\r\n TenantContext,\r\n TenantKeyMap,\r\n UpdateOf,\r\n} from './types.ts'\r\n\r\ntype RegistryConstraint = RegistryDef<\r\n Record<string, DatabaseDef<Record<string, SchemaDef<Record<string, AnyModelDef>>>>>\r\n>\r\n\r\n/**\r\n * Options for creating typed Athena clients.\r\n */\r\nexport interface TypedClientOptions<TMap extends TenantKeyMap = TenantKeyMap>\r\n extends Pick<AthenaGatewayCallOptions, 'backend' | 'client' | 'headers'> {\r\n tenantKeyMap?: TMap\r\n tenantContext?: TenantContext<TMap>\r\n}\r\n\r\n/**\r\n * Typed Athena client with registry-driven model resolution and tenant-context propagation.\r\n */\r\nexport interface TypedAthenaClient<\r\n TRegistry extends RegistryConstraint,\r\n TTenantMap extends TenantKeyMap = Record<never, string>,\r\n> extends AthenaSdkClient {\r\n readonly registry: TRegistry\r\n readonly tenantKeyMap: Readonly<TTenantMap>\r\n readonly tenantContext: TenantContext<TTenantMap>\r\n withTenantContext(context: TenantContext<TTenantMap>): TypedAthenaClient<TRegistry, TTenantMap>\r\n fromModel<\r\n TDatabase extends keyof TRegistry & string,\r\n TSchema extends keyof TRegistry[TDatabase]['schemas'] & string,\r\n TModel extends keyof TRegistry[TDatabase]['schemas'][TSchema]['models'] & string,\r\n >(\r\n database: TDatabase,\r\n schema: TSchema,\r\n model: TModel,\r\n ): TableQueryBuilder<\r\n RowOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n InsertOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n UpdateOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>\r\n >\r\n}\r\n\r\ntype BaseClientOptions = Pick<AthenaGatewayCallOptions, 'backend' | 'client' | 'headers'>\r\n\r\nclass TenantHeaderMapper<TMap extends TenantKeyMap> {\r\n constructor(private readonly tenantKeyMap: TMap) {}\r\n\r\n apply(\r\n baseHeaders: Record<string, string> | undefined,\r\n tenantContext: TenantContext<TMap>,\r\n ): Record<string, string> | undefined {\r\n const headers: Record<string, string> = {\r\n ...(baseHeaders ?? {}),\r\n }\r\n\r\n for (const [tenantKey, headerName] of Object.entries(this.tenantKeyMap)) {\r\n const tenantValue = tenantContext[tenantKey as keyof TMap]\r\n if (tenantValue === undefined || tenantValue === null) {\r\n continue\r\n }\r\n headers[headerName] = String(tenantValue)\r\n }\r\n\r\n return Object.keys(headers).length > 0 ? headers : undefined\r\n }\r\n}\r\n\r\nclass RegistryNavigator<TRegistry extends RegistryConstraint> {\r\n constructor(private readonly registry: TRegistry) {}\r\n\r\n resolveModel<\r\n TDatabase extends keyof TRegistry & string,\r\n TSchema extends keyof TRegistry[TDatabase]['schemas'] & string,\r\n TModel extends keyof TRegistry[TDatabase]['schemas'][TSchema]['models'] & string,\r\n >(\r\n database: TDatabase,\r\n schema: TSchema,\r\n model: TModel,\r\n ): ModelAt<TRegistry, TDatabase, TSchema, TModel> {\r\n const databaseDef = this.registry[database]\r\n if (!databaseDef) {\r\n throw new Error(`Unknown database \"${database}\"`)\r\n }\r\n\r\n const schemaDef = databaseDef.schemas[schema]\r\n if (!schemaDef) {\r\n throw new Error(`Unknown schema \"${schema}\" in database \"${database}\"`)\r\n }\r\n\r\n const modelDef = schemaDef.models[model]\r\n if (!modelDef) {\r\n throw new Error(`Unknown model \"${model}\" in schema \"${schema}\"`)\r\n }\r\n\r\n return modelDef as ModelAt<TRegistry, TDatabase, TSchema, TModel>\r\n }\r\n\r\n resolveTableName(\r\n schema: string,\r\n model: string,\r\n modelDef: AnyModelDef,\r\n ): string {\r\n if (modelDef.meta.tableName) {\r\n return modelDef.meta.tableName\r\n }\r\n const schemaName = modelDef.meta.schema ?? schema\r\n const modelName = modelDef.meta.model ?? model\r\n return `${schemaName}.${modelName}`\r\n }\r\n}\r\n\r\nclass TypedAthenaClientImpl<\n TRegistry extends RegistryConstraint,\n TTenantMap extends TenantKeyMap,\n> implements TypedAthenaClient<TRegistry, TTenantMap> {\n readonly registry: TRegistry\n readonly tenantKeyMap: Readonly<TTenantMap>\n readonly tenantContext: TenantContext<TTenantMap>\n readonly db: AthenaSdkClient['db']\n\r\n private readonly baseClient: AthenaSdkClient\r\n private readonly registryNavigator: RegistryNavigator<TRegistry>\r\n private readonly tenantHeaderMapper: TenantHeaderMapper<TTenantMap>\r\n private readonly clientOptions: BaseClientOptions\r\n private readonly url: string\r\n private readonly apiKey: string\r\n\r\n constructor(input: {\r\n registry: TRegistry\r\n url: string\r\n apiKey: string\r\n options?: TypedClientOptions<TTenantMap>\r\n }) {\r\n this.registry = input.registry\r\n this.url = input.url\r\n this.apiKey = input.apiKey\r\n\r\n const tenantKeyMap = (input.options?.tenantKeyMap ?? ({} as TTenantMap)) as TTenantMap\r\n const tenantContext = (input.options?.tenantContext ?? {}) as TenantContext<TTenantMap>\r\n\r\n this.tenantKeyMap = tenantKeyMap\r\n this.tenantContext = tenantContext\r\n this.tenantHeaderMapper = new TenantHeaderMapper(tenantKeyMap)\r\n this.registryNavigator = new RegistryNavigator(input.registry)\r\n\r\n this.clientOptions = {\r\n backend: input.options?.backend,\r\n client: input.options?.client,\r\n headers: input.options?.headers,\r\n }\r\n\r\n this.baseClient = createClient(this.url, this.apiKey, {\n backend: this.clientOptions.backend,\n client: this.clientOptions.client,\n headers: this.tenantHeaderMapper.apply(this.clientOptions.headers, tenantContext),\n })\n this.db = this.baseClient.db\n }\n\r\n from<\r\n Row = Record<string, unknown>,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(table: string): TableQueryBuilder<Row, Insert, Update> {\r\n return this.baseClient.from<Row, Insert, Update>(table)\r\n }\r\n\r\n rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\r\n fn: string,\r\n args?: Args,\r\n options?: AthenaRpcCallOptions,\r\n ): RpcQueryBuilder<Row> {\r\n return this.baseClient.rpc<Row, Args>(fn, args, options)\r\n }\r\n\r\n query<Row = unknown>(\r\n query: string,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<Row[]>> {\r\n return this.baseClient.query<Row>(query, options)\r\n }\r\n\r\n withTenantContext(context: TenantContext<TTenantMap>): TypedAthenaClient<TRegistry, TTenantMap> {\r\n return new TypedAthenaClientImpl({\r\n registry: this.registry,\r\n url: this.url,\r\n apiKey: this.apiKey,\r\n options: {\r\n ...this.clientOptions,\r\n tenantKeyMap: this.tenantKeyMap as TTenantMap,\r\n tenantContext: {\r\n ...this.tenantContext,\r\n ...(context ?? {}),\r\n },\r\n },\r\n })\r\n }\r\n\r\n fromModel<\r\n TDatabase extends keyof TRegistry & string,\r\n TSchema extends keyof TRegistry[TDatabase]['schemas'] & string,\r\n TModel extends keyof TRegistry[TDatabase]['schemas'][TSchema]['models'] & string,\r\n >(\r\n database: TDatabase,\r\n schema: TSchema,\r\n model: TModel,\r\n ): TableQueryBuilder<\r\n RowOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n InsertOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n UpdateOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>\r\n > {\r\n const modelDef = this.registryNavigator.resolveModel(database, schema, model)\r\n const tableName = this.registryNavigator.resolveTableName(schema, model, modelDef as AnyModelDef)\r\n return this.baseClient.from<\r\n RowOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n InsertOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n UpdateOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>\r\n >(tableName)\r\n }\r\n}\r\n\r\n/**\r\n * Creates a typed client bound to a registry contract and optional tenant header mapping.\r\n */\r\nexport function createTypedClient<\r\n TRegistry extends RegistryConstraint,\r\n TTenantMap extends TenantKeyMap = Record<never, string>,\r\n>(\r\n registry: TRegistry,\r\n url: string,\r\n apiKey: string,\r\n options?: TypedClientOptions<TTenantMap>,\r\n): TypedAthenaClient<TRegistry, TTenantMap> {\r\n return new TypedAthenaClientImpl({\r\n registry,\r\n url,\r\n apiKey,\r\n options,\r\n })\r\n}\r\n\r\n","import type {\r\n IntrospectionColumn,\r\n IntrospectionRelation,\r\n IntrospectionSchema,\r\n IntrospectionTable,\r\n ModelRelationKind,\r\n} from './types.ts'\r\n\r\nexport type ColumnQueryRow = {\r\n schema_name: string\r\n table_name: string\r\n column_name: string\r\n data_type: string\r\n udt_name: string\r\n type_kind_code: string\r\n type_oid: number\r\n is_nullable: boolean\r\n has_default: boolean\r\n is_generated: boolean\r\n array_dimensions: number\r\n}\r\n\r\nexport type PrimaryKeyQueryRow = {\r\n schema_name: string\r\n table_name: string\r\n columns: string[]\r\n}\r\n\r\nexport type ForeignKeyQueryRow = {\r\n source_schema: string\r\n source_table: string\r\n constraint_name: string\r\n source_columns: string[]\r\n target_schema: string\r\n target_table: string\r\n target_columns: string[]\r\n source_is_unique: boolean\r\n}\r\n\r\nexport type EnumQueryRow = {\r\n type_oid: number\r\n enum_label: string\r\n}\r\n\r\ntype BridgeCandidate = {\r\n schema: string\r\n table: string\r\n foreignKeys: ForeignKeyQueryRow[]\r\n}\r\n\r\nexport const POSTGRES_CATALOG_SQL = {\r\n columns: `\r\n SELECT\r\n n.nspname AS schema_name,\r\n c.relname AS table_name,\r\n a.attname AS column_name,\r\n format_type(a.atttypid, a.atttypmod) AS data_type,\r\n t.typname AS udt_name,\r\n t.typtype AS type_kind_code,\r\n t.oid AS type_oid,\r\n NOT a.attnotnull AS is_nullable,\r\n (ad.adbin IS NOT NULL) AS has_default,\r\n (a.attgenerated <> '') AS is_generated,\r\n a.attndims AS array_dimensions\r\n FROM pg_attribute a\r\n JOIN pg_class c ON c.oid = a.attrelid\r\n JOIN pg_namespace n ON n.oid = c.relnamespace\r\n JOIN pg_type t ON t.oid = a.atttypid\r\n LEFT JOIN pg_attrdef ad ON ad.adrelid = a.attrelid AND ad.adnum = a.attnum\r\n WHERE c.relkind IN ('r', 'p')\r\n AND a.attnum > 0\r\n AND NOT a.attisdropped\r\n AND n.nspname = ANY($1::text[])\r\n ORDER BY n.nspname, c.relname, a.attnum;\r\n `,\r\n enums: `\r\n SELECT\r\n t.oid AS type_oid,\r\n e.enumlabel AS enum_label\r\n FROM pg_type t\r\n JOIN pg_enum e ON e.enumtypid = t.oid\r\n ORDER BY t.oid, e.enumsortorder;\r\n `,\r\n primaryKeys: `\r\n SELECT\r\n n.nspname AS schema_name,\r\n c.relname AS table_name,\r\n ARRAY_AGG(a.attname ORDER BY ck.ordinality) AS columns\r\n FROM pg_constraint con\r\n JOIN pg_class c ON c.oid = con.conrelid\r\n JOIN pg_namespace n ON n.oid = c.relnamespace\r\n JOIN unnest(con.conkey) WITH ORDINALITY AS ck(attnum, ordinality) ON TRUE\r\n JOIN pg_attribute a ON a.attrelid = c.oid AND a.attnum = ck.attnum\r\n WHERE con.contype = 'p'\r\n AND n.nspname = ANY($1::text[])\r\n GROUP BY n.nspname, c.relname\r\n ORDER BY n.nspname, c.relname;\r\n `,\r\n foreignKeys: `\r\n SELECT\r\n sn.nspname AS source_schema,\r\n sc.relname AS source_table,\r\n con.conname AS constraint_name,\r\n ARRAY_AGG(sa.attname ORDER BY cols.ordinality) AS source_columns,\r\n tn.nspname AS target_schema,\r\n tc.relname AS target_table,\r\n ARRAY_AGG(ta.attname ORDER BY cols.ordinality) AS target_columns,\r\n EXISTS (\r\n SELECT 1\r\n FROM pg_constraint uq\r\n WHERE uq.conrelid = con.conrelid\r\n AND uq.contype IN ('p', 'u')\r\n AND uq.conkey = con.conkey\r\n ) AS source_is_unique\r\n FROM pg_constraint con\r\n JOIN pg_class sc ON sc.oid = con.conrelid\r\n JOIN pg_namespace sn ON sn.oid = sc.relnamespace\r\n JOIN pg_class tc ON tc.oid = con.confrelid\r\n JOIN pg_namespace tn ON tn.oid = tc.relnamespace\r\n JOIN unnest(con.conkey, con.confkey) WITH ORDINALITY AS cols(source_attnum, target_attnum, ordinality) ON TRUE\r\n JOIN pg_attribute sa ON sa.attrelid = con.conrelid AND sa.attnum = cols.source_attnum\r\n JOIN pg_attribute ta ON ta.attrelid = con.confrelid AND ta.attnum = cols.target_attnum\r\n WHERE con.contype = 'f'\r\n AND sn.nspname = ANY($1::text[])\r\n AND tn.nspname = ANY($1::text[])\r\n GROUP BY\r\n sn.nspname,\r\n sc.relname,\r\n con.conname,\r\n tn.nspname,\r\n tc.relname,\r\n con.conkey,\r\n con.conrelid\r\n ORDER BY sn.nspname, sc.relname, con.conname;\r\n `,\r\n} as const\r\n\r\nfunction tableKey(schema: string, table: string): string {\r\n return `${schema}.${table}`\r\n}\r\n\r\nfunction relationKey(...parts: string[]): string {\r\n const base = parts\r\n .join('_')\r\n .replace(/[^A-Za-z0-9_]+/g, '_')\r\n .replace(/^_+|_+$/g, '')\r\n return base.length > 0 ? base : 'relation'\r\n}\r\n\r\nfunction toTypeKind(code: string): IntrospectionColumn['typeKind'] {\r\n switch (code) {\r\n case 'e':\r\n return 'enum'\r\n case 'd':\r\n return 'domain'\r\n case 'r':\r\n return 'range'\r\n case 'm':\r\n return 'multirange'\r\n case 'c':\r\n return 'composite'\r\n default:\r\n return 'scalar'\r\n }\r\n}\r\n\r\nfunction escapeSqlLiteral(value: string): string {\r\n return value.replace(/'/g, \"''\")\r\n}\r\n\r\nfunction parsePostgresArrayLiteral(text: string): string[] {\r\n const body = text.slice(1, -1).trim()\r\n if (!body) return []\r\n\r\n const values: string[] = []\r\n let current = ''\r\n let inQuotes = false\r\n let escaped = false\r\n\r\n for (const char of body) {\r\n if (escaped) {\r\n current += char\r\n escaped = false\r\n continue\r\n }\r\n if (char === '\\\\') {\r\n escaped = true\r\n continue\r\n }\r\n if (char === '\"') {\r\n inQuotes = !inQuotes\r\n continue\r\n }\r\n if (char === ',' && !inQuotes) {\r\n values.push(current)\r\n current = ''\r\n continue\r\n }\r\n current += char\r\n }\r\n\r\n values.push(current)\r\n return values.map(value => value.trim()).filter(value => value.length > 0)\r\n}\r\n\r\nfunction coerceStringArray(value: unknown): string[] {\r\n if (Array.isArray(value)) {\r\n return value\r\n .map(item => (typeof item === 'string' ? item : String(item)))\r\n .map(item => item.trim())\r\n .filter(item => item.length > 0)\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const trimmed = value.trim()\r\n if (!trimmed) return []\r\n\r\n if (trimmed.startsWith('[') && trimmed.endsWith(']')) {\r\n try {\r\n const parsed = JSON.parse(trimmed) as unknown\r\n return coerceStringArray(parsed)\r\n } catch {\r\n // Fall through to more permissive parsing paths.\r\n }\r\n }\r\n\r\n if (trimmed.startsWith('{') && trimmed.endsWith('}')) {\r\n return parsePostgresArrayLiteral(trimmed)\r\n }\r\n\r\n return trimmed\r\n .split(',')\r\n .map(item => item.trim())\r\n .filter(item => item.length > 0)\r\n }\r\n\r\n return []\r\n}\r\n\r\nexport function normalizePostgresCatalogSchemas(schemas?: readonly string[]): string[] {\r\n const normalized: string[] = []\r\n const seen = new Set<string>()\r\n\r\n for (const value of schemas ?? []) {\r\n const schema = value.trim()\r\n if (!schema || seen.has(schema)) {\r\n continue\r\n }\r\n seen.add(schema)\r\n normalized.push(schema)\r\n }\r\n\r\n return normalized.length > 0 ? normalized : ['public']\r\n}\r\n\r\nexport function buildSchemaArrayLiteral(schemas: readonly string[]): string {\r\n const normalized = normalizePostgresCatalogSchemas(schemas)\r\n const literals = normalized.map(schema => `'${escapeSqlLiteral(schema)}'`).join(', ')\r\n return `ARRAY[${literals}]`\r\n}\r\n\r\nfunction inlineSchemaLiteral(sql: string, schemas: readonly string[]): string {\r\n const schemaArray = `${buildSchemaArrayLiteral(schemas)}::text[]`\r\n return sql.replace(/\\$1::text\\[\\]/g, schemaArray)\r\n}\r\n\r\nexport function buildGatewayCatalogQueries(schemas: readonly string[]): {\r\n columns: string\r\n enums: string\r\n primaryKeys: string\r\n foreignKeys: string\r\n} {\r\n return {\r\n columns: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.columns, schemas),\r\n enums: POSTGRES_CATALOG_SQL.enums,\r\n primaryKeys: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.primaryKeys, schemas),\r\n foreignKeys: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.foreignKeys, schemas),\r\n }\r\n}\r\n\r\nexport class PostgresCatalogSnapshotAssembler {\r\n private readonly schemas: Record<string, IntrospectionSchema> = {}\r\n\r\n addColumnRows(columnRows: ColumnQueryRow[], enumMap: Map<number, string[]>) {\r\n for (const row of columnRows) {\r\n const table = this.ensureTable(row.schema_name, row.table_name)\r\n table.columns[row.column_name] = {\r\n name: row.column_name,\r\n dataType: row.data_type,\r\n udtName: row.udt_name,\r\n typeKind: toTypeKind(row.type_kind_code),\r\n isNullable: row.is_nullable,\r\n isPrimaryKey: false,\r\n hasDefault: row.has_default,\r\n isGenerated: row.is_generated,\r\n arrayDimensions: row.array_dimensions ?? 0,\r\n enumValues: enumMap.get(row.type_oid),\r\n }\r\n }\r\n }\r\n\r\n addPrimaryKeyRows(primaryKeyRows: PrimaryKeyQueryRow[]) {\r\n for (const row of primaryKeyRows) {\r\n const table = this.ensureTable(row.schema_name, row.table_name)\r\n const primaryKeyColumns = coerceStringArray(row.columns)\r\n row.columns = primaryKeyColumns\r\n table.primaryKey = primaryKeyColumns\r\n for (const columnName of primaryKeyColumns) {\r\n const column = table.columns[columnName]\r\n if (column) {\r\n column.isPrimaryKey = true\r\n }\r\n }\r\n }\r\n }\r\n\r\n addForeignKeyRows(foreignKeyRows: ForeignKeyQueryRow[]) {\r\n for (const row of foreignKeyRows) {\r\n const sourceTable = this.ensureTable(row.source_schema, row.source_table)\r\n const targetTable = this.ensureTable(row.target_schema, row.target_table)\r\n const sourceColumns = coerceStringArray(row.source_columns)\r\n const targetColumns = coerceStringArray(row.target_columns)\r\n row.source_columns = sourceColumns\r\n row.target_columns = targetColumns\r\n\r\n const sourceRelationKind: ModelRelationKind = row.source_is_unique ? 'one-to-one' : 'many-to-one'\r\n this.upsertRelation(sourceTable, relationKey(row.constraint_name, row.target_table), {\r\n name: row.constraint_name,\r\n kind: sourceRelationKind,\r\n sourceColumns,\r\n targetSchema: row.target_schema,\r\n targetModel: row.target_table,\r\n targetColumns,\r\n })\r\n\r\n const targetRelationKind: ModelRelationKind = row.source_is_unique ? 'one-to-one' : 'one-to-many'\r\n this.upsertRelation(targetTable, relationKey(row.source_table), {\r\n name: relationKey(row.source_table, row.constraint_name),\r\n kind: targetRelationKind,\r\n sourceColumns: targetColumns,\r\n targetSchema: row.source_schema,\r\n targetModel: row.source_table,\r\n targetColumns: sourceColumns,\r\n })\r\n }\r\n }\r\n\r\n addManyToManyRows(foreignKeyRows: ForeignKeyQueryRow[]) {\r\n const bySourceTable = new Map<string, BridgeCandidate>()\r\n for (const fk of foreignKeyRows) {\r\n const key = tableKey(fk.source_schema, fk.source_table)\r\n const current = bySourceTable.get(key) ?? {\r\n schema: fk.source_schema,\r\n table: fk.source_table,\r\n foreignKeys: [],\r\n }\r\n current.foreignKeys.push(fk)\r\n bySourceTable.set(key, current)\r\n }\r\n\r\n for (const candidate of bySourceTable.values()) {\r\n const bridgeTable = this.schemas[candidate.schema]?.tables[candidate.table]\r\n if (!bridgeTable) continue\r\n\r\n const primaryKey = bridgeTable.primaryKey\r\n if (candidate.foreignKeys.length !== 2 || primaryKey.length === 0) continue\r\n\r\n const combinedForeignColumns = Array.from(\r\n new Set(candidate.foreignKeys.flatMap(fk => fk.source_columns)),\r\n )\r\n if (\r\n combinedForeignColumns.length !== primaryKey.length ||\r\n !primaryKey.every(column => combinedForeignColumns.includes(column))\r\n ) {\r\n continue\r\n }\r\n\r\n const [first, second] = candidate.foreignKeys\r\n const firstTarget = this.schemas[first.target_schema]?.tables[first.target_table]\r\n const secondTarget = this.schemas[second.target_schema]?.tables[second.target_table]\r\n if (!firstTarget || !secondTarget) {\r\n continue\r\n }\r\n\r\n this.upsertRelation(firstTarget, relationKey(second.target_table), {\r\n name: relationKey(candidate.table, first.constraint_name, second.constraint_name),\r\n kind: 'many-to-many',\r\n sourceColumns: first.target_columns,\r\n targetSchema: second.target_schema,\r\n targetModel: second.target_table,\r\n targetColumns: second.target_columns,\r\n through: {\r\n schema: candidate.schema,\r\n model: candidate.table,\r\n sourceColumns: first.source_columns,\r\n targetColumns: second.source_columns,\r\n },\r\n })\r\n\r\n this.upsertRelation(secondTarget, relationKey(first.target_table), {\r\n name: relationKey(candidate.table, second.constraint_name, first.constraint_name),\r\n kind: 'many-to-many',\r\n sourceColumns: second.target_columns,\r\n targetSchema: first.target_schema,\r\n targetModel: first.target_table,\r\n targetColumns: first.target_columns,\r\n through: {\r\n schema: candidate.schema,\r\n model: candidate.table,\r\n sourceColumns: second.source_columns,\r\n targetColumns: first.source_columns,\r\n },\r\n })\r\n }\r\n }\r\n\r\n toSchemas(): Record<string, IntrospectionSchema> {\r\n return this.schemas\r\n }\r\n\r\n private ensureTable(schemaName: string, tableName: string): IntrospectionTable {\r\n if (!this.schemas[schemaName]) {\r\n this.schemas[schemaName] = {\r\n name: schemaName,\r\n tables: {},\r\n }\r\n }\r\n\r\n const schema = this.schemas[schemaName]\r\n if (!schema.tables[tableName]) {\r\n schema.tables[tableName] = {\r\n schema: schemaName,\r\n name: tableName,\r\n columns: {},\r\n primaryKey: [],\r\n relations: {},\r\n }\r\n }\r\n\r\n return schema.tables[tableName]\r\n }\r\n\r\n private upsertRelation(\r\n table: IntrospectionTable,\r\n baseKey: string,\r\n relation: IntrospectionRelation,\r\n ) {\r\n let key = baseKey\r\n let suffix = 2\r\n while (table.relations[key]) {\r\n key = `${baseKey}_${suffix}`\r\n suffix += 1\r\n }\r\n table.relations[key] = relation\r\n }\r\n}\r\n","import type { Pool } from 'pg'\nimport type {\n IntrospectionInspectOptions,\n IntrospectionSnapshot,\n SchemaIntrospectionProvider,\n} from './types.ts'\nimport {\r\n type ColumnQueryRow,\r\n type EnumQueryRow,\r\n type ForeignKeyQueryRow,\r\n type PrimaryKeyQueryRow,\r\n POSTGRES_CATALOG_SQL,\r\n normalizePostgresCatalogSchemas,\r\n PostgresCatalogSnapshotAssembler,\r\n} from './postgres-introspection-core.ts'\r\n\r\n/**\r\n * Constructor options for the PostgreSQL introspection provider.\r\n */\r\nexport interface PostgresIntrospectionProviderOptions {\n connectionString: string\n database?: string\n schemas?: readonly string[]\n}\n\ntype PgPoolConstructor = new (config: { connectionString: string }) => Pool\n\nlet pgPoolConstructorPromise: Promise<PgPoolConstructor> | undefined\n\nasync function loadPgPoolConstructor(): Promise<PgPoolConstructor> {\n if (!pgPoolConstructorPromise) {\n pgPoolConstructorPromise = import('pg').then(module => {\n const poolConstructor =\n (module as { Pool?: PgPoolConstructor }).Pool ??\n (module as { default?: { Pool?: PgPoolConstructor } }).default?.Pool\n\n if (!poolConstructor) {\n throw new Error(\n '@xylex-group/athena: Unable to load the PostgreSQL driver. Ensure \"pg\" is installed and this API runs in a Node.js server runtime.',\n )\n }\n\n return poolConstructor\n })\n }\n\n return pgPoolConstructorPromise\n}\n\nclass PgCatalogClient {\n constructor(private readonly pool: Pool) {}\n\r\n async queryColumns(schemas: string[]): Promise<ColumnQueryRow[]> {\r\n const result = await this.pool.query<ColumnQueryRow>(POSTGRES_CATALOG_SQL.columns, [schemas])\r\n return result.rows\r\n }\r\n\r\n async queryEnums(): Promise<Map<number, string[]>> {\r\n const result = await this.pool.query<EnumQueryRow>(POSTGRES_CATALOG_SQL.enums)\r\n const enumMap = new Map<number, string[]>()\r\n for (const row of result.rows) {\r\n const existing = enumMap.get(row.type_oid) ?? []\r\n existing.push(row.enum_label)\r\n enumMap.set(row.type_oid, existing)\r\n }\r\n return enumMap\r\n }\r\n\r\n async queryPrimaryKeys(schemas: string[]): Promise<PrimaryKeyQueryRow[]> {\r\n const result = await this.pool.query<PrimaryKeyQueryRow>(POSTGRES_CATALOG_SQL.primaryKeys, [schemas])\r\n return result.rows\r\n }\r\n\r\n async queryForeignKeys(schemas: string[]): Promise<ForeignKeyQueryRow[]> {\r\n const result = await this.pool.query<ForeignKeyQueryRow>(POSTGRES_CATALOG_SQL.foreignKeys, [schemas])\r\n return result.rows\r\n }\r\n}\r\n\r\nclass PostgresIntrospectionProvider implements SchemaIntrospectionProvider {\r\n readonly backend = 'postgresql' as const\r\n\r\n private readonly connectionString: string\r\n private readonly database: string\r\n private readonly schemas: string[]\r\n\r\n constructor(options: PostgresIntrospectionProviderOptions) {\r\n this.connectionString = options.connectionString\r\n this.database = options.database ?? 'postgres'\r\n this.schemas = normalizePostgresCatalogSchemas(options.schemas)\r\n }\r\n\r\n async inspect(options?: IntrospectionInspectOptions): Promise<IntrospectionSnapshot> {\n const schemas = options?.schemas && options.schemas.length > 0\n ? normalizePostgresCatalogSchemas(options.schemas)\n : this.schemas\n const PoolConstructor = await loadPgPoolConstructor()\n const pool = new PoolConstructor({\n connectionString: this.connectionString,\n })\n const catalogClient = new PgCatalogClient(pool)\n\r\n try {\r\n const [columnRows, enumMap, primaryKeyRows, foreignKeyRows] = await Promise.all([\r\n catalogClient.queryColumns(schemas),\r\n catalogClient.queryEnums(),\r\n catalogClient.queryPrimaryKeys(schemas),\r\n catalogClient.queryForeignKeys(schemas),\r\n ])\r\n\r\n const assembler = new PostgresCatalogSnapshotAssembler()\r\n assembler.addColumnRows(columnRows, enumMap)\r\n assembler.addPrimaryKeyRows(primaryKeyRows)\r\n assembler.addForeignKeyRows(foreignKeyRows)\r\n assembler.addManyToManyRows(foreignKeyRows)\r\n\r\n return {\r\n backend: 'postgresql',\r\n database: this.database,\r\n generatedAt: new Date().toISOString(),\r\n schemas: assembler.toSchemas(),\r\n }\r\n } finally {\r\n await pool.end()\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Creates a PostgreSQL-backed schema introspection provider.\r\n */\r\nexport function createPostgresIntrospectionProvider(\r\n options: PostgresIntrospectionProviderOptions,\r\n): SchemaIntrospectionProvider {\r\n return new PostgresIntrospectionProvider(options)\r\n}\r\n","import type { AnyModelDef, InsertOf, RowOf, UpdateOf } from './types.ts'\r\n\r\ntype ModelValueRecord = Record<string, unknown>\r\n\r\nexport type ModelFormNullishMode = 'empty-string' | 'undefined' | 'null'\r\n\r\ntype NullishValueByMode = {\r\n 'empty-string': ''\r\n undefined: undefined\r\n null: null\r\n}\r\n\r\ntype MapNullableToFormValue<TField, TMode extends ModelFormNullishMode> =\r\n null extends TField\r\n ? Exclude<TField, null> | NullishValueByMode[TMode]\r\n : TField\r\n\r\n/**\r\n * Form value shape derived from a model insert payload.\r\n * Nullable fields are remapped to the selected nullish representation.\r\n */\r\nexport type ModelFormValues<\r\n TModel extends AnyModelDef,\r\n TMode extends ModelFormNullishMode = 'empty-string',\r\n> = {\r\n [K in keyof InsertOf<TModel>]: MapNullableToFormValue<InsertOf<TModel>[K], TMode>\r\n}\r\n\r\n/**\r\n * Default value shape for form initialization.\r\n */\r\nexport type ModelFormDefaults<\r\n TModel extends AnyModelDef,\r\n TMode extends ModelFormNullishMode = 'empty-string',\r\n> = Partial<ModelFormValues<TModel, TMode>>\r\n\r\nexport interface ToModelFormDefaultsOptions<TMode extends ModelFormNullishMode = 'empty-string'> {\r\n /**\r\n * Controls how nullable model values are represented in form defaults.\r\n * - `empty-string` (default): `null -> \"\"`\r\n * - `undefined`: `null -> undefined`\r\n * - `null`: keeps `null`\r\n */\r\n nullishMode?: TMode\r\n}\r\n\r\nexport interface ToModelPayloadOptions {\r\n /**\r\n * Converts `\"\"` into `null` for nullable model fields.\r\n * Defaults to `true`.\r\n */\r\n emptyStringAsNull?: boolean\r\n /**\r\n * Omits `undefined` keys from the outgoing payload.\r\n * Defaults to `true`.\r\n */\r\n stripUndefined?: boolean\r\n}\r\n\r\nfunction resolveNullishValue(mode: ModelFormNullishMode): '' | undefined | null {\r\n if (mode === 'undefined') return undefined\r\n if (mode === 'null') return null\r\n return ''\r\n}\r\n\r\nfunction isRecord(value: unknown): value is ModelValueRecord {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction isNullableColumn(model: AnyModelDef, key: string): boolean {\r\n const nullable = model.meta.nullable as Partial<Record<string, boolean>> | undefined\r\n return nullable?.[key] === true\r\n}\r\n\r\n/**\r\n * Normalizes model data into form-safe defaults using model nullability metadata.\r\n */\r\nexport function toModelFormDefaults<\r\n TModel extends AnyModelDef,\r\n TMode extends ModelFormNullishMode = 'empty-string',\r\n>(\r\n model: TModel,\r\n values?: Partial<RowOf<TModel>> | Partial<InsertOf<TModel>> | null,\r\n options?: ToModelFormDefaultsOptions<TMode>,\r\n): ModelFormDefaults<TModel, TMode> {\r\n const source = values as ModelValueRecord | null | undefined\r\n if (!isRecord(source)) {\r\n return {} as ModelFormDefaults<TModel, TMode>\r\n }\r\n\r\n const mode = options?.nullishMode ?? ('empty-string' as TMode)\r\n const nullishValue = resolveNullishValue(mode)\r\n const result: ModelValueRecord = {}\r\n\r\n for (const [key, value] of Object.entries(source)) {\r\n if (value === null && isNullableColumn(model, key)) {\r\n result[key] = nullishValue\r\n continue\r\n }\r\n result[key] = value\r\n }\r\n\r\n return result as ModelFormDefaults<TModel, TMode>\r\n}\r\n\r\n/**\r\n * Normalizes form values back into model-compatible insert/update payloads.\r\n */\r\nexport function toModelPayload<TModel extends AnyModelDef>(\r\n model: TModel,\r\n formValues: Partial<ModelFormValues<TModel, 'empty-string' | 'undefined' | 'null'>>,\r\n options?: ToModelPayloadOptions,\r\n): Partial<InsertOf<TModel>> {\r\n const emptyStringAsNull = options?.emptyStringAsNull ?? true\r\n const stripUndefined = options?.stripUndefined ?? true\r\n const result: ModelValueRecord = {}\r\n\r\n for (const [key, rawValue] of Object.entries(formValues as ModelValueRecord)) {\r\n if (rawValue === undefined && stripUndefined) {\r\n continue\r\n }\r\n\r\n if (emptyStringAsNull && rawValue === '' && isNullableColumn(model, key)) {\r\n result[key] = null\r\n continue\r\n }\r\n\r\n result[key] = rawValue\r\n }\r\n\r\n return result as Partial<InsertOf<TModel>>\r\n}\r\n\r\n/**\r\n * Runtime form adapter bound to a model contract.\r\n */\r\nexport interface ModelFormAdapter<TModel extends AnyModelDef> {\r\n model: TModel\r\n toDefaults<TMode extends ModelFormNullishMode = 'empty-string'>(\r\n values?: Partial<RowOf<TModel>> | Partial<InsertOf<TModel>> | null,\r\n options?: ToModelFormDefaultsOptions<TMode>,\r\n ): ModelFormDefaults<TModel, TMode>\r\n toInsert(\r\n values: Partial<ModelFormValues<TModel, 'empty-string' | 'undefined' | 'null'>>,\r\n options?: ToModelPayloadOptions,\r\n ): Partial<InsertOf<TModel>>\r\n toUpdate(\r\n values: Partial<ModelFormValues<TModel, 'empty-string' | 'undefined' | 'null'>>,\r\n options?: ToModelPayloadOptions,\r\n ): Partial<UpdateOf<TModel>>\r\n}\r\n\r\n/**\r\n * Creates a small model-aware adapter for form defaults and payload normalization.\r\n */\r\nexport function createModelFormAdapter<TModel extends AnyModelDef>(model: TModel): ModelFormAdapter<TModel> {\r\n return {\r\n model,\r\n toDefaults(values, options) {\r\n return toModelFormDefaults(model, values, options)\r\n },\r\n toInsert(values, options) {\r\n return toModelPayload(model, values, options) as Partial<InsertOf<TModel>>\r\n },\r\n toUpdate(values, options) {\r\n return toModelPayload(model, values, options) as Partial<UpdateOf<TModel>>\r\n },\r\n }\r\n}\r\n","import type { GeneratorProviderConfig, GeneratorSchemaSelection } from './types.ts'\r\n\r\nexport const DEFAULT_POSTGRES_SCHEMAS = ['public'] as const\r\n\r\nfunction collectSchemaNames(input: GeneratorSchemaSelection | undefined): string[] {\r\n if (!input) {\r\n return []\r\n }\r\n\r\n const values = typeof input === 'string' ? [input] : input\r\n return values.flatMap(value => String(value).split(','))\r\n}\r\n\r\n/**\r\n * Normalizes schema selection from config or env-backed strings into a stable,\r\n * deduplicated list. Empty selections fall back to PostgreSQL's public schema.\r\n */\r\nexport function normalizeSchemaSelection(\r\n input: GeneratorSchemaSelection | undefined,\r\n): string[] {\r\n const schemas: string[] = []\r\n const seen = new Set<string>()\r\n\r\n for (const value of collectSchemaNames(input)) {\r\n const schema = value.trim()\r\n if (!schema || seen.has(schema)) {\r\n continue\r\n }\r\n seen.add(schema)\r\n schemas.push(schema)\r\n }\r\n\r\n return schemas.length > 0 ? schemas : [...DEFAULT_POSTGRES_SCHEMAS]\r\n}\r\n\r\n/**\r\n * Resolves the effective schema list for provider-backed generator runs.\r\n */\r\nexport function resolveProviderSchemas(providerConfig: GeneratorProviderConfig): string[] {\r\n if (providerConfig.kind === 'postgres') {\r\n return normalizeSchemaSelection(providerConfig.schemas)\r\n }\r\n\r\n return [...DEFAULT_POSTGRES_SCHEMAS]\r\n}\r\n","import { existsSync, readFileSync } from 'fs'\nimport { resolve } from 'path'\nimport { pathToFileURL } from 'url'\nimport type {\n AthenaGeneratorConfig,\n GeneratorExperimentalFlags,\n GeneratorFeatureFlags,\n GeneratorNamingConfig,\r\n GeneratorOutputConfig,\r\n GeneratorOutputTargets,\r\n GeneratorProviderConfig,\r\n LoadGeneratorConfigOptions,\r\n LoadedGeneratorConfig,\n NormalizedAthenaGeneratorConfig,\n} from './types.ts'\nimport { parseBooleanFlag } from '../auxiliaries.ts'\nimport { normalizeSchemaSelection } from './schema-selection.ts'\n\nconst POSTGRES_PROTOCOLS = new Set(['postgres:', 'postgresql:'])\n\nconst DEFAULT_CONFIG_CANDIDATES = [\n 'athena.config.ts',\n 'athena.config.js',\r\n 'athena-js.config.ts',\r\n 'athena-js.config.js',\r\n '.athena.config.ts',\r\n '.athena.config.js',\r\n]\r\n\r\nconst DEFAULT_TARGETS: GeneratorOutputTargets = {\r\n model: 'athena/models/{schema_kebab}/{model_kebab}.ts',\r\n schema: 'athena/schemas/{schema_kebab}.ts',\r\n database: 'athena/relations.ts',\r\n registry: 'athena/config.ts',\r\n}\r\n\r\nconst DEFAULT_NAMING: GeneratorNamingConfig = {\r\n modelType: 'pascal',\r\n modelConst: 'camel',\r\n schemaConst: 'camel',\r\n databaseConst: 'camel',\r\n registryConst: 'camel',\r\n}\r\n\r\nconst DEFAULT_FEATURES: GeneratorFeatureFlags = {\r\n emitRelations: true,\r\n emitRegistry: true,\r\n}\r\n\r\nconst DEFAULT_EXPERIMENTAL_FLAGS: GeneratorExperimentalFlags = {\n postgresGatewayIntrospection: false,\n scyllaProviderContracts: true,\n}\n\nconst PROJECT_ENV_FILENAMES = ['.env', '.env.local'] as const\n\nconst DIRECT_CONNECTION_STRING_ENV_KEYS = [\n 'ATHENA_GENERATOR_PG_URL',\n 'DATABASE_URL',\n 'PG_URL',\n 'POSTGRES_URL',\n 'POSTGRESQL_URL',\n] as const\n\nconst POSTGRES_DATABASE_ENV_KEYS = ['ATHENA_GENERATOR_DB', 'ATHENA_DATABASE', 'PGDATABASE'] as const\n\nconst POSTGRES_PASSWORD_ENV_KEYS = ['ATHENA_GENERATOR_PG_PASSWORD', 'PGPASSWORD'] as const\n\nconst GATEWAY_URL_ENV_KEYS = ['ATHENA_URL', 'ATHENA_GATEWAY_URL', 'ATHENA_GENERATOR_URL'] as const\n\nconst GATEWAY_API_KEY_ENV_KEYS = [\n 'ATHENA_API_KEY',\n 'ATHENA_GATEWAY_API_KEY',\n 'ATHENA_GENERATOR_API_KEY',\n] as const\n\nfunction normalizeRawEnvValue(rawValue: string): string {\n if (rawValue.startsWith('\"') && rawValue.endsWith('\"') && rawValue.length >= 2) {\n const inner = rawValue.slice(1, -1)\n return inner\n .replace(/\\\\n/g, '\\n')\n .replace(/\\\\r/g, '\\r')\n .replace(/\\\\t/g, '\\t')\n .replace(/\\\\\"/g, '\"')\n .replace(/\\\\\\\\/g, '\\\\')\n }\n\n if (rawValue.startsWith(\"'\") && rawValue.endsWith(\"'\") && rawValue.length >= 2) {\n return rawValue.slice(1, -1)\n }\n\n const commentIndex = rawValue.search(/\\s+#/)\n const withoutComment = commentIndex >= 0 ? rawValue.slice(0, commentIndex) : rawValue\n return withoutComment.trim()\n}\n\nfunction parseEnvLine(line: string): [key: string, value: string] | undefined {\n const trimmed = line.trim()\n if (!trimmed || trimmed.startsWith('#')) {\n return undefined\n }\n\n const match = trimmed.match(/^(?:export\\s+)?([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(.*)$/)\n if (!match) {\n return undefined\n }\n\n const [, key, rawValue] = match\n return [key, normalizeRawEnvValue(rawValue.trim())]\n}\n\nfunction readProjectEnvEntries(cwd: string): Map<string, string> {\n const nodeEnv = process.env.NODE_ENV?.trim()\n const filenames = [\n ...PROJECT_ENV_FILENAMES,\n ...(nodeEnv ? [`.env.${nodeEnv}`, `.env.${nodeEnv}.local`] : []),\n ]\n\n const entries = new Map<string, string>()\n\n for (const filename of filenames) {\n const absolutePath = resolve(cwd, filename)\n if (!existsSync(absolutePath)) {\n continue\n }\n\n const content = readFileSync(absolutePath, 'utf8')\n const lines = content.split(/\\r?\\n/g)\n for (const line of lines) {\n const parsed = parseEnvLine(line)\n if (!parsed) {\n continue\n }\n const [key, value] = parsed\n entries.set(key, value)\n }\n }\n\n return entries\n}\n\nfunction applyProjectEnv(cwd: string): () => void {\n const envEntries = readProjectEnvEntries(cwd)\n if (envEntries.size === 0) {\n return () => {}\n }\n\n const initialKeys = new Set<string>(\n Object.keys(process.env).filter(key => process.env[key] !== undefined),\n )\n const staged = new Map<string, string>()\n\n for (const [key, value] of envEntries.entries()) {\n if (initialKeys.has(key)) {\n continue\n }\n staged.set(key, value)\n }\n\n for (const [key, value] of staged.entries()) {\n process.env[key] = value\n }\n\n return () => {\n for (const key of staged.keys()) {\n delete process.env[key]\n }\n }\n}\n\nfunction readEnvStringValue(key: string): string | undefined {\n const value = process.env[key]\n if (typeof value !== 'string') {\n return undefined\n }\n\n const trimmed = value.trim()\n return trimmed.length > 0 ? trimmed : undefined\n}\n\nfunction resolveFallbackValue(\n fallbackKeys: readonly string[],\n): string | undefined {\n for (const key of fallbackKeys) {\n const value = readEnvStringValue(key)\n if (value) {\n return value\n }\n }\n return undefined\n}\n\nfunction normalizeOptionalString(\n value: unknown,\n fallbackKeys: readonly string[],\n): string | undefined {\n if (typeof value === 'string') {\n const trimmed = value.trim()\n if (trimmed.length > 0) {\n return trimmed\n }\n }\n\n return resolveFallbackValue(fallbackKeys)\n}\n\nfunction normalizeRequiredString(\n value: unknown,\n fieldLabel: string,\n fallbackKeys: readonly string[],\n): string {\n const resolved = normalizeOptionalString(value, fallbackKeys)\n if (resolved) {\n return resolved\n }\n\n throw new Error(\n `Generator config is missing ${fieldLabel}. Set ${fieldLabel} directly or provide one of: ${fallbackKeys.join(', ')}.`,\n )\n}\n\nfunction applyPostgresPasswordFallback(connectionString: string): string {\n let parsedUrl: URL\n try {\n parsedUrl = new URL(connectionString)\n } catch {\n return connectionString\n }\n\n if (!POSTGRES_PROTOCOLS.has(parsedUrl.protocol)) {\n return connectionString\n }\n\n if (!parsedUrl.username || parsedUrl.password) {\n return connectionString\n }\n\n const fallbackPassword = resolveFallbackValue(POSTGRES_PASSWORD_ENV_KEYS)\n if (!fallbackPassword) {\n return connectionString\n }\n\n parsedUrl.password = fallbackPassword\n return parsedUrl.toString()\n}\n\nfunction normalizeBooleanFlag(rawValue: unknown, fallback: boolean): boolean {\n if (typeof rawValue === 'boolean') {\n return rawValue\n }\n if (typeof rawValue === 'string') {\n return parseBooleanFlag(rawValue, fallback)\n }\n return fallback\n}\n\nfunction normalizeFeatureFlags(\n input: Partial<GeneratorFeatureFlags> | undefined,\n): GeneratorFeatureFlags {\n return {\n emitRelations: normalizeBooleanFlag(\n input?.emitRelations,\n DEFAULT_FEATURES.emitRelations,\n ),\n emitRegistry: normalizeBooleanFlag(\n input?.emitRegistry,\n DEFAULT_FEATURES.emitRegistry,\n ),\n }\n}\n\nfunction normalizeExperimentalFlags(\n input: Partial<GeneratorExperimentalFlags> | undefined,\n): GeneratorExperimentalFlags {\n return {\n postgresGatewayIntrospection: normalizeBooleanFlag(\n input?.postgresGatewayIntrospection,\n DEFAULT_EXPERIMENTAL_FLAGS.postgresGatewayIntrospection,\n ),\n scyllaProviderContracts: normalizeBooleanFlag(\n input?.scyllaProviderContracts,\n DEFAULT_EXPERIMENTAL_FLAGS.scyllaProviderContracts,\n ),\n }\n}\n\r\nfunction normalizeOutputConfig(output: GeneratorOutputConfig): GeneratorOutputConfig {\r\n return {\r\n targets: {\r\n ...DEFAULT_TARGETS,\r\n ...(output.targets ?? {}),\r\n },\r\n placeholderMap: {\r\n ...(output.placeholderMap ?? {}),\r\n },\r\n }\r\n}\r\n\r\nfunction normalizeProviderConfig(provider: GeneratorProviderConfig): GeneratorProviderConfig {\n if (provider.kind === 'postgres' && provider.mode === 'direct') {\n const connectionString = normalizeRequiredString(\n provider.connectionString,\n 'provider.connectionString',\n DIRECT_CONNECTION_STRING_ENV_KEYS,\n )\n const database = normalizeOptionalString(provider.database, POSTGRES_DATABASE_ENV_KEYS)\n\n return {\n ...provider,\n connectionString: applyPostgresPasswordFallback(connectionString),\n database,\n schemas: normalizeSchemaSelection(provider.schemas),\n }\n }\n\n if (provider.kind === 'postgres' && provider.mode === 'gateway') {\n const gatewayUrl = normalizeRequiredString(\n provider.gatewayUrl,\n 'provider.gatewayUrl',\n GATEWAY_URL_ENV_KEYS,\n )\n const apiKey = normalizeRequiredString(\n provider.apiKey,\n 'provider.apiKey',\n GATEWAY_API_KEY_ENV_KEYS,\n )\n const database = normalizeRequiredString(\n provider.database,\n 'provider.database',\n POSTGRES_DATABASE_ENV_KEYS,\n )\n\n return {\n ...provider,\n gatewayUrl,\n apiKey,\n database,\n schemas: normalizeSchemaSelection(provider.schemas),\n }\n }\n\r\n return provider\r\n}\r\n\r\nfunction isAthenaGeneratorConfig(value: unknown): value is AthenaGeneratorConfig {\r\n if (!value || typeof value !== 'object') {\r\n return false\r\n }\r\n const record = value as Record<string, unknown>\r\n return Boolean(record.provider && typeof record.provider === 'object') &&\r\n Boolean(record.output && typeof record.output === 'object')\r\n}\r\n\r\nexport function normalizeGeneratorConfig(input: AthenaGeneratorConfig): NormalizedAthenaGeneratorConfig {\n return {\n provider: normalizeProviderConfig(input.provider),\n output: normalizeOutputConfig(input.output),\n naming: {\n ...DEFAULT_NAMING,\n ...(input.naming ?? {}),\n },\n features: normalizeFeatureFlags(input.features),\n experimental: normalizeExperimentalFlags(input.experimental),\n }\n}\n\r\n/**\r\n * Typed identity helper for authoring generator configs.\r\n */\r\nexport function defineGeneratorConfig<TConfig extends AthenaGeneratorConfig>(\r\n config: TConfig,\r\n): TConfig {\r\n return config\r\n}\r\n\r\n/**\r\n * Finds a supported generator config filename in the provided directory.\r\n */\r\nexport function findGeneratorConfigPath(cwd: string = process.cwd()): string | undefined {\r\n for (const candidate of DEFAULT_CONFIG_CANDIDATES) {\r\n const absolutePath = resolve(cwd, candidate)\r\n if (existsSync(absolutePath)) {\r\n return absolutePath\r\n }\r\n }\r\n return undefined\r\n}\r\n\r\nfunction extractConfigExport(module: unknown): AthenaGeneratorConfig {\n const visited = new Set<unknown>()\n const queue: unknown[] = [module]\n\r\n while (queue.length > 0) {\r\n const current = queue.shift()\r\n if (!current || typeof current !== 'object' || visited.has(current)) {\r\n continue\r\n }\r\n visited.add(current)\r\n\r\n const record = current as Record<string, unknown>\r\n if (isAthenaGeneratorConfig(record)) {\r\n return record\r\n }\r\n\r\n const defaultExport = record.default\r\n if (defaultExport && typeof defaultExport === 'object') {\r\n queue.push(defaultExport)\r\n }\r\n\r\n const namedConfigExport = record.config\r\n if (namedConfigExport && typeof namedConfigExport === 'object') {\r\n queue.push(namedConfigExport)\r\n }\r\n\r\n const moduleExports = record['module.exports']\n if (moduleExports && typeof moduleExports === 'object') {\n queue.push(moduleExports)\n }\n\n for (const value of Object.values(record)) {\n if (value && typeof value === 'object') {\n queue.push(value)\n }\n }\n }\n\r\n throw new Error(\r\n 'Generator config file must export a config object as default export or `config`.',\r\n )\r\n}\r\n\r\nfunction importConfigModule(moduleSpecifier: string): Promise<unknown> {\r\n // Keep this as an indirect import so bundlers do not try to statically resolve\r\n // runtime file-system config paths when athena-js is consumed in Next.js.\r\n const runtimeImport = new Function(\r\n 'moduleSpecifier',\r\n 'return import(moduleSpecifier)',\r\n ) as (moduleSpecifier: string) => Promise<unknown>\r\n return runtimeImport(moduleSpecifier)\r\n}\r\n\r\n/**\r\n * Loads and normalizes `athena.config.*` from disk.\r\n */\r\nexport async function loadGeneratorConfig(\n options: LoadGeneratorConfigOptions = {},\n): Promise<LoadedGeneratorConfig> {\n const cwd = options.cwd ?? process.cwd()\n const restoreProjectEnv = applyProjectEnv(cwd)\n const resolvedPath = options.configPath\n ? resolve(cwd, options.configPath)\n : findGeneratorConfigPath(cwd)\n\n if (!resolvedPath) {\n throw new Error(\r\n `No generator config found in ${cwd}. Expected one of: ${DEFAULT_CONFIG_CANDIDATES.join(', ')}`,\r\n )\r\n }\r\n\r\n try {\n const moduleUrl = pathToFileURL(resolvedPath)\n const module = await importConfigModule(`${moduleUrl.href}?cacheBust=${Date.now()}`)\n const rawConfig = extractConfigExport(module)\n\n return {\n configPath: resolvedPath,\n config: normalizeGeneratorConfig(rawConfig),\n }\n } finally {\n restoreProjectEnv()\n }\n}\n","import type { NamingStyle } from './types.ts'\r\n\r\nconst IDENTIFIER_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*$/\r\nconst RESERVED_IDENTIFIERS = new Set([\r\n 'break',\r\n 'case',\r\n 'catch',\r\n 'class',\r\n 'const',\r\n 'continue',\r\n 'debugger',\r\n 'default',\r\n 'delete',\r\n 'do',\r\n 'else',\r\n 'enum',\r\n 'export',\r\n 'extends',\r\n 'false',\r\n 'finally',\r\n 'for',\r\n 'function',\r\n 'if',\r\n 'import',\r\n 'in',\r\n 'instanceof',\r\n 'new',\r\n 'null',\r\n 'return',\r\n 'super',\r\n 'switch',\r\n 'this',\r\n 'throw',\r\n 'true',\r\n 'try',\r\n 'typeof',\r\n 'var',\r\n 'void',\r\n 'while',\r\n 'with',\r\n 'as',\r\n 'implements',\r\n 'interface',\r\n 'let',\r\n 'package',\r\n 'private',\r\n 'protected',\r\n 'public',\r\n 'static',\r\n 'yield',\r\n 'any',\r\n 'boolean',\r\n 'constructor',\r\n 'declare',\r\n 'get',\r\n 'module',\r\n 'require',\r\n 'number',\r\n 'set',\r\n 'string',\r\n 'symbol',\r\n 'type',\r\n 'from',\r\n 'of',\r\n])\r\n\r\nfunction splitWords(input: string): string[] {\r\n return input\r\n .trim()\r\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\r\n .replace(/([A-Z]+)([A-Z][a-z0-9]+)/g, '$1 $2')\r\n .replace(/[^A-Za-z0-9]+/g, ' ')\r\n .split(' ')\r\n .map(word => word.trim())\r\n .filter(word => word.length > 0)\r\n}\r\n\r\nfunction capitalize(word: string): string {\r\n return word.length > 0 ? `${word[0].toUpperCase()}${word.slice(1).toLowerCase()}` : word\r\n}\r\n\r\nfunction ensureValidIdentifier(candidate: string, fallback: string): string {\r\n const normalized = candidate.length > 0 ? candidate : fallback\r\n const prefixed = /^[0-9]/.test(normalized) ? `_${normalized}` : normalized\r\n if (RESERVED_IDENTIFIERS.has(prefixed)) {\r\n return `${prefixed}_value`\r\n }\r\n return prefixed\r\n}\r\n\r\nexport function applyNamingStyle(input: string, style: NamingStyle): string {\r\n const words = splitWords(input)\r\n if (words.length === 0) {\r\n return ''\r\n }\r\n\r\n switch (style) {\r\n case 'preserve':\r\n return input\r\n case 'camel': {\r\n const [first, ...rest] = words\r\n return `${first.toLowerCase()}${rest.map(capitalize).join('')}`\r\n }\r\n case 'pascal':\r\n return words.map(capitalize).join('')\r\n case 'snake':\r\n return words.map(word => word.toLowerCase()).join('_')\r\n case 'kebab':\r\n return words.map(word => word.toLowerCase()).join('-')\r\n default:\r\n return input\r\n }\r\n}\r\n\r\nexport function toSafeIdentifier(input: string, style: NamingStyle, fallback = 'value'): string {\r\n const transformed = applyNamingStyle(input, style)\r\n const normalized = transformed\r\n .replace(/[^A-Za-z0-9_$]+/g, '_')\r\n .replace(/^_+|_+$/g, '')\r\n const fallbackValue = splitWords(input).join('')\r\n return ensureValidIdentifier(\r\n normalized.length > 0 ? normalized : fallbackValue,\r\n fallback,\r\n )\r\n}\r\n\r\nexport function escapeTypePropertyName(propertyName: string): string {\r\n if (IDENTIFIER_PATTERN.test(propertyName) && !RESERVED_IDENTIFIERS.has(propertyName)) {\r\n return propertyName\r\n }\r\n return `'${propertyName.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`\r\n}\r\n\r\nexport function escapeStringLiteral(value: string): string {\r\n return `'${value.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`\r\n}\r\n","import { applyNamingStyle } from './naming.ts'\r\nimport type { GeneratorArtifactKind, GeneratorOutputConfig } from './types.ts'\r\n\r\nexport interface PlaceholderContext {\r\n provider: string\r\n kind: GeneratorArtifactKind\r\n database: string\r\n schema: string\r\n model: string\r\n}\r\n\r\nfunction createStyleTokens(prefix: string, value: string): Record<string, string> {\r\n return {\r\n [prefix]: value,\r\n [`${prefix}_camel`]: applyNamingStyle(value, 'camel'),\r\n [`${prefix}_pascal`]: applyNamingStyle(value, 'pascal'),\r\n [`${prefix}_snake`]: applyNamingStyle(value, 'snake'),\r\n [`${prefix}_kebab`]: applyNamingStyle(value, 'kebab'),\r\n }\r\n}\r\n\r\nfunction renderTemplate(template: string, tokenMap: Record<string, string>): string {\r\n return template.replace(/\\{([A-Za-z0-9_]+)\\}/g, (_match, token) => {\r\n if (!(token in tokenMap)) {\r\n throw new Error(`Unknown placeholder token \"${token}\" in template \"${template}\"`)\r\n }\r\n return tokenMap[token]\r\n })\r\n}\r\n\r\nfunction resolvePlaceholderMap(\n baseTokens: Record<string, string>,\n outputConfig: GeneratorOutputConfig,\n): Record<string, string> {\n const resolved: Record<string, string> = {\n ...baseTokens,\n }\n const reservedTokenKeys = new Set(Object.keys(baseTokens))\n\n const entries = Object.entries(outputConfig.placeholderMap ?? {})\n for (let index = 0; index < entries.length; index += 1) {\n const [key, value] = entries[index]\n if (reservedTokenKeys.has(key)) {\n continue\n }\n\n let current = value\n for (let depth = 0; depth < 8; depth += 1) {\n const next = renderTemplate(current, resolved)\n if (next === current) {\r\n break\r\n }\r\n current = next\r\n }\r\n resolved[key] = current\r\n }\r\n\r\n return resolved\r\n}\r\n\r\nexport function renderOutputPath(\r\n template: string,\r\n context: PlaceholderContext,\r\n outputConfig: GeneratorOutputConfig,\r\n): string {\r\n const baseTokens: Record<string, string> = {\r\n provider: context.provider,\r\n kind: context.kind,\r\n ...createStyleTokens('database', context.database),\r\n ...createStyleTokens('schema', context.schema),\r\n ...createStyleTokens('model', context.model),\r\n }\r\n\r\n const tokens = resolvePlaceholderMap(baseTokens, outputConfig)\r\n return renderTemplate(template, tokens)\r\n}\r\n","import type { IntrospectionColumn } from '../schema/types.ts'\r\n\r\nconst NUMBER_TYPES = new Set([\r\n 'int2',\r\n 'int4',\r\n 'float4',\r\n 'float8',\r\n 'smallint',\r\n 'integer',\r\n 'real',\r\n 'double precision',\r\n])\r\n\r\nconst STRING_NUMERIC_TYPES = new Set([\r\n 'int8',\r\n 'bigint',\r\n 'serial8',\r\n 'bigserial',\r\n 'numeric',\r\n 'decimal',\r\n 'money',\r\n])\r\n\r\nconst TEXT_TYPES = new Set([\r\n 'char',\r\n 'bpchar',\r\n 'varchar',\r\n 'character varying',\r\n 'text',\r\n 'citext',\r\n 'name',\r\n 'uuid',\r\n 'date',\r\n 'time',\r\n 'timetz',\r\n 'timestamp',\r\n 'timestamptz',\r\n 'interval',\r\n 'inet',\r\n 'cidr',\r\n 'macaddr',\r\n 'macaddr8',\r\n 'point',\r\n 'line',\r\n 'lseg',\r\n 'box',\r\n 'path',\r\n 'polygon',\r\n 'circle',\r\n 'bit',\r\n 'varbit',\r\n 'xml',\r\n 'tsvector',\r\n 'tsquery',\r\n 'jsonpath',\r\n])\r\n\r\nfunction normalizeTypeLabel(column: IntrospectionColumn): string {\r\n const preferred = (column.udtName || column.dataType).toLowerCase().trim()\r\n if (column.arrayDimensions > 0 && preferred.startsWith('_')) {\r\n return preferred.slice(1)\r\n }\r\n return preferred\r\n}\r\n\r\nfunction wrapArrayType(baseType: string, depth: number): string {\r\n let wrapped = baseType\r\n for (let index = 0; index < depth; index += 1) {\r\n wrapped = `Array<${wrapped}>`\r\n }\r\n return wrapped\r\n}\r\n\r\nfunction resolveScalarType(column: IntrospectionColumn): string {\r\n const label = normalizeTypeLabel(column)\r\n\r\n if (NUMBER_TYPES.has(label)) {\r\n return 'number'\r\n }\r\n\r\n if (STRING_NUMERIC_TYPES.has(label)) {\r\n return 'string'\r\n }\r\n\r\n if (label === 'bool' || label === 'boolean') {\r\n return 'boolean'\r\n }\r\n\r\n if (label === 'bytea') {\r\n return 'Buffer'\r\n }\r\n\r\n if (label === 'json' || label === 'jsonb') {\r\n return 'Record<string, unknown>'\r\n }\r\n\r\n if (TEXT_TYPES.has(label)) {\r\n return 'string'\r\n }\r\n\r\n if (label.endsWith('range') || label.endsWith('multirange')) {\r\n return 'string'\r\n }\r\n\r\n return 'unknown'\r\n}\r\n\r\nfunction resolveKindAwareType(column: IntrospectionColumn): string {\r\n if (column.typeKind === 'enum') {\r\n const values = column.enumValues ?? []\r\n if (values.length === 0) {\r\n return 'string'\r\n }\r\n return values.map(value => `'${value.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`).join(' | ')\r\n }\r\n\r\n if (column.typeKind === 'composite') {\r\n return 'Record<string, unknown>'\r\n }\r\n\r\n if (column.typeKind === 'domain' || column.typeKind === 'range' || column.typeKind === 'multirange') {\r\n return 'string'\r\n }\r\n\r\n return resolveScalarType(column)\r\n}\r\n\r\nexport function resolvePostgresColumnType(column: IntrospectionColumn): string {\r\n const baseType = resolveKindAwareType(column)\r\n if (!column.arrayDimensions || column.arrayDimensions <= 0) {\r\n return baseType\r\n }\r\n return wrapArrayType(baseType, column.arrayDimensions)\r\n}\r\n","import { posix } from 'path'\r\nimport type {\r\n AthenaGeneratorConfig,\r\n GeneratedArtifact,\r\n GeneratedArtifacts,\r\n NormalizedAthenaGeneratorConfig,\r\n} from './types.ts'\r\nimport type {\r\n IntrospectionRelation,\r\n IntrospectionSnapshot,\r\n IntrospectionTable,\r\n} from '../schema/types.ts'\r\nimport {\n applyNamingStyle,\n escapeStringLiteral,\n escapeTypePropertyName,\n toSafeIdentifier,\n} from './naming.ts'\nimport { renderOutputPath } from './placeholders.ts'\r\nimport { resolvePostgresColumnType } from './postgres-type-mapping.ts'\r\nimport { normalizeGeneratorConfig } from './config.ts'\r\n\r\ntype ModelRenderDescriptor = {\r\n schemaName: string\r\n tableName: string\r\n filePath: string\r\n rowTypeName: string\r\n insertTypeName: string\r\n updateTypeName: string\r\n modelConstName: string\r\n table: IntrospectionTable\r\n}\r\n\r\ntype SchemaRenderDescriptor = {\r\n schemaName: string\r\n filePath: string\r\n schemaConstName: string\r\n models: ModelRenderDescriptor[]\r\n}\r\n\r\ntype DatabaseRenderDescriptor = {\r\n filePath: string\r\n databaseConstName: string\r\n schemas: SchemaRenderDescriptor[]\r\n}\r\n\r\nfunction normalizePath(pathValue: string): string {\r\n return pathValue.replace(/\\\\/g, '/')\r\n}\r\n\r\nfunction withoutTypeScriptExtension(pathValue: string): string {\r\n return pathValue.replace(/\\.tsx?$/i, '')\r\n}\r\n\r\nfunction toModuleImportPath(fromFile: string, targetFile: string): string {\r\n const relativePath = withoutTypeScriptExtension(\r\n normalizePath(posix.relative(posix.dirname(fromFile), targetFile)),\r\n )\r\n return relativePath.startsWith('.') ? relativePath : `./${relativePath}`\r\n}\r\n\r\nfunction renderObjectKey(key: string): string {\r\n const escaped = escapeTypePropertyName(key)\r\n return escaped.startsWith(\"'\") ? escaped : escaped\r\n}\r\n\r\nfunction renderRelation(relation: IntrospectionRelation): string {\r\n const through = relation.through\r\n ? `,\r\n through: {\r\n schema: ${escapeStringLiteral(relation.through.schema)},\r\n model: ${escapeStringLiteral(relation.through.model)},\r\n sourceColumns: [${relation.through.sourceColumns.map(value => escapeStringLiteral(value)).join(', ')}],\r\n targetColumns: [${relation.through.targetColumns.map(value => escapeStringLiteral(value)).join(', ')}],\r\n }`\r\n : ''\r\n\r\n return `{\r\n kind: ${escapeStringLiteral(relation.kind)},\r\n sourceColumns: [${relation.sourceColumns.map(value => escapeStringLiteral(value)).join(', ')}],\r\n targetSchema: ${escapeStringLiteral(relation.targetSchema)},\r\n targetModel: ${escapeStringLiteral(relation.targetModel)},\r\n targetColumns: [${relation.targetColumns.map(value => escapeStringLiteral(value)).join(', ')}]${through}\r\n }`\r\n}\r\n\r\nfunction renderModelArtifact(\r\n snapshot: IntrospectionSnapshot,\r\n descriptor: ModelRenderDescriptor,\r\n config: NormalizedAthenaGeneratorConfig,\r\n): GeneratedArtifact {\r\n const columnLines = Object.values(descriptor.table.columns)\r\n .map(column => {\r\n const propertyName = escapeTypePropertyName(column.name)\r\n const baseType = resolvePostgresColumnType(column)\r\n const isOptional = column.isNullable\r\n const typeWithNullability = column.isNullable ? `${baseType} | null` : baseType\r\n return ` ${propertyName}${isOptional ? '?' : ''}: ${typeWithNullability}`\r\n })\r\n .join('\\n')\r\n\r\n const nullableLines = Object.values(descriptor.table.columns)\r\n .map(column => ` ${renderObjectKey(column.name)}: ${column.isNullable ? 'true' : 'false'}`)\r\n .join(',\\n')\r\n\r\n const relationEntries = Object.entries(descriptor.table.relations)\r\n const relationBlock = config.features.emitRelations && relationEntries.length > 0\r\n ? `,\r\n relations: {\r\n${relationEntries\r\n .map(([relationKey, relationValue]) => ` ${renderObjectKey(relationKey)}: ${renderRelation(relationValue)}`)\r\n .join(',\\n')}\r\n }`\r\n : ''\r\n\r\n const content = `import { defineModel } from '@xylex-group/athena'\r\n\r\nexport interface ${descriptor.rowTypeName} {\r\n${columnLines}\r\n}\r\n\r\nexport type ${descriptor.insertTypeName} = Partial<${descriptor.rowTypeName}>\r\nexport type ${descriptor.updateTypeName} = Partial<${descriptor.insertTypeName}>\r\n\r\nexport const ${descriptor.modelConstName} = defineModel<${descriptor.rowTypeName}, ${descriptor.insertTypeName}, ${descriptor.updateTypeName}>({\r\n meta: {\r\n database: ${escapeStringLiteral(snapshot.database)},\r\n schema: ${escapeStringLiteral(descriptor.schemaName)},\r\n model: ${escapeStringLiteral(descriptor.tableName)},\r\n tableName: ${escapeStringLiteral(`${descriptor.schemaName}.${descriptor.tableName}`)},\r\n primaryKey: [${descriptor.table.primaryKey.map(value => escapeStringLiteral(value)).join(', ')}],\r\n nullable: {\r\n${nullableLines}\r\n }${relationBlock}\r\n }\r\n})\r\n`\r\n\r\n return {\r\n kind: 'model',\r\n path: descriptor.filePath,\r\n content,\r\n }\r\n}\r\n\r\nfunction renderSchemaArtifact(descriptor: SchemaRenderDescriptor): GeneratedArtifact {\r\n const importLines = descriptor.models\r\n .map(modelDescriptor => {\r\n const importPath = toModuleImportPath(descriptor.filePath, modelDescriptor.filePath)\r\n return `import { ${modelDescriptor.modelConstName} } from '${importPath}'`\r\n })\r\n .join('\\n')\r\n\r\n const modelEntries = descriptor.models\r\n .map(modelDescriptor => ` ${renderObjectKey(modelDescriptor.tableName)}: ${modelDescriptor.modelConstName}`)\r\n .join(',\\n')\r\n\r\n const content = `import { defineSchema } from '@xylex-group/athena'\r\n${importLines ? `\\n${importLines}\\n` : '\\n'}\r\nexport const ${descriptor.schemaConstName} = defineSchema({\r\n${modelEntries}\r\n})\r\n`\r\n\r\n return {\r\n kind: 'schema',\r\n path: descriptor.filePath,\r\n content,\r\n }\r\n}\r\n\r\nfunction renderDatabaseArtifact(descriptor: DatabaseRenderDescriptor): GeneratedArtifact {\r\n const importLines = descriptor.schemas\r\n .map(schemaDescriptor => {\r\n const importPath = toModuleImportPath(descriptor.filePath, schemaDescriptor.filePath)\r\n return `import { ${schemaDescriptor.schemaConstName} } from '${importPath}'`\r\n })\r\n .join('\\n')\r\n\r\n const schemaEntries = descriptor.schemas\r\n .map(schemaDescriptor => ` ${renderObjectKey(schemaDescriptor.schemaName)}: ${schemaDescriptor.schemaConstName}`)\r\n .join(',\\n')\r\n\r\n const content = `import { defineDatabase } from '@xylex-group/athena'\r\n${importLines ? `\\n${importLines}\\n` : '\\n'}\r\nexport const ${descriptor.databaseConstName} = defineDatabase({\r\n${schemaEntries}\r\n})\r\n`\r\n\r\n return {\r\n kind: 'database',\r\n path: descriptor.filePath,\r\n content,\r\n }\r\n}\r\n\r\nfunction renderRegistryArtifact(\r\n registryPath: string,\r\n databasePath: string,\r\n databaseConstName: string,\r\n registryConstName: string,\r\n databaseName: string,\r\n): GeneratedArtifact {\r\n const databaseImportPath = toModuleImportPath(registryPath, databasePath)\r\n const content = `import { defineRegistry } from '@xylex-group/athena'\r\nimport { ${databaseConstName} } from '${databaseImportPath}'\r\n\r\nexport const ${registryConstName} = defineRegistry({\r\n ${renderObjectKey(databaseName)}: ${databaseConstName}\r\n})\r\n`\r\n\r\n return {\r\n kind: 'registry',\r\n path: registryPath,\r\n content,\r\n }\r\n}\r\n\r\nfunction assertNoDuplicatePaths(files: GeneratedArtifact[]) {\n const seen = new Map<string, GeneratedArtifact>()\r\n for (const file of files) {\r\n const existing = seen.get(file.path)\r\n if (existing) {\r\n throw new Error(\n [\n `Generator output collision detected for path: ${file.path}`,\n `Collision: ${existing.kind} and ${file.kind}.`,\n 'Use explicit placeholders such as {model}, {model_kebab}, {schema}, or {schema_kebab} in output targets so each artifact resolves to a unique path.',\n ].join(' '),\n )\n }\n seen.set(file.path, file)\r\n }\r\n}\n\ntype SchemaScopedPathDescriptor = {\n schemaName: string\n filePath: string\n}\n\nfunction addSchemaSegmentToPath(pathValue: string, schemaName: string): string {\n const normalizedPath = normalizePath(pathValue)\n const parsedPath = posix.parse(normalizedPath)\n const schemaSegment = applyNamingStyle(schemaName, 'kebab')\n if (!schemaSegment) {\n return normalizedPath\n }\n\n const dir = parsedPath.dir.length > 0 ? `${parsedPath.dir}/${schemaSegment}` : schemaSegment\n return normalizePath(posix.join(dir, parsedPath.base))\n}\n\nfunction scopeDuplicateDescriptorPathsBySchema<\n TDescriptor extends SchemaScopedPathDescriptor,\n>(\n descriptors: TDescriptor[],\n): TDescriptor[] {\n const nextDescriptors = descriptors.map(descriptor => ({ ...descriptor }))\n const duplicates = new Map<string, number[]>()\n\n for (let index = 0; index < nextDescriptors.length; index += 1) {\n const descriptor = nextDescriptors[index]\n const indexes = duplicates.get(descriptor.filePath) ?? []\n indexes.push(index)\n duplicates.set(descriptor.filePath, indexes)\n }\n\n let appliedSchemaScoping = false\n for (const indexes of duplicates.values()) {\n if (indexes.length <= 1) {\n continue\n }\n\n const schemaNames = new Set(indexes.map(index => nextDescriptors[index].schemaName))\n if (schemaNames.size <= 1) {\n continue\n }\n\n for (const index of indexes) {\n const descriptor = nextDescriptors[index]\n descriptor.filePath = addSchemaSegmentToPath(descriptor.filePath, descriptor.schemaName)\n }\n appliedSchemaScoping = true\n }\n\n if (!appliedSchemaScoping) {\n return nextDescriptors\n }\n\n const normalizedPaths = new Set<string>()\n for (const descriptor of nextDescriptors) {\n if (normalizedPaths.has(descriptor.filePath)) {\n throw new Error(\n [\n `Generator output collision detected for path: ${descriptor.filePath}`,\n 'Automatic schema path scoping was applied but collisions remain.',\n 'Add explicit placeholders such as {model}, {model_kebab}, {schema}, or {schema_kebab} to your output targets.',\n ].join(' '),\n )\n }\n normalizedPaths.add(descriptor.filePath)\n }\n\n return nextDescriptors\n}\n\nclass ArtifactComposer {\n constructor(\r\n private readonly snapshot: IntrospectionSnapshot,\r\n private readonly config: NormalizedAthenaGeneratorConfig,\r\n ) {}\r\n\r\n compose(): GeneratedArtifacts {\r\n const providerName = this.snapshot.backend\r\n const databaseName = this.snapshot.database\r\n const modelDescriptors: ModelRenderDescriptor[] = []\r\n\r\n for (const schemaName of Object.keys(this.snapshot.schemas).sort()) {\r\n const schema = this.snapshot.schemas[schemaName]\r\n for (const tableName of Object.keys(schema.tables).sort()) {\r\n const table = schema.tables[tableName]\r\n const rowTypeName = `${toSafeIdentifier(`${schemaName} ${tableName}`, this.config.naming.modelType, 'Model')}Row`\r\n const insertTypeName = `${toSafeIdentifier(`${schemaName} ${tableName}`, this.config.naming.modelType, 'Model')}Insert`\r\n const updateTypeName = `${toSafeIdentifier(`${schemaName} ${tableName}`, this.config.naming.modelType, 'Model')}Update`\r\n const modelConstName = `${toSafeIdentifier(`${schemaName} ${tableName} model`, this.config.naming.modelConst, 'model')}`\r\n\r\n const modelPath = normalizePath(\r\n renderOutputPath(this.config.output.targets.model, {\r\n provider: providerName,\r\n kind: 'model',\r\n database: databaseName,\r\n schema: schemaName,\r\n model: tableName,\r\n }, this.config.output),\r\n )\r\n\r\n modelDescriptors.push({\r\n schemaName,\r\n tableName,\r\n filePath: modelPath,\r\n rowTypeName,\r\n insertTypeName,\r\n updateTypeName,\r\n modelConstName,\r\n table,\r\n })\r\n }\r\n }\r\n\r\n const scopedModelDescriptors = scopeDuplicateDescriptorPathsBySchema(modelDescriptors)\n\n let schemaDescriptors: SchemaRenderDescriptor[] = Object.keys(this.snapshot.schemas)\n .sort()\n .map(schemaName => {\n const schemaPath = normalizePath(\n renderOutputPath(this.config.output.targets.schema, {\r\n provider: providerName,\r\n kind: 'schema',\r\n database: databaseName,\r\n schema: schemaName,\r\n model: 'index',\r\n }, this.config.output),\r\n )\r\n\r\n return {\r\n schemaName,\r\n filePath: schemaPath,\r\n schemaConstName: toSafeIdentifier(\n `${schemaName} schema`,\n this.config.naming.schemaConst,\n 'schema',\n ),\n models: scopedModelDescriptors.filter(model => model.schemaName === schemaName),\n }\n })\n\n schemaDescriptors = scopeDuplicateDescriptorPathsBySchema(schemaDescriptors)\n\n const databasePath = normalizePath(\n renderOutputPath(this.config.output.targets.database, {\r\n provider: providerName,\r\n kind: 'database',\r\n database: databaseName,\r\n schema: 'index',\r\n model: 'index',\r\n }, this.config.output),\r\n )\r\n\r\n const databaseDescriptor: DatabaseRenderDescriptor = {\r\n filePath: databasePath,\r\n databaseConstName: toSafeIdentifier(\r\n `${databaseName} database`,\r\n this.config.naming.databaseConst,\r\n 'database',\r\n ),\r\n schemas: schemaDescriptors,\r\n }\r\n\r\n const files: GeneratedArtifact[] = []\r\n\r\n for (const modelDescriptor of scopedModelDescriptors) {\n files.push(renderModelArtifact(this.snapshot, modelDescriptor, this.config))\n }\n\r\n for (const schemaDescriptor of schemaDescriptors) {\r\n files.push(renderSchemaArtifact(schemaDescriptor))\r\n }\r\n\r\n files.push(renderDatabaseArtifact(databaseDescriptor))\r\n\r\n if (this.config.features.emitRegistry) {\r\n const registryPath = normalizePath(\r\n renderOutputPath(this.config.output.targets.registry, {\r\n provider: providerName,\r\n kind: 'registry',\r\n database: databaseName,\r\n schema: 'index',\r\n model: 'index',\r\n }, this.config.output),\r\n )\r\n files.push(\r\n renderRegistryArtifact(\r\n registryPath,\r\n databaseDescriptor.filePath,\r\n databaseDescriptor.databaseConstName,\r\n toSafeIdentifier('registry', this.config.naming.registryConst, 'registry'),\r\n databaseName,\r\n ),\r\n )\r\n }\r\n\r\n assertNoDuplicatePaths(files)\r\n\r\n return {\r\n snapshot: this.snapshot,\r\n files,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Generates model/schema/database/registry source artifacts from an introspection snapshot.\r\n */\r\nexport function generateArtifactsFromSnapshot(\r\n snapshot: IntrospectionSnapshot,\r\n config: AthenaGeneratorConfig | NormalizedAthenaGeneratorConfig,\r\n): GeneratedArtifacts {\r\n const normalizedConfig = 'naming' in config && 'features' in config && 'experimental' in config\r\n ? config as NormalizedAthenaGeneratorConfig\r\n : normalizeGeneratorConfig(config as AthenaGeneratorConfig)\r\n return new ArtifactComposer(snapshot, normalizedConfig).compose()\r\n}\r\n","import { createClient, type AthenaSdkClient } from '../client.ts'\r\nimport {\r\n buildGatewayCatalogQueries,\r\n PostgresCatalogSnapshotAssembler,\r\n type ColumnQueryRow,\r\n type EnumQueryRow,\r\n type ForeignKeyQueryRow,\r\n type PrimaryKeyQueryRow,\r\n} from '../schema/postgres-introspection-core.ts'\r\nimport { createPostgresIntrospectionProvider } from '../schema/postgres-provider.ts'\r\nimport type {\r\n IntrospectionInspectOptions,\r\n IntrospectionSnapshot,\r\n SchemaIntrospectionProvider,\r\n} from '../schema/types.ts'\r\nimport type {\r\n GeneratorExperimentalFlags,\r\n GeneratorProviderConfig,\r\n PostgresDirectProviderConfig,\r\n PostgresGatewayProviderConfig,\r\n ScyllaDirectProviderConfig,\r\n} from './types.ts'\r\nimport { normalizeSchemaSelection } from './schema-selection.ts'\r\n\r\nclass AthenaGatewayCatalogClient {\r\n constructor(private readonly client: AthenaSdkClient) {}\r\n\r\n async queryRows<T extends Record<string, unknown>>(query: string): Promise<T[]> {\r\n const result = await this.client.query<T>(query)\r\n if (result.error || result.status < 200 || result.status >= 300) {\r\n throw new Error(result.error ?? `Gateway query failed with status ${result.status}`)\r\n }\r\n return result.data ?? []\r\n }\r\n\r\n async queryColumns(query: string): Promise<ColumnQueryRow[]> {\r\n return this.queryRows<ColumnQueryRow>(query)\r\n }\r\n\r\n async queryEnums(query: string): Promise<Map<number, string[]>> {\r\n const rows = await this.queryRows<EnumQueryRow>(query)\r\n const enumMap = new Map<number, string[]>()\r\n for (const row of rows) {\r\n const existing = enumMap.get(row.type_oid) ?? []\r\n existing.push(row.enum_label)\r\n enumMap.set(row.type_oid, existing)\r\n }\r\n return enumMap\r\n }\r\n\r\n async queryPrimaryKeys(query: string): Promise<PrimaryKeyQueryRow[]> {\r\n return this.queryRows<PrimaryKeyQueryRow>(query)\r\n }\r\n\r\n async queryForeignKeys(query: string): Promise<ForeignKeyQueryRow[]> {\r\n return this.queryRows<ForeignKeyQueryRow>(query)\r\n }\r\n}\r\n\r\nclass AthenaGatewayPostgresIntrospectionProvider implements SchemaIntrospectionProvider {\r\n readonly backend = 'postgresql' as const\r\n\r\n private readonly client: AthenaSdkClient\r\n private readonly schemas: string[]\r\n\r\n constructor(private readonly config: PostgresGatewayProviderConfig) {\r\n this.client = createClient(this.config.gatewayUrl, this.config.apiKey, {\r\n backend: {\r\n type: this.config.backend ?? 'postgresql',\r\n },\r\n })\r\n this.schemas = normalizeSchemaSelection(this.config.schemas)\r\n }\r\n\r\n async inspect(options?: IntrospectionInspectOptions): Promise<IntrospectionSnapshot> {\r\n const schemas =\r\n options?.schemas && options.schemas.length > 0\r\n ? normalizeSchemaSelection(options.schemas)\r\n : this.schemas\r\n\r\n const catalogClient = new AthenaGatewayCatalogClient(this.client)\r\n const queries = buildGatewayCatalogQueries(schemas)\r\n\r\n const [columnRows, enumMap, primaryKeyRows, foreignKeyRows] = await Promise.all([\r\n catalogClient.queryColumns(queries.columns),\r\n catalogClient.queryEnums(queries.enums),\r\n catalogClient.queryPrimaryKeys(queries.primaryKeys),\r\n catalogClient.queryForeignKeys(queries.foreignKeys),\r\n ])\r\n\r\n const assembler = new PostgresCatalogSnapshotAssembler()\r\n assembler.addColumnRows(columnRows, enumMap)\r\n assembler.addPrimaryKeyRows(primaryKeyRows)\r\n assembler.addForeignKeyRows(foreignKeyRows)\r\n assembler.addManyToManyRows(foreignKeyRows)\r\n\r\n return {\r\n backend: 'postgresql',\r\n database: this.config.database,\r\n generatedAt: new Date().toISOString(),\r\n schemas: assembler.toSchemas(),\r\n }\r\n }\r\n}\r\n\r\nclass ScyllaIntrospectionProvider implements SchemaIntrospectionProvider {\r\n readonly backend = 'scylladb' as const\r\n\r\n constructor(private readonly config: ScyllaDirectProviderConfig) {}\r\n\r\n async inspect(): Promise<IntrospectionSnapshot> {\r\n throw new Error(\r\n `Scylla introspection provider is not implemented yet for keyspace ${this.config.keyspace}.`,\r\n )\r\n }\r\n}\r\n\r\nfunction createPostgresProvider(config: PostgresDirectProviderConfig): SchemaIntrospectionProvider {\r\n return createPostgresIntrospectionProvider({\r\n connectionString: config.connectionString,\r\n database: config.database,\r\n schemas: normalizeSchemaSelection(config.schemas),\r\n })\r\n}\r\n\r\n/**\r\n * Resolves a runtime introspection provider from generator config.\r\n */\r\nexport function resolveGeneratorProvider(\r\n providerConfig: GeneratorProviderConfig,\r\n experimentalFlags: GeneratorExperimentalFlags,\r\n): SchemaIntrospectionProvider {\r\n if (providerConfig.kind === 'postgres' && providerConfig.mode === 'direct') {\r\n return createPostgresProvider(providerConfig)\r\n }\r\n\r\n if (providerConfig.kind === 'postgres' && providerConfig.mode === 'gateway') {\r\n return new AthenaGatewayPostgresIntrospectionProvider(providerConfig)\r\n }\r\n\r\n if (providerConfig.kind === 'scylla') {\r\n if (!experimentalFlags.scyllaProviderContracts) {\r\n throw new Error(\r\n 'Scylla provider contracts are disabled. Set experimental.scyllaProviderContracts=true to enable placeholders.',\r\n )\r\n }\r\n return new ScyllaIntrospectionProvider(providerConfig)\r\n }\r\n\r\n throw new Error(`Unsupported generator provider kind: ${(providerConfig as { kind?: string }).kind ?? 'unknown'}`)\r\n}\r\n","import { mkdir, writeFile } from 'fs/promises'\r\nimport { dirname, resolve } from 'path'\r\nimport { generateArtifactsFromSnapshot } from './renderer.ts'\r\nimport { loadGeneratorConfig } from './config.ts'\r\nimport { resolveGeneratorProvider } from './providers.ts'\r\nimport { resolveProviderSchemas } from './schema-selection.ts'\r\nimport type {\r\n GeneratedArtifact,\r\n LoadGeneratorConfigOptions,\r\n RunGeneratorOptions,\r\n RunGeneratorResult,\r\n} from './types.ts'\r\n\r\nasync function writeArtifacts(\r\n files: GeneratedArtifact[],\r\n cwd: string,\r\n): Promise<string[]> {\r\n const writtenFiles: string[] = []\r\n\r\n for (const file of files) {\r\n const absolutePath = resolve(cwd, file.path)\r\n await mkdir(dirname(absolutePath), { recursive: true })\r\n await writeFile(absolutePath, file.content, 'utf8')\r\n writtenFiles.push(file.path)\r\n }\r\n\r\n return writtenFiles\r\n}\r\n\r\n/**\r\n * End-to-end generator execution: load config, introspect, render, and optionally write files.\r\n */\r\nexport async function runSchemaGenerator(options: RunGeneratorOptions = {}): Promise<RunGeneratorResult> {\r\n const cwd = options.cwd ?? process.cwd()\r\n const configOptions: LoadGeneratorConfigOptions = {\r\n cwd,\r\n configPath: options.configPath,\r\n }\r\n\r\n const { configPath, config } = await loadGeneratorConfig(configOptions)\r\n const provider = options.provider ?? resolveGeneratorProvider(config.provider, config.experimental)\r\n\r\n const snapshot = await provider.inspect({\r\n schemas: resolveProviderSchemas(config.provider),\r\n })\r\n\r\n const generated = generateArtifactsFromSnapshot(snapshot, config)\r\n const writtenFiles = options.dryRun ? [] : await writeArtifacts(generated.files, cwd)\r\n\r\n return {\r\n ...generated,\r\n configPath,\r\n writtenFiles,\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../src/gateway/errors.ts","../src/gateway/url.ts","../src/gateway/client.ts","../src/sql-identifiers.ts","../src/auth/react-email.ts","../src/auth/client.ts","../src/utils/parse-boolean-flag.ts","../src/auxiliaries.ts","../src/db/module.ts","../src/query-ast.ts","../src/gateway/structured-select.ts","../src/query-transport.ts","../src/client.ts","../src/gateway/types.ts","../src/schema/definitions.ts","../src/schema/typed-client.ts","../src/schema/postgres-introspection-core.ts","../src/schema/postgres-provider.ts","../src/schema/model-form.ts","../src/generator/schema-selection.ts","../src/generator/config.ts","../src/utils/slugify.ts","../src/generator/naming.ts","../src/generator/placeholders.ts","../src/generator/postgres-type-mapping.ts","../src/generator/renderer.ts","../src/generator/providers.ts","../src/generator/pipeline.ts"],"names":["identifier","aliasIdentifier","baseIdentifier","isRecord","FALLBACK_SDK_VERSION","SDK_NAME","SDK_VERSION","SDK_HEADER_VALUE","normalizeHeaderValue","parseResponseBody","resolveRequestId","resolveErrorMessage","buildHeaders","token","sessions","parseBooleanFlag","message","kind","resolve","firstNonEmptyString","resolveStructuredErrorPayload","stringifyFilterValue","filterMethods","existsSync","readFileSync","pathToFileURL","posix","relationKey","stat","mkdir","dirname","writeFile"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n AthenaGatewayEndpointPath,\n AthenaGatewayErrorCode,\n AthenaGatewayErrorDetails,\n AthenaGatewayMethod,\n AthenaGatewayResponse,\n} from './types.js'\n\nexport interface AthenaGatewayErrorInput {\n code: AthenaGatewayErrorCode\n message: string\n status?: number\n endpoint?: AthenaGatewayEndpointPath\n method?: AthenaGatewayMethod\n requestId?: string\n hint?: string\n cause?: string\n}\n\n/**\n * Canonical error for gateway failures.\n * Holds request context and machine-readable classification.\n */\nexport class AthenaGatewayError extends Error {\n readonly code: AthenaGatewayErrorCode\n readonly status: number\n readonly endpoint?: AthenaGatewayEndpointPath\n readonly method?: AthenaGatewayMethod\n readonly requestId?: string\n readonly hint?: string\n readonly causeDetail?: string\n\n constructor(input: AthenaGatewayErrorInput) {\n super(input.message)\n this.name = 'AthenaGatewayError'\n this.code = input.code\n this.status = input.status ?? 0\n this.endpoint = input.endpoint\n this.method = input.method\n this.requestId = input.requestId\n this.hint = input.hint\n this.causeDetail = input.cause\n }\n\n toDetails(): AthenaGatewayErrorDetails {\n return {\n code: this.code,\n message: this.message,\n status: this.status,\n endpoint: this.endpoint,\n method: this.method,\n requestId: this.requestId,\n hint: this.hint,\n cause: this.causeDetail,\n }\n }\n\n static fromResponse<T>(\n response: AthenaGatewayResponse<T>,\n fallback: Omit<AthenaGatewayErrorInput, 'code' | 'message' | 'status'>,\n ) {\n const details = response.errorDetails\n if (details) {\n return new AthenaGatewayError({\n code: details.code,\n message: details.message,\n status: details.status,\n endpoint: details.endpoint ?? fallback.endpoint,\n method: details.method ?? fallback.method,\n requestId: details.requestId ?? fallback.requestId,\n hint: details.hint,\n cause: details.cause,\n })\n }\n\n return new AthenaGatewayError({\n code: 'HTTP_ERROR',\n message: response.error ?? 'Gateway request failed',\n status: response.status,\n endpoint: fallback.endpoint,\n method: fallback.method,\n requestId: fallback.requestId,\n })\n }\n}\n\nexport function isAthenaGatewayError(error: unknown): error is AthenaGatewayError {\n return error instanceof AthenaGatewayError\n}\n","import { AthenaGatewayError } from './errors.ts'\n\nexport const ATHENA_DEFAULT_BASE_URL = 'https://athena-db.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 (or pass createClient(url, ...)) to a full URL such as \"https://mirror3.athena-db.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 (or pass createClient(url, ...)) to a full URL such as \"https://mirror3.athena-db.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://mirror3.athena-db.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://mirror3.athena-db.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","import type {\r\n AthenaGatewayBaseOptions,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayConnectionOptions,\r\n AthenaGatewayConnectionResult,\r\n AthenaGatewayEndpointPath,\r\n AthenaGatewayErrorDetails,\r\n AthenaGatewayMethod,\r\n AthenaRpcCallOptions,\r\n AthenaRpcPayload,\r\n AthenaGatewayResponse,\r\n} from \"./types.js\";\r\nimport type {\r\n AthenaDeletePayload,\r\n AthenaFetchPayload,\r\n AthenaInsertPayload,\r\n AthenaRpcFilter,\r\n AthenaUpdatePayload,\r\n AthenaQueryPayload,\r\n} from \"./types.js\";\r\nimport { AthenaGatewayError } from \"./errors.ts\";\r\nimport {\r\n ATHENA_DEFAULT_BASE_URL,\r\n buildAthenaGatewayUrl,\r\n normalizeAthenaGatewayBaseUrl,\r\n} from \"./url.ts\";\r\n\r\nconst DEFAULT_CLIENT = \"railway_direct\";\r\nconst FALLBACK_SDK_VERSION = \"1.3.0\";\r\nconst SDK_NAME = \"xylex-group/athena\";\r\n\r\nconst SDK_VERSION =\r\n typeof process !== \"undefined\" && process?.env?.npm_package_version\r\n ? process.env.npm_package_version\r\n : FALLBACK_SDK_VERSION;\r\nconst SDK_HEADER_VALUE = `${SDK_NAME} ${SDK_VERSION}`;\r\n\r\nfunction parseResponseBody(rawText: string, contentType: string | null) {\r\n if (!rawText) {\r\n return { parsed: null as unknown, parseFailed: false };\r\n }\r\n\r\n const contentTypeSuggestsJson =\r\n contentType?.toLowerCase().includes(\"application/json\") ?? false;\r\n const looksJson =\r\n contentTypeSuggestsJson || rawText.startsWith(\"{\") || rawText.startsWith(\"[\");\r\n\r\n if (!looksJson) {\r\n return { parsed: rawText as unknown, parseFailed: false };\r\n }\r\n\r\n try {\r\n return { parsed: JSON.parse(rawText) as unknown, parseFailed: false };\r\n } catch {\r\n return { parsed: rawText as unknown, parseFailed: true };\r\n }\r\n}\r\n\r\nfunction normalizeHeaderValue(value?: string | null) {\r\n return value ? value : undefined;\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\r\n}\r\n\r\nfunction nonEmptyString(value: unknown): string | undefined {\r\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\r\n}\r\n\r\nfunction resolveStructuredErrorPayload(payload: unknown): Record<string, unknown> | null {\r\n if (!isRecord(payload)) return null;\r\n return isRecord(payload.error) ? payload.error : payload;\r\n}\r\n\r\nfunction resolveRequestId(headers: Headers): string | undefined {\r\n return (\r\n headers.get(\"x-request-id\") ??\r\n headers.get(\"x-correlation-id\") ??\r\n headers.get(\"x-athena-request-id\") ??\r\n undefined\r\n );\r\n}\r\n\r\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\r\n const structuredPayload = resolveStructuredErrorPayload(payload);\r\n if (structuredPayload) {\r\n const messageCandidates = [structuredPayload.message, structuredPayload.error, structuredPayload.details];\r\n for (const candidate of messageCandidates) {\r\n const resolved = nonEmptyString(candidate);\r\n if (resolved) return resolved;\r\n }\r\n }\r\n\r\n const rawMessage = nonEmptyString(payload);\r\n if (rawMessage) return rawMessage;\r\n\r\n return fallback;\r\n}\r\n\r\nfunction resolveErrorHint(payload: unknown): string | undefined {\r\n const structuredPayload = resolveStructuredErrorPayload(payload);\r\n return structuredPayload ? nonEmptyString(structuredPayload.hint) : undefined;\r\n}\r\n\r\nfunction resolveStatusText(response: Response, payload: unknown): string | null {\r\n const rawStatusText = nonEmptyString(response.statusText);\r\n if (rawStatusText) return rawStatusText;\r\n const payloadRecord = isRecord(payload) ? payload : null;\r\n return payloadRecord ? nonEmptyString(payloadRecord.statusText) ?? null : null;\r\n}\r\n\r\nfunction detailsFromError(error: AthenaGatewayError): AthenaGatewayErrorDetails {\r\n return error.toDetails();\r\n}\r\n\r\ninterface AthenaFindManyAstPayload {\r\n table_name: string;\r\n select: Record<string, unknown>;\r\n where?: Record<string, unknown>;\r\n orderBy?: Record<string, unknown>;\r\n limit?: number;\r\n}\r\n\r\nfunction toQueryScalar(value: unknown): string {\r\n if (value === null || value === undefined) return \"null\";\r\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\r\n if (typeof value === \"number\") return Number.isFinite(value) ? String(value) : \"null\";\r\n return String(value);\r\n}\r\n\r\nfunction toQueryArray(values: unknown[]): string {\r\n return `{${values.map(toQueryScalar).join(\",\")}}`;\r\n}\r\n\r\nfunction toRpcArgumentQueryValue(value: unknown): string {\r\n if (Array.isArray(value)) return toQueryArray(value);\r\n if (value && typeof value === \"object\") return JSON.stringify(value);\r\n return toQueryScalar(value);\r\n}\r\n\r\nfunction toRpcFilterQueryValue(filter: AthenaRpcFilter): string {\r\n const value = filter.value;\r\n switch (filter.operator) {\r\n case \"in\": {\r\n if (!Array.isArray(value)) {\r\n throw new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message: `RPC filter \"${filter.column}\" with operator \"in\" requires an array value`,\r\n status: 0,\r\n });\r\n }\r\n return `in.${toQueryArray(value)}`;\r\n }\r\n case \"is\":\r\n return `is.${toQueryScalar(value)}`;\r\n case \"eq\":\r\n case \"neq\":\r\n case \"gt\":\r\n case \"gte\":\r\n case \"lt\":\r\n case \"lte\":\r\n case \"like\":\r\n case \"ilike\":\r\n return `${filter.operator}.${toQueryScalar(value)}`;\r\n }\r\n}\r\n\r\nfunction buildRpcGetEndpoint(payload: AthenaRpcPayload): AthenaGatewayEndpointPath {\r\n const functionName = (payload.function_name ?? payload.function).trim();\r\n if (!functionName) {\r\n throw new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message: \"rpc requires a function name\",\r\n status: 0,\r\n endpoint: \"/gateway/rpc\",\r\n method: \"GET\",\r\n });\r\n }\r\n\r\n const query = new URLSearchParams();\r\n if (payload.schema) query.set(\"schema\", payload.schema);\r\n if (payload.select) query.set(\"select\", payload.select);\r\n if (payload.count) query.set(\"count\", payload.count);\r\n if (payload.head) query.set(\"head\", \"true\");\r\n if (typeof payload.limit === \"number\") query.set(\"limit\", String(payload.limit));\r\n if (typeof payload.offset === \"number\") query.set(\"offset\", String(payload.offset));\r\n if (payload.order?.column) {\r\n query.set(\r\n \"order\",\r\n payload.order.ascending === false\r\n ? `${payload.order.column}.desc`\r\n : payload.order.column,\r\n );\r\n }\r\n\r\n if (payload.args) {\r\n for (const [key, value] of Object.entries(payload.args)) {\r\n query.set(key, toRpcArgumentQueryValue(value));\r\n }\r\n }\r\n\r\n if (payload.filters?.length) {\r\n for (const filter of payload.filters) {\r\n if (payload.args && Object.prototype.hasOwnProperty.call(payload.args, filter.column)) {\r\n throw new AthenaGatewayError({\r\n code: \"UNKNOWN_ERROR\",\r\n message: `RPC filter \"${filter.column}\" conflicts with RPC argument \"${filter.column}\" in GET mode`,\r\n status: 0,\r\n });\r\n }\r\n query.set(filter.column, toRpcFilterQueryValue(filter));\r\n }\r\n }\r\n\r\n const endpoint = `/rpc/${encodeURIComponent(functionName)}`;\r\n const queryText = query.toString();\r\n const withQuery = queryText ? `${endpoint}?${queryText}` : endpoint;\r\n return withQuery as AthenaGatewayEndpointPath;\r\n}\r\n\r\nfunction buildHeaders(\r\n config: AthenaGatewayBaseOptions,\r\n options?: AthenaGatewayCallOptions,\r\n): Record<string, string> {\r\n const mergedStripNulls = options?.stripNulls ?? true;\r\n const extraHeaders = {\r\n ...(config.headers ?? {}),\r\n ...(options?.headers ?? {}),\r\n };\r\n const headerClient =\r\n extraHeaders[\"x-athena-client\"] ?? extraHeaders[\"X-Athena-Client\"];\r\n const finalClient =\r\n options?.client ??\r\n config.client ??\r\n (typeof headerClient === \"string\" ? headerClient : undefined) ??\r\n DEFAULT_CLIENT;\r\n const finalApiKey = options?.apiKey ?? config.apiKey;\r\n const finalPublishEvent = options?.publishEvent ?? config.publishEvent;\r\n\r\n const headers: Record<string, string> = {\r\n \"Content-Type\": \"application/json\",\r\n \"X-Athena-Sdk\": SDK_HEADER_VALUE,\r\n };\r\n\r\n if (options?.userId ?? config.userId) {\r\n headers[\"X-User-Id\"] = options?.userId ?? config.userId ?? \"\";\r\n }\r\n\r\n if (options?.organizationId ?? config.organizationId) {\r\n headers[\"X-Organization-Id\"] =\r\n options?.organizationId ?? config.organizationId ?? \"\";\r\n }\r\n\r\n if (finalClient) {\r\n headers[\"X-Athena-Client\"] = finalClient;\r\n }\r\n\r\n const finalBackend = options?.backend ?? config.backend;\r\n if (finalBackend) {\r\n const type =\r\n typeof finalBackend === \"string\" ? finalBackend : finalBackend.type;\r\n if (type) headers[\"X-Backend-Type\"] = type;\r\n }\r\n\r\n if (typeof mergedStripNulls === \"boolean\") {\r\n headers[\"X-Strip-Nulls\"] = mergedStripNulls ? \"true\" : \"false\";\r\n }\r\n\r\n if (finalPublishEvent) {\r\n headers[\"X-Publish-Event\"] = finalPublishEvent;\r\n }\r\n\r\n if (finalApiKey) {\r\n headers[\"apikey\"] = finalApiKey;\r\n headers[\"x-api-key\"] = headers[\"x-api-key\"] ?? finalApiKey;\r\n }\r\n\r\n const athenaClientKeys = [\"x-athena-client\", \"X-Athena-Client\"];\r\n Object.entries(extraHeaders).forEach(([key, value]) => {\r\n if (athenaClientKeys.includes(key)) return;\r\n const normalized = normalizeHeaderValue(value);\r\n if (normalized) {\r\n headers[key] = normalized;\r\n }\r\n });\r\n\r\n return headers;\r\n}\r\n\r\nfunction toInvalidUrlResponse<T>(\r\n error: unknown,\r\n endpoint: AthenaGatewayEndpointPath,\r\n method: AthenaGatewayMethod,\r\n): AthenaGatewayResponse<T> {\r\n const message = error instanceof Error ? error.message : String(error);\r\n const gatewayError =\r\n error instanceof AthenaGatewayError\r\n ? error\r\n : new AthenaGatewayError({\r\n code: \"INVALID_URL\",\r\n message,\r\n status: 0,\r\n endpoint,\r\n method,\r\n cause: message,\r\n hint: \"Set ATHENA_URL to a full http(s) URL before running queries.\",\r\n });\r\n\r\n return {\r\n ok: false,\r\n status: 0,\r\n statusText: null,\r\n data: null,\r\n error: gatewayError.message,\r\n errorDetails: detailsFromError(\r\n new AthenaGatewayError({\r\n code: gatewayError.code,\r\n message: gatewayError.message,\r\n status: gatewayError.status,\r\n endpoint,\r\n method,\r\n requestId: gatewayError.requestId,\r\n hint: gatewayError.hint,\r\n cause: gatewayError.causeDetail,\r\n }),\r\n ),\r\n raw: null,\r\n };\r\n}\r\n\r\nfunction resolveGatewayBaseUrl(input?: string | null) {\r\n return normalizeAthenaGatewayBaseUrl(input, {\r\n defaultBaseUrl: ATHENA_DEFAULT_BASE_URL,\r\n });\r\n}\r\n\r\nfunction resolveProbePath(path?: string) {\r\n if (!path) return \"/\";\r\n if (!path.startsWith(\"/\")) {\r\n throw new AthenaGatewayError({\r\n code: \"INVALID_URL\",\r\n message: `Athena gateway probe path must start with \"/\". Received ${JSON.stringify(path)}.`,\r\n status: 0,\r\n hint: 'Use a leading slash such as \"/\" or \"/health\".',\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nfunction mergeConnectionHeaders(\r\n baseHeaders: Record<string, string>,\r\n headers?: Record<string, string>,\r\n): Record<string, string> {\r\n const merged = {\r\n ...baseHeaders,\r\n ...(headers ?? {}),\r\n };\r\n\r\n if (!merged[\"X-Athena-Sdk\"] && !merged[\"x-athena-sdk\"]) {\r\n merged[\"X-Athena-Sdk\"] = SDK_HEADER_VALUE;\r\n }\r\n\r\n return merged;\r\n}\r\n\r\nasync function performConnectionCheck(\r\n baseUrl: string,\r\n requestHeaders: Record<string, string>,\r\n options?: AthenaGatewayConnectionOptions,\r\n): Promise<AthenaGatewayConnectionResult> {\r\n const path = resolveProbePath(options?.path);\r\n const url = buildAthenaGatewayUrl(baseUrl, path);\r\n\r\n try {\r\n const response = await fetch(url, {\r\n method: \"GET\",\r\n headers: mergeConnectionHeaders(requestHeaders, options?.headers),\r\n signal: options?.signal,\r\n });\r\n const rawText = await response.text();\r\n const requestId = resolveRequestId(response.headers);\r\n const parsedBody = parseResponseBody(\r\n rawText ?? \"\",\r\n response.headers.get(\"content-type\"),\r\n );\r\n\r\n if (parsedBody.parseFailed) {\r\n const invalidJsonError = new AthenaGatewayError({\r\n code: \"INVALID_JSON\",\r\n message: \"Gateway probe returned malformed JSON\",\r\n status: response.status,\r\n method: \"GET\",\r\n requestId,\r\n hint: \"Verify the gateway response body is valid JSON.\",\r\n cause: rawText.slice(0, 300),\r\n });\r\n return {\r\n ok: false,\r\n reachable: true,\r\n status: response.status,\r\n statusText: resolveStatusText(response, parsedBody.parsed),\r\n baseUrl,\r\n url,\r\n error: invalidJsonError.message,\r\n errorDetails: detailsFromError(invalidJsonError),\r\n raw: parsedBody.parsed,\r\n };\r\n }\r\n\r\n const parsed = parsedBody.parsed;\r\n if (!response.ok) {\r\n const httpError = new AthenaGatewayError({\r\n code: \"HTTP_ERROR\",\r\n message: resolveErrorMessage(\r\n parsed,\r\n `Athena gateway GET ${path} failed with status ${response.status}`,\r\n ),\r\n status: response.status,\r\n method: \"GET\",\r\n requestId,\r\n hint: resolveErrorHint(parsed),\r\n });\r\n\r\n return {\r\n ok: false,\r\n reachable: true,\r\n status: response.status,\r\n statusText: resolveStatusText(response, parsed),\r\n baseUrl,\r\n url,\r\n error: httpError.message,\r\n errorDetails: detailsFromError(httpError),\r\n raw: parsed,\r\n };\r\n }\r\n\r\n return {\r\n ok: true,\r\n reachable: true,\r\n status: response.status,\r\n statusText: resolveStatusText(response, parsed),\r\n baseUrl,\r\n url,\r\n error: undefined,\r\n errorDetails: null,\r\n raw: parsed,\r\n };\r\n } catch (callError) {\r\n const message = callError instanceof Error ? callError.message : String(callError);\r\n const networkError = new AthenaGatewayError({\r\n code: \"NETWORK_ERROR\",\r\n message: `Network error while probing Athena gateway ${url}: ${message}`,\r\n method: \"GET\",\r\n cause: message,\r\n hint: \"Check gateway URL, DNS, and network reachability.\",\r\n });\r\n return {\r\n ok: false,\r\n reachable: false,\r\n status: 0,\r\n statusText: null,\r\n baseUrl,\r\n url,\r\n error: networkError.message,\r\n errorDetails: detailsFromError(networkError),\r\n raw: null,\r\n };\r\n }\r\n}\r\n\r\nexport async function verifyAthenaGatewayUrl(\r\n baseUrl: string,\r\n options?: AthenaGatewayConnectionOptions,\r\n): Promise<AthenaGatewayConnectionResult> {\r\n const normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(baseUrl);\r\n return performConnectionCheck(normalizedBaseUrl, { \"X-Athena-Sdk\": SDK_HEADER_VALUE }, options);\r\n}\r\n\r\nasync function callAthena<T>(\r\n config: AthenaGatewayBaseOptions,\r\n endpoint: AthenaGatewayEndpointPath,\r\n method: AthenaGatewayMethod,\r\n payload: unknown,\r\n options?: AthenaGatewayCallOptions,\r\n): Promise<AthenaGatewayResponse<T>> {\r\n let baseUrl: string;\r\n try {\r\n baseUrl = resolveGatewayBaseUrl(options?.baseUrl ?? config.baseUrl);\r\n } catch (error) {\r\n return toInvalidUrlResponse<T>(error, endpoint, method);\r\n }\r\n\r\n const url = buildAthenaGatewayUrl(baseUrl, endpoint);\r\n const headers = buildHeaders(config, options);\r\n\r\n try {\r\n const requestInit: RequestInit = {\r\n method,\r\n headers,\r\n };\r\n if (method !== \"GET\") {\r\n requestInit.body = JSON.stringify(payload);\r\n }\r\n\r\n const response = await fetch(url, requestInit);\r\n\r\n const rawText = await response.text();\r\n const requestId = resolveRequestId(response.headers);\r\n const parsedBody = parseResponseBody(\r\n rawText ?? \"\",\r\n response.headers.get(\"content-type\"),\r\n );\r\n\r\n if (parsedBody.parseFailed) {\r\n const invalidJsonError = new AthenaGatewayError({\r\n code: \"INVALID_JSON\",\r\n message: \"Gateway returned malformed JSON\",\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n hint: \"Verify the gateway response body is valid JSON.\",\r\n cause: rawText.slice(0, 300),\r\n });\r\n return {\r\n ok: false,\r\n status: response.status,\r\n statusText: resolveStatusText(response, parsedBody.parsed),\r\n data: null,\r\n error: invalidJsonError.message,\r\n errorDetails: detailsFromError(invalidJsonError),\r\n raw: parsedBody.parsed,\r\n };\r\n }\r\n\r\n const parsed = parsedBody.parsed;\r\n const parsedPayload = isRecord(parsed) ? parsed : null;\r\n\r\n if (!response.ok) {\r\n const httpError = new AthenaGatewayError({\r\n code: \"HTTP_ERROR\",\r\n message: resolveErrorMessage(\r\n parsed,\r\n `Athena gateway ${method} ${endpoint} failed with status ${response.status}`,\r\n ),\r\n status: response.status,\r\n endpoint,\r\n method,\r\n requestId,\r\n hint: resolveErrorHint(parsed),\r\n });\r\n\r\n return {\r\n ok: false,\r\n status: response.status,\r\n statusText: resolveStatusText(response, parsed),\r\n data: null,\r\n error: httpError.message,\r\n errorDetails: detailsFromError(httpError),\r\n raw: parsed,\r\n };\r\n }\r\n\r\n // Unwrap envelope: API may return { data: [...], error: null } (e.g. when cached)\r\n // vs raw array when uncached. Use inner data when present to avoid double nesting.\r\n const payloadData =\r\n parsedPayload && \"data\" in parsedPayload\r\n ? (parsedPayload.data as T)\r\n : (parsed as T);\r\n const payloadCount =\r\n parsedPayload && \"count\" in parsedPayload\r\n ? typeof parsedPayload.count === \"number\" || parsedPayload.count === null\r\n ? (parsedPayload.count as number | null)\r\n : undefined\r\n : undefined;\r\n\r\n return {\r\n ok: true,\r\n status: response.status,\r\n statusText: resolveStatusText(response, parsed),\r\n data: payloadData ?? null,\r\n count: payloadCount,\r\n error: undefined,\r\n errorDetails: null,\r\n raw: parsed,\r\n };\r\n } catch (callError) {\r\n const message = callError instanceof Error ? callError.message : String(callError);\r\n const networkError = new AthenaGatewayError({\r\n code: \"NETWORK_ERROR\",\r\n message: `Network error while calling ${method} ${endpoint}: ${message}`,\r\n endpoint,\r\n method,\r\n cause: message,\r\n hint: \"Check gateway URL, DNS, and network reachability.\",\r\n });\r\n return {\r\n ok: false,\r\n status: 0,\r\n statusText: null,\r\n data: null,\r\n error: networkError.message,\r\n errorDetails: detailsFromError(networkError),\r\n raw: null,\r\n };\r\n }\r\n}\r\n\r\nexport interface AthenaGatewayClient {\r\n baseUrl: string;\r\n buildHeaders(options?: AthenaGatewayCallOptions): Record<string, string>;\r\n verifyConnection(\r\n options?: AthenaGatewayConnectionOptions,\r\n ): Promise<AthenaGatewayConnectionResult>;\r\n fetchGateway<T>(\r\n payload: AthenaFetchPayload | AthenaFindManyAstPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n insertGateway<T>(\r\n payload: AthenaInsertPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n updateGateway<T>(\r\n payload: AthenaUpdatePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n deleteGateway<T>(\r\n payload: AthenaDeletePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n rpcGateway<T>(\r\n payload: AthenaRpcPayload,\r\n options?: AthenaRpcCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n queryGateway<T>(\r\n payload: AthenaQueryPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaGatewayResponse<T>>;\r\n}\r\n\r\nexport function createAthenaGatewayClient(\r\n config: AthenaGatewayBaseOptions = {},\r\n): AthenaGatewayClient {\r\n const normalizedBaseUrl = resolveGatewayBaseUrl(config.baseUrl);\r\n const normalizedConfig: AthenaGatewayBaseOptions = {\r\n ...config,\r\n baseUrl: normalizedBaseUrl,\r\n };\r\n\r\n return {\r\n baseUrl: normalizedBaseUrl,\r\n buildHeaders(options) {\r\n return buildHeaders(normalizedConfig, options);\r\n },\r\n verifyConnection(options) {\r\n return performConnectionCheck(\r\n normalizedBaseUrl,\r\n buildHeaders(normalizedConfig),\r\n options,\r\n );\r\n },\r\n fetchGateway(payload, options) {\r\n return callAthena(normalizedConfig, \"/gateway/fetch\", \"POST\", payload, options);\r\n },\r\n insertGateway(payload, options) {\r\n return callAthena(normalizedConfig, \"/gateway/insert\", \"PUT\", payload, options);\r\n },\r\n updateGateway(payload, options) {\r\n return callAthena(normalizedConfig, \"/gateway/update\", \"POST\", payload, options);\r\n },\r\n deleteGateway(payload, options) {\r\n return callAthena(normalizedConfig, \"/gateway/delete\", \"DELETE\", payload, options);\r\n },\r\n rpcGateway(payload, options) {\r\n if (options?.get) {\r\n const endpoint = buildRpcGetEndpoint(payload);\r\n return callAthena(normalizedConfig, endpoint, \"GET\", null, options);\r\n }\r\n return callAthena(normalizedConfig, \"/gateway/rpc\", \"POST\", payload, options);\r\n },\r\n queryGateway(payload, options) {\r\n return callAthena(normalizedConfig, \"/gateway/query\", \"POST\", payload, options);\r\n },\r\n };\r\n}\r\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\r\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\r\n/**\r\n * Quotes a `schema.table.column`-style identifier path safely for SQL.\r\n */\r\nexport function quoteQualifiedIdentifier(identifier: string): string {\r\n return identifier\r\n .split('.')\r\n .map(segment => quoteIdentifierSegment(segment))\r\n .join('.')\r\n}\r\n\r\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\r\nfunction splitTopLevelCommaSeparated(input: string): string[] | null {\r\n const parts: string[] = []\r\n let buffer = ''\r\n let singleQuoted = false\r\n let doubleQuoted = false\r\n let depth = 0\r\n\r\n for (let index = 0; index < input.length; index += 1) {\r\n const char = input[index]\r\n const next = index + 1 < input.length ? input[index + 1] : ''\r\n\r\n if (singleQuoted) {\r\n buffer += char\r\n if (char === \"'\" && next === \"'\") {\r\n buffer += next\r\n index += 1\r\n continue\r\n }\r\n if (char === \"'\") {\r\n singleQuoted = false\r\n }\r\n continue\r\n }\r\n\r\n if (doubleQuoted) {\r\n buffer += char\r\n if (char === '\"' && next === '\"') {\r\n buffer += next\r\n index += 1\r\n continue\r\n }\r\n if (char === '\"') {\r\n doubleQuoted = false\r\n }\r\n continue\r\n }\r\n\r\n if (char === \"'\") {\r\n singleQuoted = true\r\n buffer += char\r\n continue\r\n }\r\n if (char === '\"') {\r\n doubleQuoted = true\r\n buffer += char\r\n continue\r\n }\r\n\r\n if (char === '(') {\r\n depth += 1\r\n buffer += char\r\n continue\r\n }\r\n if (char === ')') {\r\n depth -= 1\r\n if (depth < 0) return null\r\n buffer += char\r\n continue\r\n }\r\n\r\n if (char === ',' && depth === 0) {\r\n parts.push(buffer.trim())\r\n buffer = ''\r\n continue\r\n }\r\n\r\n buffer += char\r\n }\r\n\r\n if (singleQuoted || doubleQuoted || depth !== 0) {\r\n return null\r\n }\r\n\r\n if (buffer.trim().length > 0) {\r\n parts.push(buffer.trim())\r\n }\r\n\r\n return parts\r\n}\r\n\r\n/**\r\n * Quotes identifier lists while preserving raw SQL expressions.\r\n *\r\n * Examples:\r\n * - `\"table, user\"` -> `\"\\\"table\\\", \\\"user\\\"\"`\r\n * - `concat(name, ',') as label, id` -> unchanged\r\n */\r\nexport function quoteSelectColumnsExpression(columns: string): string {\r\n const trimmed = columns.trim()\r\n if (!trimmed || trimmed === '*') return trimmed || '*'\r\n\r\n const tokens = splitTopLevelCommaSeparated(trimmed)\r\n if (!tokens || tokens.length === 0) {\r\n return trimmed\r\n }\r\n\r\n if (!tokens.every(canAutoQuoteToken)) {\r\n return trimmed\r\n }\r\n\r\n return tokens.map(quoteSelectToken).join(', ')\r\n}\r\n\r\n/**\r\n * Immutable identifier object with consistent SQL rendering.\r\n */\r\nexport interface SqlIdentifier {\r\n readonly segments: string[]\r\n toSql(): string\r\n toString(): string\r\n}\r\n\r\nclass SqlIdentifierPath implements SqlIdentifier {\r\n readonly segments: string[]\r\n\r\n constructor(segments: string[]) {\r\n this.segments = segments\r\n }\r\n\r\n toSql(): string {\r\n return this.segments.map(quoteIdentifierSegment).join('.')\r\n }\r\n\r\n toString(): string {\r\n return this.toSql()\r\n }\r\n}\r\n\r\n/**\r\n * Creates a quoted identifier object from segment or dotted inputs.\r\n */\r\nexport function identifier(...segments: string[]): SqlIdentifier {\r\n const expandedSegments = segments\r\n .flatMap(segment => segment.split('.'))\r\n .map(segment => segment.trim())\r\n .filter(segment => segment.length > 0)\r\n\r\n return new SqlIdentifierPath(expandedSegments)\r\n}\r\n\r\n","import type {\r\n AthenaAuthEmailTemplateBuilder,\r\n AthenaAuthEmailTemplateCreateFromDefinitionInput,\r\n AthenaAuthEmailTemplateDefinition,\r\n AthenaAuthEmailTemplateUpdateFromDefinitionInput,\r\n AthenaAuthLooseRecord,\r\n AthenaAuthReactEmailComponent,\r\n AthenaAuthReactEmailConfig,\r\n AthenaAuthReactEmailEventPhase,\r\n AthenaAuthReactEmailProps,\r\n AthenaAuthReactEmailRenderEvent,\r\n AthenaAuthReactEmailRenderInput,\r\n AthenaAuthReactEmailRenderOptions,\r\n} from './types.ts'\r\n\r\ntype ReactEmailRenderModule = {\r\n render: (element: unknown) => string | Promise<string>\r\n toPlainText?: (html: string) => string | Promise<string>\r\n pretty?: (html: string) => string | Promise<string>\r\n}\r\n\r\nexport interface AthenaAuthRenderedReactEmail {\r\n html: string\r\n text?: string\r\n}\r\n\r\nexport interface AthenaAuthReactEmailPayload {\r\n react?: AthenaAuthReactEmailRenderInput\r\n}\r\n\r\nexport interface AthenaAuthReactEmailRuntimeOptions {\r\n route?: string\r\n defaults?: AthenaAuthReactEmailRenderOptions\r\n observe?: (event: AthenaAuthReactEmailRenderEvent) => void\r\n}\r\n\r\ninterface ResolvePayloadFieldsInput {\r\n htmlField: string\r\n textField: string\r\n variablesField?: string\r\n}\r\n\r\nlet reactEmailRenderModulePromise: Promise<ReactEmailRenderModule> | undefined\r\n\r\nfunction isRecord(value: unknown): value is AthenaAuthLooseRecord {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction isFunction(value: unknown): value is (...args: unknown[]) => unknown {\r\n return typeof value === 'function'\r\n}\r\n\r\nfunction toStringOrUndefined(value: unknown): string | undefined {\r\n if (typeof value !== 'string') return undefined\r\n return value\r\n}\r\n\r\nfunction nowIsoString() {\r\n return new Date().toISOString()\r\n}\r\n\r\nfunction emitReactEmailEvent(\r\n observe: ((event: AthenaAuthReactEmailRenderEvent) => void) | undefined,\r\n phase: AthenaAuthReactEmailEventPhase,\r\n input: Omit<AthenaAuthReactEmailRenderEvent, 'phase' | 'timestamp'> = {},\r\n) {\r\n if (!observe) return\r\n try {\r\n observe({\r\n phase,\r\n timestamp: nowIsoString(),\r\n ...input,\r\n })\r\n } catch {\r\n // Observability hooks are non-blocking.\r\n }\r\n}\r\n\r\nfunction mergeRenderDefaults(\r\n input: AthenaAuthReactEmailRenderInput,\r\n defaults?: AthenaAuthReactEmailRenderOptions,\r\n): AthenaAuthReactEmailRenderInput {\r\n return {\r\n ...input,\r\n pretty: input.pretty ?? defaults?.pretty,\r\n includePlainText: input.includePlainText ?? defaults?.includePlainText,\r\n }\r\n}\r\n\r\nfunction mergeRuntimeOptions(\r\n options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig,\r\n): AthenaAuthReactEmailRuntimeOptions | undefined {\r\n if (!options) return undefined\r\n return {\r\n defaults: options.defaults,\r\n observe: options.observe,\r\n route: 'route' in options ? options.route : undefined,\r\n }\r\n}\r\n\r\nasync function resolveReactEmailRenderModule(): Promise<ReactEmailRenderModule> {\r\n if (!reactEmailRenderModulePromise) {\r\n reactEmailRenderModulePromise = (async () => {\r\n try {\r\n const loaded = await import('@react-email/render')\r\n if (!isFunction(loaded.render)) {\r\n throw new Error('missing render(...) export')\r\n }\r\n return {\r\n render: loaded.render as ReactEmailRenderModule['render'],\r\n toPlainText: isFunction(loaded.toPlainText)\r\n ? (loaded.toPlainText as ReactEmailRenderModule['toPlainText'])\r\n : undefined,\r\n pretty: isFunction(loaded.pretty)\r\n ? (loaded.pretty as ReactEmailRenderModule['pretty'])\r\n : undefined,\r\n }\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : String(error)\r\n throw new Error(\r\n `React Email rendering requires @react-email/render. Install it in your project (for example: pnpm add @react-email/render). Loader error: ${message}`,\r\n )\r\n }\r\n })()\r\n }\r\n\r\n if (!reactEmailRenderModulePromise) {\r\n throw new Error('React Email renderer module failed to initialize')\r\n }\r\n\r\n return reactEmailRenderModulePromise\r\n}\r\n\r\nasync function resolveReactEmailElement(input: AthenaAuthReactEmailRenderInput): Promise<unknown> {\r\n if (input.element != null) {\r\n return input.element\r\n }\r\n if (!input.component) {\r\n throw new Error('react email payload requires either `element` or `component`')\r\n }\r\n\r\n try {\r\n const reactModule = await import('react')\r\n if (typeof reactModule.createElement !== 'function') {\r\n throw new Error('react createElement(...) export is unavailable')\r\n }\r\n return reactModule.createElement(\r\n input.component as Parameters<typeof reactModule.createElement>[0],\r\n input.props ?? {},\r\n )\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : String(error)\r\n throw new Error(\r\n `React Email component rendering requires react runtime support. Install react in your project. Loader error: ${message}`,\r\n )\r\n }\r\n}\r\n\r\nexport function createAuthReactEmailInput<\r\n TProps extends AthenaAuthReactEmailProps = AthenaAuthReactEmailProps,\r\n>(\r\n component: AthenaAuthReactEmailComponent<TProps>,\r\n props: TProps,\r\n overrides: Omit<AthenaAuthReactEmailRenderInput, 'component' | 'props' | 'element'> = {},\r\n): AthenaAuthReactEmailRenderInput {\r\n return {\r\n ...overrides,\r\n component: component as AthenaAuthReactEmailComponent,\r\n props,\r\n }\r\n}\r\n\r\nexport function defineAuthEmailTemplate<\r\n TProps extends AthenaAuthReactEmailProps = AthenaAuthReactEmailProps,\r\n>(\r\n definition: AthenaAuthEmailTemplateDefinition<TProps>,\r\n): AthenaAuthEmailTemplateBuilder<TProps> {\r\n const react: AthenaAuthEmailTemplateBuilder<TProps>['react'] = (props, overrides) =>\r\n createAuthReactEmailInput(definition.component, props, {\r\n ...definition.defaults,\r\n ...overrides,\r\n })\r\n\r\n return {\r\n component: definition.component,\r\n react,\r\n toTemplateCreate: (input: AthenaAuthEmailTemplateCreateFromDefinitionInput<TProps>) => {\r\n const templateKey = input.templateKey ?? definition.templateKey\r\n const subjectTemplate = input.subjectTemplate ?? definition.subjectTemplate\r\n if (!templateKey) {\r\n throw new Error('defineAuthEmailTemplate.toTemplateCreate requires templateKey')\r\n }\r\n if (!subjectTemplate) {\r\n throw new Error('defineAuthEmailTemplate.toTemplateCreate requires subjectTemplate')\r\n }\r\n\r\n const { props, react: reactOverrides, ...rest } = input\r\n return {\r\n ...rest,\r\n templateKey,\r\n subjectTemplate,\r\n react: react(props, reactOverrides),\r\n }\r\n },\r\n toTemplateUpdate: (input: AthenaAuthEmailTemplateUpdateFromDefinitionInput<TProps>) => {\r\n const { props, react: reactOverrides, ...rest } = input\r\n return {\r\n ...rest,\r\n react: react(props, reactOverrides),\r\n }\r\n },\r\n }\r\n}\r\n\r\nexport async function renderAthenaReactEmail(\r\n input: AthenaAuthReactEmailRenderInput,\r\n options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig,\r\n): Promise<AthenaAuthRenderedReactEmail> {\r\n if (!isRecord(input)) {\r\n throw new Error('react email payload must be an object')\r\n }\r\n\r\n const runtimeOptions = mergeRuntimeOptions(options)\r\n const start = Date.now()\r\n emitReactEmailEvent(runtimeOptions?.observe, 'render:start', {\r\n route: runtimeOptions?.route,\r\n message: 'Rendering react email payload',\r\n })\r\n\r\n try {\r\n const normalizedInput = mergeRenderDefaults(input, runtimeOptions?.defaults)\r\n const element = await resolveReactEmailElement(normalizedInput)\r\n const renderModule = await resolveReactEmailRenderModule()\r\n const htmlValue = await renderModule.render(element)\r\n const renderedHtml = typeof htmlValue === 'string' ? htmlValue : String(htmlValue ?? '')\r\n if (!renderedHtml.trim()) {\r\n throw new Error('react email renderer returned an empty HTML string')\r\n }\r\n\r\n let html = renderedHtml\r\n if (normalizedInput.pretty && renderModule.pretty) {\r\n const prettyValue = await renderModule.pretty(renderedHtml)\r\n if (typeof prettyValue === 'string' && prettyValue.trim().length > 0) {\r\n html = prettyValue\r\n }\r\n }\r\n\r\n const explicitText = toStringOrUndefined(normalizedInput.text)\r\n if (explicitText !== undefined) {\r\n emitReactEmailEvent(runtimeOptions?.observe, 'render:success', {\r\n route: runtimeOptions?.route,\r\n durationMs: Date.now() - start,\r\n message: 'Rendered react email with explicit text',\r\n })\r\n return {\r\n html,\r\n text: explicitText,\r\n }\r\n }\r\n\r\n if (normalizedInput.includePlainText === false || !renderModule.toPlainText) {\r\n emitReactEmailEvent(runtimeOptions?.observe, 'render:success', {\r\n route: runtimeOptions?.route,\r\n durationMs: Date.now() - start,\r\n message: 'Rendered react email without plain-text derivation',\r\n })\r\n return { html }\r\n }\r\n\r\n const plainTextValue = await renderModule.toPlainText(html)\r\n const plainText = toStringOrUndefined(plainTextValue)\r\n emitReactEmailEvent(runtimeOptions?.observe, 'render:success', {\r\n route: runtimeOptions?.route,\r\n durationMs: Date.now() - start,\r\n message: plainText ? 'Rendered react email with derived plain text' : 'Rendered react email HTML only',\r\n })\r\n if (plainText === undefined) {\r\n return { html }\r\n }\r\n\r\n return {\r\n html,\r\n text: plainText,\r\n }\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : String(error)\r\n emitReactEmailEvent(runtimeOptions?.observe, 'render:error', {\r\n route: runtimeOptions?.route,\r\n durationMs: Date.now() - start,\r\n error: message,\r\n message: 'Failed to render react email payload',\r\n })\r\n throw error\r\n }\r\n}\r\n\r\nexport async function resolveReactEmailPayloadFields<\r\n TInput extends AthenaAuthReactEmailPayload,\r\n>(\r\n input: TInput,\r\n fields: ResolvePayloadFieldsInput,\r\n options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig,\r\n): Promise<Omit<TInput, 'react'>> {\r\n const { react, ...payloadWithoutReact } = input\r\n if (!react) {\r\n return payloadWithoutReact as Omit<TInput, 'react'>\r\n }\r\n\r\n const rendered = await renderAthenaReactEmail(react, options)\r\n const payload: AthenaAuthLooseRecord = {\r\n ...(payloadWithoutReact as AthenaAuthLooseRecord),\r\n }\r\n\r\n payload[fields.htmlField] = rendered.html\r\n\r\n const currentTextValue = payload[fields.textField]\r\n if (\r\n rendered.text !== undefined &&\r\n (currentTextValue === undefined || currentTextValue === null || currentTextValue === '')\r\n ) {\r\n payload[fields.textField] = rendered.text\r\n }\r\n\r\n if (\r\n fields.variablesField &&\r\n (payload[fields.variablesField] === undefined || payload[fields.variablesField] === null) &&\r\n isRecord(react.props)\r\n ) {\r\n const derivedVariables = Object.keys(react.props)\r\n if (derivedVariables.length > 0) {\r\n payload[fields.variablesField] = derivedVariables\r\n }\r\n }\r\n\r\n return payload as Omit<TInput, 'react'>\r\n}\r\n","import type {\r\n AthenaAdminRevokeUserSessionRequest,\r\n AthenaAdminRevokeUserSessionsRequest,\r\n AthenaAdminSuccessResponse,\r\n AthenaAdminHasPermissionResponse,\r\n AthenaApiKeyDeleteAllExpiredResponse,\r\n AthenaAuthCallOptions,\r\n AthenaAuthClientConfig,\r\n AthenaAuthEndpointPath,\r\n AthenaAuthErrorCode,\r\n AthenaAuthErrorDetails,\r\n AthenaAuthFetchCompatibleInput,\r\n AthenaAuthGenericInput,\r\n AthenaAuthGenericQueryInput,\r\n AthenaAuthBindings,\r\n AthenaAuthEmailListQuery,\r\n AthenaAuthEmailListResponse,\r\n AthenaAuthHealthResponse,\r\n AthenaAuthOkResponse,\r\n AthenaAuthLinkedAccount,\r\n AthenaAuthOrganizationBindings,\r\n AthenaAuthOrganization,\r\n AthenaAuthOrganizationCheckSlugRequest,\r\n AthenaAuthOrganizationCreateRequest,\r\n AthenaAuthOrganizationDeleteRequest,\r\n AthenaAuthOrganizationGetFullQuery,\r\n AthenaAuthOrganizationGetInvitationQuery,\r\n AthenaAuthOrganizationInvitation,\r\n AthenaAuthOrganizationInvitationActionRequest,\r\n AthenaAuthOrganizationInviteMemberRequest,\r\n AthenaAuthOrganizationLeaveRequest,\r\n AthenaAuthOrganizationListInvitationsQuery,\r\n AthenaAuthOrganizationListMembersQuery,\r\n AthenaAuthOrganizationListUserInvitationsQuery,\r\n AthenaAuthOrganizationMember,\r\n AthenaAuthOrganizationRemoveMemberRequest,\r\n AthenaAuthOrganizationSetActiveRequest,\r\n AthenaAuthOrganizationUpdateMemberRoleRequest,\r\n AthenaAuthOrganizationUpdateRequest,\r\n AthenaAuthMethod,\r\n AthenaAuthQueryValue,\r\n AthenaAuthRequestInput,\r\n AthenaAuthReactEmailRenderInput,\r\n AthenaAuthResult,\r\n AthenaAuthSdkClient,\r\n AthenaAuthSession,\r\n AthenaAuthSessionResponse,\r\n AthenaAuthSignInResponse,\r\n AthenaAuthSignOutResponse,\r\n AthenaAuthSocialRedirectResponse,\r\n AthenaAuthStatusResponse,\r\n AthenaAuthUser,\r\n AthenaChangeEmailRequest,\r\n AthenaChangePasswordRequest,\r\n AthenaDeleteUserCallbackRequest,\r\n AthenaDeleteUserRequest,\r\n AthenaDeleteUserResponse,\r\n AthenaEmailSignInRequest,\r\n AthenaEmailSignUpRequest,\r\n AthenaForgetPasswordRequest,\r\n AthenaLinkSocialRequest,\r\n AthenaOAuthAccountTokenRequest,\r\n AthenaOAuthTokenBundle,\r\n AthenaResetPasswordRequest,\r\n AthenaSendVerificationEmailRequest,\r\n AthenaSocialSignInRequest,\r\n AthenaTwoFactorGenerateBackupCodesRequest,\r\n AthenaTwoFactorGenerateBackupCodesResponse,\r\n AthenaUnlinkAccountRequest,\r\n AthenaUpdateUserRequest,\r\n AthenaVerifyEmailRequest,\r\n AthenaUsernameSignInRequest,\r\n} from './types.ts'\r\nimport { resolveReactEmailPayloadFields } from './react-email.ts'\r\n\r\nconst DEFAULT_AUTH_BASE_URL = 'http://localhost:3001/api/auth'\r\nconst FALLBACK_SDK_VERSION = '1.0.0'\r\nconst SDK_NAME = 'xylex-group/athena-auth'\r\n\r\nconst SDK_VERSION =\r\n typeof process !== 'undefined' && process?.env?.npm_package_version\r\n ? process.env.npm_package_version\r\n : FALLBACK_SDK_VERSION\r\nconst SDK_HEADER_VALUE = `${SDK_NAME} ${SDK_VERSION}`\r\n\r\ntype AuthRequestContext = {\r\n endpoint: AthenaAuthEndpointPath\r\n method: AthenaAuthMethod\r\n}\r\n\r\ntype InternalErrorInput = AuthRequestContext & {\r\n code: AthenaAuthErrorCode\r\n status: number\r\n message: string\r\n requestId?: string\r\n hint?: string\r\n cause?: string\r\n}\r\n\r\nfunction normalizeBaseUrl(baseUrl?: string): string {\r\n return (baseUrl ?? DEFAULT_AUTH_BASE_URL).replace(/\\/$/, '')\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction normalizeHeaderValue(value?: string | null): string | undefined {\r\n return value ? value : undefined\r\n}\r\n\r\nfunction parseResponseBody(rawText: string, contentType: string | null) {\r\n if (!rawText) {\r\n return { parsed: null as unknown, parseFailed: false }\r\n }\r\n\r\n const contentTypeSuggestsJson =\r\n contentType?.toLowerCase().includes('application/json') ?? false\r\n const looksJson =\r\n contentTypeSuggestsJson || rawText.startsWith('{') || rawText.startsWith('[')\r\n\r\n if (!looksJson) {\r\n return { parsed: rawText as unknown, parseFailed: false }\r\n }\r\n\r\n try {\r\n return { parsed: JSON.parse(rawText) as unknown, parseFailed: false }\r\n } catch {\r\n return { parsed: rawText as unknown, parseFailed: true }\r\n }\r\n}\r\n\r\nfunction resolveRequestId(headers: Headers): string | undefined {\r\n return (\r\n headers.get('x-request-id') ??\r\n headers.get('x-correlation-id') ??\r\n headers.get('x-athena-request-id') ??\r\n undefined\r\n )\r\n}\r\n\r\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\r\n if (isRecord(payload)) {\r\n const messageCandidates = [payload.error, payload.message, payload.details]\r\n for (const candidate of messageCandidates) {\r\n if (typeof candidate === 'string' && candidate.trim().length > 0) {\r\n return candidate.trim()\r\n }\r\n }\r\n }\r\n\r\n if (typeof payload === 'string' && payload.trim().length > 0) {\r\n return payload.trim()\r\n }\r\n\r\n return fallback\r\n}\r\n\r\nfunction toErrorDetails(input: InternalErrorInput): AthenaAuthErrorDetails {\r\n return {\r\n code: input.code,\r\n message: input.message,\r\n status: input.status,\r\n endpoint: input.endpoint,\r\n method: input.method,\r\n requestId: input.requestId,\r\n hint: input.hint,\r\n cause: input.cause,\r\n }\r\n}\r\n\r\nfunction mergeCallOptions(\r\n base?: AthenaAuthCallOptions,\r\n override?: AthenaAuthCallOptions,\r\n): AthenaAuthCallOptions | undefined {\r\n if (!base && !override) return undefined\r\n return {\r\n ...base,\r\n ...override,\r\n headers: {\r\n ...(base?.headers ?? {}),\r\n ...(override?.headers ?? {}),\r\n },\r\n }\r\n}\r\n\r\nfunction extractFetchOptions<T extends AthenaAuthFetchCompatibleInput | undefined>(input: T) {\r\n if (!input) {\r\n return {\r\n payload: undefined,\r\n fetchOptions: undefined,\r\n }\r\n }\r\n\r\n const { fetchOptions, ...rest } = input\r\n const hasPayloadKeys = Object.keys(rest).length > 0\r\n return {\r\n payload: hasPayloadKeys ? rest : undefined,\r\n fetchOptions,\r\n }\r\n}\r\n\r\nfunction buildHeaders(\r\n config: AthenaAuthClientConfig,\r\n options?: AthenaAuthCallOptions,\r\n): Record<string, string> {\r\n const headers: Record<string, string> = {\r\n 'Content-Type': 'application/json',\r\n 'X-Athena-Sdk': SDK_HEADER_VALUE,\r\n }\r\n\r\n const apiKey = options?.apiKey ?? config.apiKey\r\n if (apiKey) {\r\n headers.apikey = apiKey\r\n headers['x-api-key'] = apiKey\r\n }\r\n\r\n const bearerToken = options?.bearerToken ?? config.bearerToken\r\n if (bearerToken) {\r\n headers.Authorization = `Bearer ${bearerToken}`\r\n }\r\n\r\n const mergedExtraHeaders = {\r\n ...(config.headers ?? {}),\r\n ...(options?.headers ?? {}),\r\n }\r\n\r\n Object.entries(mergedExtraHeaders).forEach(([key, value]) => {\r\n const normalized = normalizeHeaderValue(value)\r\n if (normalized) {\r\n headers[key] = normalized\r\n }\r\n })\r\n\r\n return headers\r\n}\r\n\r\nfunction appendQueryParam(searchParams: URLSearchParams, key: string, value: AthenaAuthQueryValue) {\r\n if (value === undefined || value === null) return\r\n if (Array.isArray(value)) {\r\n value.forEach(item => {\r\n searchParams.append(key, String(item))\r\n })\r\n return\r\n }\r\n searchParams.append(key, String(value))\r\n}\r\n\r\nfunction buildRequestUrl(\r\n baseUrl: string,\r\n endpoint: AthenaAuthEndpointPath,\r\n query?: Record<string, AthenaAuthQueryValue>,\r\n) {\r\n const url = `${baseUrl}${endpoint}`\r\n if (!query || Object.keys(query).length === 0) return url\r\n const searchParams = new URLSearchParams()\r\n Object.entries(query).forEach(([key, value]) => appendQueryParam(searchParams, key, value))\r\n const queryText = searchParams.toString()\r\n return queryText ? `${url}?${queryText}` : url\r\n}\r\n\r\nfunction inferDefaultMethod(endpoint: AthenaAuthEndpointPath): AthenaAuthMethod {\r\n if (endpoint.startsWith('/reset-password/')) {\r\n return 'GET'\r\n }\r\n\r\n switch (endpoint) {\r\n case '/get-session':\r\n case '/list-sessions':\r\n case '/verify-email':\r\n case '/change-email/verify':\r\n case '/delete-user/verify':\r\n case '/email-list':\r\n case '/email/list':\r\n case '/delete-user/callback':\r\n case '/list-accounts':\r\n case '/passkey/generate-register-options':\r\n case '/passkey/list-user-passkeys':\r\n case '/.well-known/webauthn':\r\n case '/admin/list-users':\r\n case '/admin/athena-client/list':\r\n case '/admin/audit-log/list':\r\n case '/admin/email/get':\r\n case '/admin/email-failure/list':\r\n case '/admin/email-failure/get':\r\n case '/admin/email-template/get':\r\n case '/admin/email-template/list':\r\n case '/admin/email/list':\r\n case '/api-key/get':\r\n case '/api-key/list':\r\n case '/organization/get-full-organization':\r\n case '/organization/list':\r\n case '/organization/get-invitation':\r\n case '/organization/list-invitations':\r\n case '/organization/list-user-invitations':\r\n case '/organization/list-members':\r\n case '/organization/get-active-member':\r\n case '/health':\r\n case '/ok':\r\n case '/error':\r\n return 'GET'\r\n default:\r\n return 'POST'\r\n }\r\n}\r\n\r\nasync function callAuthEndpoint<T>(\r\n config: AthenaAuthClientConfig,\r\n context: AuthRequestContext,\r\n body?: unknown,\r\n query?: Record<string, AthenaAuthQueryValue>,\r\n options?: AthenaAuthCallOptions,\r\n): Promise<AthenaAuthResult<T>> {\r\n const baseUrl = normalizeBaseUrl(options?.baseUrl ?? config.baseUrl)\r\n const url = buildRequestUrl(baseUrl, context.endpoint, query)\r\n const headers = buildHeaders(config, options)\r\n const credentials = options?.credentials ?? config.credentials ?? 'include'\r\n const requestInit: RequestInit = {\r\n method: context.method,\r\n headers,\r\n credentials,\r\n signal: options?.signal,\r\n }\r\n\r\n if (context.method !== 'GET') {\r\n requestInit.body = JSON.stringify(body ?? {})\r\n }\r\n\r\n const fetcher = config.fetch ?? globalThis.fetch\r\n if (!fetcher) {\r\n const details = toErrorDetails({\r\n code: 'UNKNOWN_ERROR',\r\n message: 'No fetch implementation available for auth client',\r\n status: 0,\r\n endpoint: context.endpoint,\r\n method: context.method,\r\n hint: 'Use Node 18+ or provide `fetch` via createClient(..., { auth: { fetch } }) or createAuthClient({ fetch })',\r\n })\r\n return {\r\n ok: false,\r\n status: 0,\r\n data: null,\r\n error: details.message,\r\n errorDetails: details,\r\n raw: null,\r\n }\r\n }\r\n\r\n try {\r\n const response = await fetcher(url, requestInit)\r\n const rawText = await response.text()\r\n const requestId = resolveRequestId(response.headers)\r\n const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\r\n\r\n if (parsedBody.parseFailed) {\r\n const details = toErrorDetails({\r\n code: 'INVALID_JSON',\r\n message: 'Auth server returned malformed JSON',\r\n status: response.status,\r\n endpoint: context.endpoint,\r\n method: context.method,\r\n requestId,\r\n hint: 'Verify the auth endpoint response body is valid JSON.',\r\n cause: rawText.slice(0, 300),\r\n })\r\n return {\r\n ok: false,\r\n status: response.status,\r\n data: null,\r\n error: details.message,\r\n errorDetails: details,\r\n raw: parsedBody.parsed,\r\n }\r\n }\r\n\r\n const parsed = parsedBody.parsed\r\n\r\n if (!response.ok) {\r\n const details = toErrorDetails({\r\n code: 'HTTP_ERROR',\r\n message: resolveErrorMessage(\r\n parsed,\r\n `Auth endpoint ${context.method} ${context.endpoint} failed with status ${response.status}`,\r\n ),\r\n status: response.status,\r\n endpoint: context.endpoint,\r\n method: context.method,\r\n requestId,\r\n })\r\n return {\r\n ok: false,\r\n status: response.status,\r\n data: null,\r\n error: details.message,\r\n errorDetails: details,\r\n raw: parsed,\r\n }\r\n }\r\n\r\n return {\r\n ok: true,\r\n status: response.status,\r\n data: (parsed as T) ?? null,\r\n error: null,\r\n errorDetails: null,\r\n raw: parsed,\r\n }\r\n } catch (callError) {\r\n const message = callError instanceof Error ? callError.message : String(callError)\r\n const details = toErrorDetails({\r\n code: 'NETWORK_ERROR',\r\n message: `Network error while calling ${context.method} ${context.endpoint}: ${message}`,\r\n status: 0,\r\n endpoint: context.endpoint,\r\n method: context.method,\r\n cause: message,\r\n hint: 'Check auth server URL, DNS, and network reachability.',\r\n })\r\n return {\r\n ok: false,\r\n status: 0,\r\n data: null,\r\n error: details.message,\r\n errorDetails: details,\r\n raw: null,\r\n }\r\n }\r\n}\r\n\r\nfunction executePostWithCompatibleInput<TPayload extends AthenaAuthFetchCompatibleInput, TResult>(\r\n config: AthenaAuthClientConfig,\r\n context: AuthRequestContext,\r\n input: TPayload,\r\n options?: AthenaAuthCallOptions,\r\n) {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n return callAuthEndpoint<TResult>(config, context, payload ?? {}, undefined, mergedOptions)\r\n}\r\n\r\nfunction executePostWithOptionalInput<TResult>(\r\n config: AthenaAuthClientConfig,\r\n context: AuthRequestContext,\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n) {\r\n const { fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n return callAuthEndpoint<TResult>(config, context, {}, undefined, mergedOptions)\r\n}\r\n\r\nfunction executeGetWithCompatibleInput<TResult>(\r\n config: AthenaAuthClientConfig,\r\n context: AuthRequestContext,\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n) {\r\n const { fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n return callAuthEndpoint<TResult>(config, context, undefined, undefined, mergedOptions)\r\n}\r\n\r\nfunction executeGetWithQueryCompatibleInput<\r\n TQuery extends object,\r\n TResult,\r\n>(\r\n config: AthenaAuthClientConfig,\r\n context: AuthRequestContext,\r\n input?: { query?: TQuery } & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n) {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n const query = (payload as { query?: Record<string, AthenaAuthQueryValue> } | undefined)?.query\r\n return callAuthEndpoint<TResult>(\r\n config,\r\n context,\r\n undefined,\r\n query,\r\n mergedOptions,\r\n )\r\n}\r\n\r\n/**\r\n * @deprecated Prefer `createClient(...).auth` from `@xylex-group/athena`.\r\n */\r\nexport function createAuthClient(config: AthenaAuthClientConfig = {}): AthenaAuthSdkClient {\r\n const normalizedBaseUrl = normalizeBaseUrl(config.baseUrl)\r\n const resolvedConfig: AthenaAuthClientConfig = {\r\n ...config,\r\n baseUrl: normalizedBaseUrl,\r\n }\r\n\r\n const request = <T = unknown>(\r\n input: AthenaAuthRequestInput,\r\n options?: AthenaAuthCallOptions,\r\n ): Promise<AthenaAuthResult<T>> => {\r\n const method = input.method ?? (input.body !== undefined ? 'POST' : inferDefaultMethod(input.endpoint))\r\n const mergedOptions = mergeCallOptions(input.fetchOptions, options)\r\n return callAuthEndpoint<T>(\r\n resolvedConfig,\r\n { endpoint: input.endpoint, method },\r\n input.body,\r\n input.query,\r\n mergedOptions,\r\n )\r\n }\r\n\r\n const postGeneric = <T = unknown>(\r\n endpoint: AthenaAuthEndpointPath,\r\n input?: (AthenaAuthFetchCompatibleInput & object),\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n return request<T>(\r\n {\r\n endpoint,\r\n method: 'POST',\r\n body: payload ?? {},\r\n fetchOptions,\r\n },\r\n options,\r\n )\r\n }\r\n\r\n const getGeneric = <T = unknown>(\r\n endpoint: AthenaAuthEndpointPath,\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { fetchOptions } = extractFetchOptions(input)\r\n return request<T>(\r\n {\r\n endpoint,\r\n method: 'GET',\r\n fetchOptions,\r\n },\r\n options,\r\n )\r\n }\r\n\r\n const getWithQuery = <\r\n T = unknown,\r\n TQuery extends object = Record<string, AthenaAuthQueryValue>,\r\n >(\r\n endpoint: AthenaAuthEndpointPath,\r\n input?: AthenaAuthFetchCompatibleInput & {\r\n query?: TQuery\r\n },\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const query = (payload as { query?: TQuery } | undefined)?.query as\r\n | Record<string, AthenaAuthQueryValue>\r\n | undefined\r\n return request<T>(\r\n {\r\n endpoint,\r\n method: 'GET',\r\n query,\r\n fetchOptions,\r\n },\r\n options,\r\n )\r\n }\r\n\r\n const withReactEmailRoute = (route: AthenaAuthEndpointPath) => ({\r\n ...resolvedConfig.reactEmail,\r\n route,\r\n })\r\n\r\n const resolveAdminEmailPayload = <TInput extends AthenaAuthFetchCompatibleInput & {\r\n react?: AthenaAuthReactEmailRenderInput\r\n }>(\r\n route: '/admin/email/create' | '/admin/email/update',\r\n input: TInput,\r\n ) =>\r\n resolveReactEmailPayloadFields(input, {\r\n htmlField: 'htmlBody',\r\n textField: 'textBody',\r\n }, withReactEmailRoute(route))\r\n\r\n const resolveAdminEmailTemplatePayload = <TInput extends AthenaAuthFetchCompatibleInput & {\r\n react?: AthenaAuthReactEmailRenderInput\r\n }>(\r\n route: '/admin/email-template/create' | '/admin/email-template/update',\r\n input: TInput,\r\n ) =>\r\n resolveReactEmailPayloadFields(input, {\r\n htmlField: 'htmlTemplate',\r\n textField: 'textTemplate',\r\n variablesField: 'variables',\r\n }, withReactEmailRoute(route))\r\n\r\n const listUserEmailsWithFallback: AthenaAuthBindings['user']['email']['list'] = async (input, options) => {\r\n const primary = await getWithQuery<AthenaAuthEmailListResponse, AthenaAuthEmailListQuery>(\r\n '/email/list',\r\n input,\r\n options,\r\n )\r\n if (primary.ok || primary.status !== 404 || primary.errorDetails?.code !== 'HTTP_ERROR') {\r\n return primary\r\n }\r\n return getWithQuery<AthenaAuthEmailListResponse, AthenaAuthEmailListQuery>(\r\n '/email-list',\r\n input,\r\n options,\r\n )\r\n }\r\n\r\n const healthWithFallback: AthenaAuthBindings['health'] = async (input, options) => {\r\n const primary = await getGeneric<AthenaAuthHealthResponse>('/health', input, options)\r\n if (primary.ok || primary.status !== 404 || primary.errorDetails?.code !== 'HTTP_ERROR') {\r\n return primary\r\n }\r\n\r\n const fallback = await getGeneric<AthenaAuthOkResponse>('/ok', input, options)\r\n if (!fallback.ok) {\r\n return {\r\n ...fallback,\r\n data: null,\r\n }\r\n }\r\n\r\n const fallbackStatus =\r\n isRecord(fallback.data) && typeof fallback.data.ok === 'boolean'\r\n ? (fallback.data.ok ? 'ok' : 'error')\r\n : 'ok'\r\n\r\n return {\r\n ...fallback,\r\n data: {\r\n status: fallbackStatus,\r\n },\r\n }\r\n }\r\n\r\n const signOut = (\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithOptionalInput<AthenaAuthSignOutResponse>(\r\n resolvedConfig,\r\n { endpoint: '/sign-out', method: 'POST' },\r\n input,\r\n options,\r\n )\r\n\r\n const revokeSessions = (\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithOptionalInput<AthenaAuthStatusResponse>(\r\n resolvedConfig,\r\n { endpoint: '/revoke-sessions', method: 'POST' },\r\n input,\r\n options,\r\n )\r\n\r\n const revokeOtherSessions = (\r\n input?: AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithOptionalInput<AthenaAuthStatusResponse>(\r\n resolvedConfig,\r\n { endpoint: '/revoke-other-sessions', method: 'POST' },\r\n input,\r\n options,\r\n )\r\n\r\n const revokeSession = (\r\n input: { token: string } & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<typeof input, AthenaAuthStatusResponse>(\r\n resolvedConfig,\r\n { endpoint: '/revoke-session', method: 'POST' },\r\n input,\r\n options,\r\n )\r\n\r\n const deleteUser = (\r\n input?: AthenaDeleteUserRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n return callAuthEndpoint<AthenaDeleteUserResponse>(\r\n resolvedConfig,\r\n { endpoint: '/delete-user', method: 'POST' },\r\n payload ?? {},\r\n undefined,\r\n mergedOptions,\r\n )\r\n }\r\n\r\n const deleteUserCallback = (\r\n input?: AthenaDeleteUserCallbackRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n const query = (payload ?? {}) as AthenaDeleteUserCallbackRequest\r\n return callAuthEndpoint<AthenaDeleteUserResponse>(\r\n resolvedConfig,\r\n { endpoint: '/delete-user/callback', method: 'GET' },\r\n undefined,\r\n {\r\n token: query.token,\r\n callbackURL: query.callbackURL,\r\n },\r\n mergedOptions,\r\n )\r\n }\r\n\r\n const resolveResetPasswordToken = (\r\n input: { token: string; callbackURL?: string } & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n const query = payload as { token?: string; callbackURL?: string } | undefined\r\n const token = query?.token?.trim()\r\n if (!token) {\r\n throw new Error('resolveResetPasswordToken requires a non-empty token')\r\n }\r\n const endpoint = `/reset-password/${encodeURIComponent(token)}` as AthenaAuthEndpointPath\r\n return callAuthEndpoint<{ token?: string }>(\r\n resolvedConfig,\r\n { endpoint, method: 'GET' },\r\n undefined,\r\n query?.callbackURL ? { callbackURL: query.callbackURL } : undefined,\r\n mergedOptions,\r\n )\r\n }\r\n\r\n const organization: AthenaAuthOrganizationBindings = {\r\n create: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationCreateRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthOrganization\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/create', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n update: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationUpdateRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthOrganization\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/update', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n delete: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationDeleteRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/delete', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n setActive: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationSetActiveRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/set-active', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n list: (input, options) =>\r\n getGeneric<AthenaAuthOrganization[]>(\r\n '/organization/list',\r\n input,\r\n options,\r\n ),\r\n getFull: (input, options) =>\r\n executeGetWithQueryCompatibleInput<AthenaAuthOrganizationGetFullQuery, {\r\n organization: AthenaAuthOrganization\r\n members?: AthenaAuthOrganizationMember[]\r\n invitations?: AthenaAuthOrganizationInvitation[]\r\n }>(\r\n resolvedConfig,\r\n { endpoint: '/organization/get-full-organization', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n checkSlug: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationCheckSlugRequest & AthenaAuthFetchCompatibleInput,\r\n { available: boolean }\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/check-slug', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n leave: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationLeaveRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/leave', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n listUserInvitations: (input, options) =>\r\n executeGetWithQueryCompatibleInput<\r\n AthenaAuthOrganizationListUserInvitationsQuery,\r\n AthenaAuthOrganizationInvitation[]\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/list-user-invitations', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n hasPermission: (input, options) =>\r\n postGeneric<AthenaAdminHasPermissionResponse>(\r\n '/organization/has-permission',\r\n input,\r\n options,\r\n ),\r\n invitation: {\r\n cancel: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationInvitationActionRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/cancel-invitation', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n accept: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationInvitationActionRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/accept-invitation', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n get: (input, options) =>\r\n executeGetWithQueryCompatibleInput<\r\n AthenaAuthOrganizationGetInvitationQuery,\r\n AthenaAuthOrganizationInvitation\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/get-invitation', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n reject: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationInvitationActionRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/reject-invitation', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n list: (input, options) =>\r\n executeGetWithQueryCompatibleInput<\r\n AthenaAuthOrganizationListInvitationsQuery,\r\n AthenaAuthOrganizationInvitation[]\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/list-invitations', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n },\r\n member: {\r\n remove: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationRemoveMemberRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/remove-member', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n updateRole: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationUpdateMemberRoleRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/update-member-role', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n invite: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaAuthOrganizationInviteMemberRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthOrganizationInvitation\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/invite-member', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n getActive: (input, options) =>\r\n executeGetWithCompatibleInput<AthenaAuthOrganizationMember>(\r\n resolvedConfig,\r\n { endpoint: '/organization/get-active-member', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n list: (input, options) =>\r\n executeGetWithQueryCompatibleInput<\r\n AthenaAuthOrganizationListMembersQuery,\r\n AthenaAuthOrganizationMember[]\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/organization/list-members', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n },\r\n }\r\n\r\n const authResetPassword = Object.assign(\r\n (\r\n input: AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/reset-password', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n {\r\n token: resolveResetPasswordToken,\r\n },\r\n )\r\n\r\n const sessionRevokeBinding: AthenaAuthBindings['session']['revoke'] = (\r\n input,\r\n options,\r\n ) => {\r\n if (Array.isArray(input)) {\r\n if (input.length === 0) {\r\n throw new Error('session.revoke requires at least one session token')\r\n }\r\n if (input.length === 1) {\r\n return revokeSession(input[0], options)\r\n }\r\n return revokeSessions(undefined, options)\r\n }\r\n\r\n const parsed = input as AthenaAuthGenericInput & {\r\n token?: string\r\n tokens?: string[]\r\n }\r\n const tokens = Array.isArray(parsed.tokens)\r\n ? parsed.tokens.filter(token => token.trim().length > 0)\r\n : undefined\r\n\r\n if (tokens && tokens.length > 1) {\r\n return revokeSessions(\r\n parsed.fetchOptions ? { fetchOptions: parsed.fetchOptions } : undefined,\r\n options,\r\n )\r\n }\r\n\r\n if (tokens && tokens.length === 1) {\r\n return revokeSession(\r\n { token: tokens[0], fetchOptions: parsed.fetchOptions },\r\n options,\r\n )\r\n }\r\n\r\n const token = parsed.token?.trim()\r\n if (!token) {\r\n throw new Error('session.revoke requires a non-empty token or a non-empty token list')\r\n }\r\n\r\n return revokeSession(\r\n {\r\n token,\r\n fetchOptions: parsed.fetchOptions,\r\n },\r\n options,\r\n )\r\n }\r\n\r\n const adminUserSessionRevokeBinding: AthenaAuthBindings['admin']['user']['session']['revoke'] = (\r\n input,\r\n options,\r\n ) => {\r\n const requireUserId = (userId: string | undefined): string => {\r\n const trimmed = String(userId ?? '').trim()\r\n if (!trimmed) {\r\n throw new Error('admin.user.session.revoke requires a non-empty userId')\r\n }\r\n return trimmed\r\n }\r\n\r\n const requireSinglePluralUserId = (\r\n sessions: AthenaAdminRevokeUserSessionRequest[],\r\n ): AthenaAdminRevokeUserSessionsRequest => {\r\n const uniqueUserIds = [...new Set(sessions.map(session => requireUserId(session.userId)))]\r\n if (uniqueUserIds.length !== 1) {\r\n throw new Error('admin.user.session.revoke requires the same userId across plural payloads')\r\n }\r\n return { userId: uniqueUserIds[0] }\r\n }\r\n\r\n if (Array.isArray(input)) {\r\n if (input.length === 0) {\r\n throw new Error('admin.user.session.revoke requires at least one payload item')\r\n }\r\n if (input.length === 1) {\r\n return postGeneric<AthenaAdminSuccessResponse>(\r\n '/admin/revoke-user-session',\r\n {\r\n ...input[0],\r\n userId: requireUserId(input[0].userId),\r\n } as AthenaAuthGenericInput,\r\n options,\r\n )\r\n }\r\n return postGeneric<AthenaAdminSuccessResponse>(\r\n '/admin/revoke-user-sessions',\r\n requireSinglePluralUserId(input),\r\n options,\r\n )\r\n }\r\n\r\n const parsed = input as AthenaAuthGenericInput & {\r\n sessions?: AthenaAdminRevokeUserSessionRequest[]\r\n sessionToken?: string\r\n userId?: string\r\n }\r\n const sessions = parsed.sessions\r\n\r\n if (sessions && sessions.length === 0) {\r\n throw new Error('admin.user.session.revoke requires at least one payload item')\r\n }\r\n\r\n if (sessions && sessions.length === 1) {\r\n return postGeneric<AthenaAdminSuccessResponse>(\r\n '/admin/revoke-user-session',\r\n {\r\n ...sessions[0],\r\n userId: requireUserId(sessions[0].userId),\r\n fetchOptions: parsed.fetchOptions,\r\n } as AthenaAuthGenericInput,\r\n options,\r\n )\r\n }\r\n\r\n if (sessions && sessions.length > 1) {\r\n return postGeneric<AthenaAdminSuccessResponse>(\r\n '/admin/revoke-user-sessions',\r\n {\r\n ...requireSinglePluralUserId(sessions),\r\n fetchOptions: parsed.fetchOptions,\r\n } as AthenaAuthGenericInput,\r\n options,\r\n )\r\n }\r\n\r\n const normalizedUserId = requireUserId(parsed.userId)\r\n\r\n if (!parsed.sessionToken) {\r\n return postGeneric<AthenaAdminSuccessResponse>(\r\n '/admin/revoke-user-sessions',\r\n {\r\n userId: normalizedUserId,\r\n fetchOptions: parsed.fetchOptions,\r\n } as AthenaAuthGenericInput,\r\n options,\r\n )\r\n }\r\n return postGeneric<AthenaAdminSuccessResponse>(\r\n '/admin/revoke-user-session',\r\n {\r\n ...parsed,\r\n userId: normalizedUserId,\r\n } as AthenaAuthGenericInput,\r\n options,\r\n )\r\n }\r\n\r\n const auth: AthenaAuthBindings = {\r\n getSession: (input, options) => getGeneric('/get-session', input, options),\r\n signOut,\r\n forgetPassword: (input, options) => postGeneric('/forget-password', input, options),\r\n resetPassword: authResetPassword,\r\n setPassword: (input, options) => postGeneric('/set-password', input, options),\r\n verifyEmail: (input, options) => {\r\n const queryInput: AthenaAuthGenericQueryInput = {\r\n query: {\r\n token: input.token,\r\n callbackURL: input.callbackURL,\r\n },\r\n fetchOptions: input.fetchOptions,\r\n }\r\n return getWithQuery<{ user: AthenaAuthUser; status: boolean }>(\r\n '/verify-email',\r\n queryInput,\r\n options,\r\n )\r\n },\r\n sendVerificationEmail: (input, options) => postGeneric('/send-verification-email', input, options),\r\n changeEmail: (input, options) => postGeneric('/change-email', input, options),\r\n changeEmailVerify: (input, options) => getWithQuery('/change-email/verify', input, options),\r\n deleteUserVerify: (input, options) => getWithQuery('/delete-user/verify', input, options),\r\n changePassword: (input, options) => postGeneric('/change-password', input, options),\r\n user: {\r\n update: (input, options) => postGeneric('/update-user', input, options),\r\n delete: (input, options) => postGeneric('/delete-user', input, options),\r\n email: {\r\n list: listUserEmailsWithFallback,\r\n },\r\n },\r\n session: {\r\n list: (input, options) => getGeneric('/list-sessions', input, options),\r\n revoke: sessionRevokeBinding,\r\n revokeOther: revokeOtherSessions,\r\n },\r\n social: {\r\n link: (input, options) => postGeneric('/link-social', input, options),\r\n },\r\n account: {\r\n list: (input, options) => getGeneric('/list-accounts', input, options),\r\n unlink: (input, options) => postGeneric('/unlink-account', input, options),\r\n },\r\n deleteUser: {\r\n callback: deleteUserCallback,\r\n },\r\n refreshToken: (input, options) => postGeneric('/refresh-token', input, options),\r\n getAccessToken: (input, options) => postGeneric('/get-access-token', input, options),\r\n health: healthWithFallback,\r\n ok: (input, options) => getGeneric('/ok', input, options),\r\n error: (input, options) => getGeneric('/error', input, options),\r\n twoFactor: {\r\n getTotpUri: (input, options) => postGeneric('/two-factor/get-totp-uri', input, options),\r\n verifyTotp: (input, options) => postGeneric('/two-factor/verify-totp', input, options),\r\n sendOtp: (input, options) => postGeneric('/two-factor/send-otp', input, options),\r\n verifyOtp: (input, options) => postGeneric('/two-factor/verify-otp', input, options),\r\n verifyBackupCode: (input, options) => postGeneric('/two-factor/verify-backup-code', input, options),\r\n generateBackupCodes: (input, options) =>\r\n executePostWithCompatibleInput<\r\n AthenaTwoFactorGenerateBackupCodesRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaTwoFactorGenerateBackupCodesResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/two-factor/generate-backup-codes', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n enable: (input, options) => postGeneric('/two-factor/enable', input, options),\r\n disable: (input, options) => postGeneric('/two-factor/disable', input, options),\r\n },\r\n passkey: {\r\n generateRegisterOptions: (input, options) =>\r\n getGeneric('/passkey/generate-register-options', input, options),\r\n generateAuthenticateOptions: (input, options) =>\r\n postGeneric('/passkey/generate-authenticate-options', input, options),\r\n verifyRegistration: (input, options) =>\r\n postGeneric('/passkey/verify-registration', input, options),\r\n verifyAuthentication: (input, options) =>\r\n postGeneric('/passkey/verify-authentication', input, options),\r\n listUserPasskeys: (input, options) => getGeneric('/passkey/list-user-passkeys', input, options),\r\n deletePasskey: (input, options) => postGeneric('/passkey/delete-passkey', input, options),\r\n updatePasskey: (input, options) => postGeneric('/passkey/update-passkey', input, options),\r\n getRelatedOrigins: (input, options) => getGeneric('/.well-known/webauthn', input, options),\r\n },\r\n admin: {\r\n role: {\r\n set: (input, options) => postGeneric('/admin/set-role', input, options),\r\n },\r\n user: {\r\n list: (input, options) => getWithQuery('/admin/list-users', input, options),\r\n create: (input, options) => postGeneric('/admin/create-user', input, options),\r\n unban: (input, options) => postGeneric('/admin/unban-user', input, options),\r\n ban: (input, options) => postGeneric('/admin/ban-user', input, options),\r\n impersonate: (input, options) => postGeneric('/admin/impersonate-user', input, options),\r\n stopImpersonating: (input, options) => postGeneric('/admin/stop-impersonating', input, options),\r\n remove: (input, options) => postGeneric('/admin/remove-user', input, options),\r\n setPassword: (input, options) => postGeneric('/admin/set-user-password', input, options),\r\n session: {\r\n list: (input, options) => postGeneric('/admin/list-user-sessions', input, options),\r\n revoke: adminUserSessionRevokeBinding,\r\n },\r\n },\r\n hasPermission: (input, options) =>\r\n postGeneric<AthenaAdminHasPermissionResponse>('/admin/has-permission', input, options),\r\n apiKey: {\r\n create: (input, options) => postGeneric('/admin/api-key/create', input, options),\r\n },\r\n athenaClient: {\r\n create: (input, options) => postGeneric('/admin/athena-client/create', input, options),\r\n list: (input, options) => getWithQuery('/admin/athena-client/list', input, options),\r\n },\r\n auditLog: {\r\n list: (input, options) => getWithQuery('/admin/audit-log/list', input, options),\r\n },\r\n email: {\r\n list: (input, options) => getWithQuery('/admin/email/list', input, options),\r\n get: (input, options) => getWithQuery('/admin/email/get', input, options),\r\n create: async (input, options) =>\r\n postGeneric(\r\n '/admin/email/create',\r\n await resolveAdminEmailPayload('/admin/email/create', input),\r\n options,\r\n ),\r\n update: async (input, options) =>\r\n postGeneric(\r\n '/admin/email/update',\r\n await resolveAdminEmailPayload('/admin/email/update', input),\r\n options,\r\n ),\r\n delete: (input, options) => postGeneric('/admin/email/delete', input, options),\r\n failure: {\r\n list: (input, options) => getWithQuery('/admin/email-failure/list', input, options),\r\n get: (input, options) => getWithQuery('/admin/email-failure/get', input, options),\r\n create: (input, options) => postGeneric('/admin/email-failure/create', input, options),\r\n update: (input, options) => postGeneric('/admin/email-failure/update', input, options),\r\n delete: (input, options) => postGeneric('/admin/email-failure/delete', input, options),\r\n },\r\n template: {\r\n list: (input, options) => getWithQuery('/admin/email-template/list', input, options),\r\n get: (input, options) => getWithQuery('/admin/email-template/get', input, options),\r\n create: async (input, options) =>\r\n postGeneric(\r\n '/admin/email-template/create',\r\n await resolveAdminEmailTemplatePayload('/admin/email-template/create', input),\r\n options,\r\n ),\r\n update: async (input, options) =>\r\n postGeneric(\r\n '/admin/email-template/update',\r\n await resolveAdminEmailTemplatePayload('/admin/email-template/update', input),\r\n options,\r\n ),\r\n delete: (input, options) => postGeneric('/admin/email-template/delete', input, options),\r\n },\r\n },\r\n emailTemplate: {\r\n get: (input, options) => getWithQuery('/admin/email-template/get', input, options),\r\n create: async (input, options) =>\r\n postGeneric(\r\n '/admin/email-template/create',\r\n await resolveAdminEmailTemplatePayload('/admin/email-template/create', input),\r\n options,\r\n ),\r\n delete: (input, options) => postGeneric('/admin/email-template/delete', input, options),\r\n list: (input, options) => getWithQuery('/admin/email-template/list', input, options),\r\n update: async (input, options) =>\r\n postGeneric(\r\n '/admin/email-template/update',\r\n await resolveAdminEmailTemplatePayload('/admin/email-template/update', input),\r\n options,\r\n ),\r\n },\r\n },\r\n apiKey: {\r\n create: (input, options) => postGeneric('/api-key/create', input, options),\r\n get: (input, options) => getWithQuery('/api-key/get', input, options),\r\n update: (input, options) => postGeneric('/api-key/update', input, options),\r\n delete: (input, options) => postGeneric('/api-key/delete', input, options),\r\n list: (input, options) => getWithQuery('/api-key/list', input, options),\r\n verify: (input, options) => postGeneric('/api-key/verify', input, options),\r\n deleteAllExpired: (input, options) =>\r\n executePostWithOptionalInput<AthenaApiKeyDeleteAllExpiredResponse>(\r\n resolvedConfig,\r\n { endpoint: '/api-key/delete-all-expired-api-keys', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n },\r\n signIn: {\r\n email: (input, options) => postGeneric('/sign-in/email', input, options),\r\n username: (input, options) => postGeneric('/sign-in/username', input, options),\r\n social: (input, options) => postGeneric('/sign-in/social', input, options),\r\n },\r\n signUp: {\r\n email: (input, options) => postGeneric('/sign-up/email', input, options),\r\n },\r\n organization,\r\n callback: {\r\n provider: (input, options) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const parsed = payload as {\r\n provider?: string\r\n code?: string\r\n state?: string\r\n } | undefined\r\n const provider = String(parsed?.provider ?? '').trim()\r\n if (!provider) {\r\n throw new Error('callback.provider requires a non-empty provider value')\r\n }\r\n const code = String(parsed?.code ?? '').trim()\r\n const state = String(parsed?.state ?? '').trim()\r\n if (!code || !state) {\r\n throw new Error('callback.provider requires non-empty code and state values')\r\n }\r\n const endpoint = `/callback/${encodeURIComponent(provider)}` as AthenaAuthEndpointPath\r\n return request({\r\n endpoint,\r\n method: 'GET',\r\n query: {\r\n code,\r\n state,\r\n },\r\n fetchOptions,\r\n }, options)\r\n },\r\n },\r\n }\r\n\r\n return {\r\n baseUrl: normalizedBaseUrl,\r\n request,\r\n signIn: {\r\n email: (\r\n input: AthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSignInResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/sign-in/email', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n username: (\r\n input: AthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSignInResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/sign-in/username', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n social: (\r\n input: AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSocialRedirectResponse | AthenaAuthSignInResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/sign-in/social', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n },\r\n signUp: {\r\n email: (\r\n input: AthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSignInResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/sign-up/email', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n },\r\n signOut,\r\n logout: signOut,\r\n getSession: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\r\n executeGetWithCompatibleInput<AthenaAuthSessionResponse>(\r\n resolvedConfig,\r\n { endpoint: '/get-session', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n listSessions: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\r\n executeGetWithCompatibleInput<AthenaAuthSession[]>(\r\n resolvedConfig,\r\n { endpoint: '/list-sessions', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n revokeSession,\r\n clearSession: revokeSession,\r\n revokeSessions,\r\n clearSessions: revokeSessions,\r\n revokeOtherSessions,\r\n clearOtherSessions: revokeOtherSessions,\r\n forgetPassword: (\r\n input: AthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/forget-password', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n resetPassword: (\r\n input: AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/reset-password', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n resolveResetPasswordToken,\r\n verifyEmail: (\r\n input: AthenaVerifyEmailRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) => {\r\n const { payload, fetchOptions } = extractFetchOptions(input)\r\n const mergedOptions = mergeCallOptions(fetchOptions, options)\r\n const query = payload as AthenaVerifyEmailRequest | undefined\r\n return callAuthEndpoint<{ user: AthenaAuthUser; status: boolean }>(\r\n resolvedConfig,\r\n { endpoint: '/verify-email', method: 'GET' },\r\n undefined,\r\n query\r\n ? {\r\n token: query.token,\r\n callbackURL: query.callbackURL,\r\n }\r\n : undefined,\r\n mergedOptions,\r\n )\r\n },\r\n sendVerificationEmail: (\r\n input: AthenaSendVerificationEmailRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaSendVerificationEmailRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/send-verification-email', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n changeEmail: (\r\n input: AthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\r\n { status: boolean; message?: string | null }\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/change-email', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n changePassword: (\r\n input: AthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\r\n { token?: string | null; user: AthenaAuthUser }\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/change-password', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n updateUser: (\r\n input: AthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/update-user', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n deleteUser,\r\n deleteUserCallback,\r\n linkSocial: (\r\n input: AthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthSocialRedirectResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/link-social', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n listAccounts: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\r\n executeGetWithCompatibleInput<AthenaAuthLinkedAccount[]>(\r\n resolvedConfig,\r\n { endpoint: '/list-accounts', method: 'GET' },\r\n input,\r\n options,\r\n ),\r\n unlinkAccount: (\r\n input: AthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaAuthStatusResponse\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/unlink-account', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n refreshToken: (\r\n input: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaOAuthTokenBundle\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/refresh-token', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n getAccessToken: (\r\n input: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\r\n options?: AthenaAuthCallOptions,\r\n ) =>\r\n executePostWithCompatibleInput<\r\n AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\r\n AthenaOAuthTokenBundle\r\n >(\r\n resolvedConfig,\r\n { endpoint: '/get-access-token', method: 'POST' },\r\n input,\r\n options,\r\n ),\r\n organization,\r\n auth,\r\n }\r\n}\r\n","export function parseBooleanFlag(\n rawValue: string | undefined,\n fallback: boolean,\n): boolean {\n if (!rawValue) return fallback\n\n const normalized = rawValue.trim().toLowerCase()\n\n if (\n normalized === '1' ||\n normalized === 'true' ||\n normalized === 'yes' ||\n normalized === 'on'\n ) {\n return true\n }\n\n if (\n normalized === '0' ||\n normalized === 'false' ||\n normalized === 'no' ||\n normalized === 'off'\n ) {\n return false\n }\n\n return fallback\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\r\nexport type AthenaErrorKind =\r\n | 'unique_violation'\r\n | 'not_found'\r\n | 'validation'\r\n | 'auth'\r\n | 'rate_limit'\r\n | 'transient'\r\n | 'unknown'\r\n\r\nexport const AthenaErrorKind = {\r\n UniqueViolation: 'unique_violation',\r\n NotFound: 'not_found',\r\n Validation: 'validation',\r\n Auth: 'auth',\r\n RateLimit: 'rate_limit',\r\n Transient: 'transient',\r\n Unknown: 'unknown',\r\n} as const\r\n\r\nexport type AthenaErrorCode =\r\n | 'UNIQUE_VIOLATION'\r\n | 'NOT_FOUND'\r\n | 'VALIDATION_FAILED'\r\n | 'AUTH_UNAUTHORIZED'\r\n | 'AUTH_FORBIDDEN'\r\n | 'RATE_LIMITED'\r\n | 'NETWORK_UNAVAILABLE'\r\n | 'TRANSIENT_FAILURE'\r\n | 'HTTP_FAILURE'\r\n | 'UNKNOWN'\r\n\r\nexport const AthenaErrorCode = {\r\n UniqueViolation: 'UNIQUE_VIOLATION',\r\n NotFound: 'NOT_FOUND',\r\n ValidationFailed: 'VALIDATION_FAILED',\r\n AuthUnauthorized: 'AUTH_UNAUTHORIZED',\r\n AuthForbidden: 'AUTH_FORBIDDEN',\r\n RateLimited: 'RATE_LIMITED',\r\n NetworkUnavailable: 'NETWORK_UNAVAILABLE',\r\n TransientFailure: 'TRANSIENT_FAILURE',\r\n HttpFailure: 'HTTP_FAILURE',\r\n Unknown: 'UNKNOWN',\r\n} as const satisfies Record<string, AthenaErrorCode>\r\n\r\nexport type AthenaErrorCategory = 'transport' | 'client' | 'server' | 'database' | 'unknown'\r\n\r\nexport const AthenaErrorCategory = {\r\n Transport: 'transport',\r\n Client: 'client',\r\n Server: 'server',\r\n Database: 'database',\r\n Unknown: 'unknown',\r\n} as const satisfies Record<string, AthenaErrorCategory>\r\n\r\nexport interface AthenaOperationContext {\r\n table?: string\r\n operation?: string\r\n identity?: string | Record<string, unknown>\r\n}\r\n\r\nexport interface NormalizedAthenaError {\r\n kind: AthenaErrorKind\r\n code: AthenaErrorCode\r\n category: AthenaErrorCategory\r\n retryable: boolean\r\n status?: number\r\n constraint?: string\r\n table?: string\r\n operation?: string\r\n message: string\r\n raw: unknown\r\n}\r\n\r\nexport interface AthenaErrorInput {\r\n code: AthenaErrorCode\r\n kind: AthenaErrorKind\r\n category: AthenaErrorCategory\r\n message: string\r\n status?: number\r\n retryable?: boolean\r\n requestId?: string\r\n context?: AthenaOperationContext\r\n raw?: unknown\r\n}\r\n\r\nexport interface UnwrapOptions {\r\n allowNull?: boolean\r\n context?: AthenaOperationContext\r\n}\r\n\r\nexport interface UnwrapOneOptions extends UnwrapOptions {\r\n requireExactlyOne?: boolean\r\n}\r\n\r\nexport interface IntCoercionOptions {\n strictBigInt?: boolean\n min?: number\n max?: number\n}\n\r\nexport type RetryBackoffStrategy =\r\n | 'linear'\r\n | 'exponential'\r\n | ((attempt: number, error: unknown) => number)\r\n\r\nexport interface RetryConfig {\r\n retries: number\r\n baseDelayMs?: number\r\n maxDelayMs?: number\r\n backoff?: RetryBackoffStrategy\r\n jitter?: boolean | number\r\n shouldRetry?: (error: unknown, attempt: number) => boolean | Promise<boolean>\r\n}\r\n\r\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\r\nexport class AthenaError extends Error {\r\n readonly code: AthenaErrorCode\r\n readonly kind: AthenaErrorKind\r\n readonly category: AthenaErrorCategory\r\n readonly status?: number\r\n readonly retryable: boolean\r\n readonly requestId?: string\r\n readonly context?: AthenaOperationContext\r\n readonly raw?: unknown\r\n\r\n constructor(input: AthenaErrorInput) {\r\n super(input.message)\r\n this.name = 'AthenaError'\r\n this.code = input.code\r\n this.kind = input.kind\r\n this.category = input.category\r\n this.status = input.status\r\n this.retryable = input.retryable ?? false\r\n this.requestId = input.requestId\r\n this.context = input.context\r\n this.raw = input.raw\r\n }\r\n}\r\n\r\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\r\nfunction safeStringify(value: unknown): string {\r\n try {\r\n const serialized = JSON.stringify(value)\r\n return serialized ?? String(value)\r\n } catch {\r\n return '[unserializable]'\r\n }\r\n}\r\n\r\nfunction contextHint(context?: AthenaOperationContext): string | undefined {\r\n if (!context?.identity) return undefined\r\n const identity =\r\n typeof context.identity === 'string' ? context.identity : safeStringify(context.identity)\r\n return `Identity: ${identity}`\r\n}\r\n\r\nfunction isAthenaResultLike(value: unknown): value is AthenaResult<unknown> {\r\n return (\r\n isRecord(value) &&\r\n 'status' in value &&\r\n 'error' in value &&\r\n 'data' in value &&\r\n typeof value.status === 'number'\r\n )\r\n}\r\n\r\nfunction operationFromDetails(details?: AthenaGatewayErrorDetails | null): string | undefined {\r\n if (!details?.endpoint) return undefined\r\n if (details.endpoint === '/gateway/fetch' || details.endpoint === '/gateway/query') return 'select'\r\n if (details.endpoint === '/gateway/insert') return 'insert'\r\n if (details.endpoint === '/gateway/update') return 'update'\r\n if (details.endpoint === '/gateway/delete') return 'delete'\r\n if (details.endpoint === '/gateway/rpc' || details.endpoint.startsWith('/rpc/')) return 'rpc'\r\n return undefined\r\n}\r\n\r\nfunction matchRegex(input: string, patterns: RegExp[]): string | undefined {\r\n for (const pattern of patterns) {\r\n const match = pattern.exec(input)\r\n if (match?.[1]) return match[1]\r\n }\r\n return undefined\r\n}\r\n\r\nfunction extractConstraint(message: string): string | undefined {\r\n return matchRegex(message, [\r\n /unique constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\r\n /constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\r\n ])\r\n}\r\n\r\nfunction extractTable(message: string): string | undefined {\r\n return matchRegex(message, [\r\n /(?:table|relation)\\s+[\"'`]([^\"'`]+)[\"'`]/i,\r\n /on\\s+table\\s+([a-zA-Z0-9_.]+)/i,\r\n ])\r\n}\r\n\r\nfunction classifyKind(status: number | undefined, code: AthenaGatewayErrorCode | undefined, message: string): AthenaErrorKind {\n const lower = message.toLowerCase()\r\n const hasUniquePattern =\r\n lower.includes('unique constraint') ||\r\n lower.includes('duplicate key') ||\r\n lower.includes('already exists') ||\r\n lower.includes('duplicate')\r\n const hasNotFoundPattern = lower.includes('not found') || lower.includes('no rows')\r\n const hasValidationPattern =\r\n lower.includes('validation') || lower.includes('invalid') || lower.includes('malformed')\r\n const hasAuthPattern =\r\n lower.includes('unauthorized') || lower.includes('forbidden') || lower.includes('auth')\r\n const hasRateLimitPattern = lower.includes('rate limit') || lower.includes('too many requests')\r\n const hasTransientPattern =\r\n lower.includes('timeout') ||\r\n lower.includes('temporar') ||\r\n lower.includes('connection reset') ||\r\n lower.includes('socket') ||\r\n lower.includes('deadlock')\r\n\r\n if (status === 409 || hasUniquePattern) return 'unique_violation'\r\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}\r\n\r\nfunction toAthenaErrorCode(\r\n kind: AthenaErrorKind,\r\n status: number | undefined,\r\n gatewayCode?: AthenaGatewayErrorCode,\r\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\r\n switch (kind) {\r\n case 'unique_violation':\r\n return AthenaErrorCode.UniqueViolation\r\n case 'not_found':\r\n return AthenaErrorCode.NotFound\r\n case 'validation':\r\n return AthenaErrorCode.ValidationFailed\r\n case 'rate_limit':\r\n return AthenaErrorCode.RateLimited\r\n case 'auth':\r\n if (status === 403) {\r\n return AthenaErrorCode.AuthForbidden\r\n }\r\n return AthenaErrorCode.AuthUnauthorized\r\n case 'transient':\r\n return status !== undefined && status >= 500\r\n ? AthenaErrorCode.HttpFailure\r\n : AthenaErrorCode.TransientFailure\r\n case 'unknown':\r\n default:\r\n return status !== undefined && status >= 400\r\n ? AthenaErrorCode.HttpFailure\r\n : AthenaErrorCode.Unknown\r\n }\r\n}\r\n\r\nfunction toAthenaErrorCategory(kind: AthenaErrorKind, status: number | undefined): AthenaErrorCategory {\r\n if (kind === 'transient' && (status === 0 || status === undefined)) {\r\n return AthenaErrorCategory.Transport\r\n }\r\n if (kind === 'unique_violation') return AthenaErrorCategory.Database\r\n if (kind === 'validation' || kind === 'auth' || kind === 'not_found') return AthenaErrorCategory.Client\r\n if (kind === 'rate_limit' || kind === 'transient') return AthenaErrorCategory.Server\r\n return AthenaErrorCategory.Unknown\r\n}\r\n\r\nfunction isRetryable(kind: AthenaErrorKind, status: number | undefined): boolean {\r\n if (kind === 'rate_limit' || kind === 'transient') return true\r\n return status !== undefined && status >= 500\r\n}\r\n\r\nfunction toGatewayCode(kind: AthenaErrorKind, status?: number): AthenaGatewayErrorCode {\r\n if (kind === 'transient' && (status === 0 || status === undefined)) return 'NETWORK_ERROR'\r\n if (kind === 'validation') return 'INVALID_JSON'\r\n if (status !== undefined && status >= 400) return 'HTTP_ERROR'\r\n return 'UNKNOWN_ERROR'\r\n}\r\n\r\nfunction toAthenaGatewayError(\n source: unknown,\n fallbackMessage: string,\n context?: AthenaOperationContext,\n): AthenaGatewayError {\n if (isAthenaGatewayError(source)) {\r\n return source\r\n }\r\n\r\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\r\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\r\n return new AthenaGatewayError({\r\n code: toGatewayCode(normalized.kind, normalized.status),\r\n message,\r\n status: normalized.status ?? 0,\r\n hint:\r\n normalized.constraint != null\r\n ? `Constraint: ${normalized.constraint}`\r\n : contextHint(context),\r\n cause: typeof normalized.raw === 'string' ? normalized.raw : safeStringify(normalized.raw),\r\n })\r\n}\r\n\r\n/**\r\n * Returns `true` when a result is successful (`2xx` status and no `error`).\r\n */\r\nexport function isOk<T>(result: AthenaResult<T>): boolean {\r\n return result.error == null && result.status >= 200 && result.status < 300\r\n}\r\n\r\n/**\r\n * Normalizes any Athena failure shape into a stable, typed error envelope.\r\n *\r\n * Accepts `AthenaResult`, `AthenaGatewayError`, native `Error`, or unknown values.\r\n * Optional `context` can override inferred table/operation metadata for clearer diagnostics.\r\n */\r\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,\r\n retryable: isRetryable(kind, resultOrError.status),\r\n status: resultOrError.status,\r\n constraint,\r\n table,\r\n operation,\r\n message,\r\n raw: resultOrError.raw,\r\n }\r\n }\r\n\r\n if (isAthenaGatewayError(resultOrError)) {\r\n const details = resultOrError.toDetails()\r\n const operation = context?.operation ?? operationFromDetails(details)\r\n const table = context?.table ?? extractTable(resultOrError.message)\r\n const constraint = extractConstraint(resultOrError.message)\r\n const kind = classifyKind(resultOrError.status, resultOrError.code, resultOrError.message)\r\n const code = toAthenaErrorCode(kind, resultOrError.status, resultOrError.code)\r\n const category = toAthenaErrorCategory(kind, resultOrError.status)\r\n return {\r\n kind,\r\n code,\r\n category,\r\n retryable: isRetryable(kind, resultOrError.status),\r\n status: resultOrError.status,\r\n constraint,\r\n table,\r\n operation,\r\n message: resultOrError.message,\r\n raw: resultOrError,\r\n }\r\n }\r\n\r\n if (resultOrError instanceof Error) {\r\n const maybeStatus =\r\n isRecord(resultOrError) && typeof resultOrError.status === 'number'\r\n ? resultOrError.status\r\n : undefined\r\n const kind = classifyKind(maybeStatus, undefined, resultOrError.message)\r\n return {\r\n kind,\r\n code: toAthenaErrorCode(kind, maybeStatus),\r\n category: toAthenaErrorCategory(kind, maybeStatus),\r\n retryable: isRetryable(kind, maybeStatus),\r\n status: maybeStatus,\r\n constraint: extractConstraint(resultOrError.message),\r\n table: context?.table ?? extractTable(resultOrError.message),\r\n operation: context?.operation,\r\n message: resultOrError.message,\r\n raw: resultOrError,\r\n }\r\n }\r\n\r\n const message = typeof resultOrError === 'string' ? resultOrError : 'Unknown Athena error'\r\n const kind = classifyKind(undefined, undefined, message)\r\n return {\r\n kind,\r\n code: toAthenaErrorCode(kind, undefined),\r\n category: toAthenaErrorCategory(kind, undefined),\r\n retryable: isRetryable(kind, undefined),\r\n status: undefined,\r\n constraint: extractConstraint(message),\r\n table: context?.table ?? extractTable(message),\r\n operation: context?.operation,\r\n message,\r\n raw: resultOrError,\r\n }\r\n}\r\n\r\n/**\r\n * Unwraps a successful result into a row array.\r\n *\r\n * - Throws on failed results.\r\n * - Converts `null` data to an empty array.\r\n * - Wraps scalar data in a single-element array.\r\n */\r\nexport function unwrapRows<T>(\r\n result: AthenaResult<T[] | T | null>,\r\n options?: UnwrapOptions,\r\n): T[] {\r\n if (!isOk(result)) {\r\n throw toAthenaGatewayError(result, 'Athena request failed', options?.context)\r\n }\r\n if (result.data == null) return []\r\n return Array.isArray(result.data) ? result.data : [result.data]\r\n}\r\n\r\n/**\r\n * Unwraps successful result data from `AthenaResult<T | null>`.\r\n *\r\n * By default, `null` data throws. Pass `{ allowNull: true }` to permit nullable payloads.\r\n */\r\nexport function unwrap<T>(\r\n result: AthenaResult<T | null>,\r\n options: UnwrapOptions & { allowNull: true },\r\n): T | null\r\nexport function unwrap<T>(result: AthenaResult<T | null>, options?: UnwrapOptions): T\r\nexport function unwrap<T>(\r\n result: AthenaResult<T | null>,\r\n options?: UnwrapOptions,\r\n): T | null {\r\n if (!isOk(result)) {\r\n throw toAthenaGatewayError(result, 'Athena request failed', options?.context)\r\n }\r\n if (result.data == null && !options?.allowNull) {\r\n throw toAthenaGatewayError(result, 'Expected data but received null', options?.context)\r\n }\r\n return result.data\r\n}\r\n\r\n/**\r\n * Unwraps the first row from a successful result that may contain arrays/scalars/null.\r\n *\r\n * - Throws on failed results.\r\n * - Throws when no row exists unless `allowNull: true` is provided.\r\n * - Optionally enforces exact cardinality via `requireExactlyOne`.\r\n */\r\nexport function unwrapOne<T>(\r\n result: AthenaResult<T[] | T | null>,\r\n options: UnwrapOneOptions & { allowNull: true },\r\n): T | null\r\nexport function unwrapOne<T>(result: AthenaResult<T[] | T | null>, options?: UnwrapOneOptions): T\r\nexport function unwrapOne<T>(\r\n result: AthenaResult<T[] | T | null>,\r\n options?: UnwrapOneOptions,\r\n): T | null {\r\n const rows = unwrapRows(result, options)\r\n if (!rows.length) {\r\n if (options?.allowNull) return null\r\n throw toAthenaGatewayError(result, 'Expected one row but received none', options?.context)\r\n }\r\n if (options?.requireExactlyOne && rows.length !== 1) {\r\n throw toAthenaGatewayError(\r\n result,\r\n `Expected exactly one row but received ${rows.length}`,\r\n options.context,\r\n )\r\n }\r\n return rows[0]\r\n}\r\n\r\n/**\r\n * Asserts that an Athena result is successful.\r\n *\r\n * Returns the original result for fluent composition and throws `AthenaGatewayError` on failure.\r\n */\r\nexport function requireSuccess<T>(\r\n result: AthenaResult<T>,\r\n context?: AthenaOperationContext,\r\n): AthenaResult<T> {\r\n if (!isOk(result)) {\r\n throw toAthenaGatewayError(\r\n result,\r\n `Athena ${context?.operation ?? 'request'} failed`,\r\n context,\r\n )\r\n }\r\n return result\r\n}\r\n\r\n/**\r\n * Enforces mutation postconditions based on `result.count`.\r\n *\r\n * - Validates success first.\r\n * - Requires a non-null count in the response.\r\n * - Validates `count >= min` (default: `1`).\r\n *\r\n * Useful for guaranteeing that critical writes actually affected rows.\r\n */\r\nexport function requireAffected<T>(\r\n result: AthenaResult<T>,\r\n options?: RequireAffectedOptions,\r\n context?: AthenaOperationContext,\r\n): number {\r\n requireSuccess(result, context)\r\n\r\n const minimum = options?.min ?? 1\r\n const count = result.count\r\n if (count == null) {\r\n throw new AthenaGatewayError({\r\n code: 'UNKNOWN_ERROR',\r\n status: result.status,\r\n message: 'Expected affected row count but response.count is missing',\r\n hint: 'Set call option { count: \"exact\" } for mutation postcondition checks.',\r\n cause: safeStringify(result.raw),\r\n })\r\n }\r\n\r\n if (count < minimum) {\r\n throw new AthenaGatewayError({\r\n code: 'UNKNOWN_ERROR',\r\n status: result.status,\r\n message: `Expected at least ${minimum} affected rows but received ${count}`,\r\n hint: contextHint(context),\r\n cause: safeStringify(result.raw),\r\n })\r\n }\r\n\r\n return count\r\n}\r\n\r\nfunction applyBounds(value: number, options?: IntCoercionOptions): number | null {\r\n if (options?.min !== undefined && value < options.min) return null\r\n if (options?.max !== undefined && value > options.max) return null\r\n return value\r\n}\r\n\r\nfunction parseIntegerString(value: string): number | null {\r\n const normalized = value.trim()\r\n if (!/^[-+]?\\d+$/.test(normalized)) return null\r\n const parsed = Number(normalized)\r\n if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) return null\r\n return parsed\r\n}\r\n\r\n/**\r\n * Safely coerces `unknown` values into finite integers.\r\n *\r\n * Returns `null` when coercion fails or bounds/strict bigint checks are violated.\r\n */\r\nexport function coerceInt(value: unknown, options?: IntCoercionOptions): number | null {\r\n if (value == null) return null\r\n\r\n if (typeof value === 'number') {\r\n if (!Number.isFinite(value) || !Number.isInteger(value)) return null\r\n return applyBounds(value, options)\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const parsed = parseIntegerString(value)\r\n if (parsed == null) return null\r\n return applyBounds(parsed, options)\r\n }\r\n\r\n if (typeof value === 'bigint') {\r\n if (options?.strictBigInt) {\r\n if (value > BigInt(Number.MAX_SAFE_INTEGER) || value < BigInt(Number.MIN_SAFE_INTEGER)) {\r\n return null\r\n }\r\n }\r\n const parsed = Number(value)\r\n if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) return null\r\n return applyBounds(parsed, options)\r\n }\r\n\r\n return null\r\n}\r\n\r\n/**\r\n * Strict integer assertion wrapper around `coerceInt`.\r\n *\r\n * Throws a `TypeError` with the provided label when coercion fails.\r\n */\r\nexport function assertInt(value: unknown, label = 'value', options?: IntCoercionOptions): number {\r\n const parsed = coerceInt(value, options)\r\n if (parsed == null) {\r\n throw new TypeError(`${label} must be a finite integer`)\r\n }\r\n return parsed\r\n}\r\n\r\nfunction defaultShouldRetry(error: unknown): boolean {\r\n const normalized = normalizeAthenaError(error)\r\n return normalized.kind === 'transient' || normalized.kind === 'rate_limit'\r\n}\r\n\r\nfunction computeDelayMs(\r\n attempt: number,\r\n error: unknown,\r\n config: Required<Pick<RetryConfig, 'baseDelayMs' | 'backoff' | 'maxDelayMs' | 'jitter'>>,\r\n): number {\r\n const baseDelay = config.baseDelayMs\r\n const rawDelay =\r\n typeof config.backoff === 'function'\r\n ? config.backoff(attempt, error)\r\n : config.backoff === 'linear'\r\n ? baseDelay * attempt\r\n : baseDelay * Math.pow(2, attempt - 1)\r\n\r\n const safeDelay = Number.isFinite(rawDelay) ? Math.max(0, rawDelay) : 0\r\n const clamped = Math.min(config.maxDelayMs, safeDelay)\r\n const jitterFactor =\r\n typeof config.jitter === 'number'\r\n ? Math.max(0, Math.min(1, config.jitter))\r\n : config.jitter\r\n ? 0.2\r\n : 0\r\n\r\n if (!jitterFactor) return clamped\r\n const deviation = clamped * jitterFactor\r\n const offset = (Math.random() * 2 - 1) * deviation\r\n return Math.max(0, clamped + offset)\r\n}\r\n\r\nfunction sleep(ms: number): Promise<void> {\r\n if (ms <= 0) return Promise.resolve()\r\n return new Promise(resolve => {\r\n setTimeout(resolve, ms)\r\n })\r\n}\r\n\r\n/**\r\n * Retries an async operation with configurable backoff and retry policy.\r\n *\r\n * `retries` represents additional attempts after the first failure.\r\n * By default, transient and rate-limit errors are retried.\r\n */\r\nexport async function withRetry<T>(config: RetryConfig, fn: () => Promise<T>): Promise<T> {\r\n const retries = Math.max(0, Math.trunc(config.retries))\r\n const shouldRetry = config.shouldRetry ?? defaultShouldRetry\r\n const resolvedConfig = {\r\n baseDelayMs: config.baseDelayMs ?? 100,\r\n maxDelayMs: config.maxDelayMs ?? 10_000,\r\n backoff: config.backoff ?? 'exponential',\r\n jitter: config.jitter ?? false,\r\n } satisfies Required<Pick<RetryConfig, 'baseDelayMs' | 'backoff' | 'maxDelayMs' | 'jitter'>>\r\n\r\n for (let attempts = 0; attempts <= retries; attempts += 1) {\r\n try {\r\n return await fn()\r\n } catch (error) {\r\n if (attempts >= retries) {\r\n throw error\r\n }\r\n\r\n const currentAttempt = attempts + 1\r\n const retry = await shouldRetry(error, currentAttempt)\r\n if (!retry) {\r\n throw error\r\n }\r\n\r\n const delay = computeDelayMs(currentAttempt, error, resolvedConfig)\r\n await sleep(delay)\r\n }\r\n }\r\n\r\n throw new Error('withRetry reached an unexpected state')\r\n}\r\n","import type {\r\n AthenaGatewayCallOptions,\r\n AthenaJsonObject,\r\n AthenaJsonValue,\r\n AthenaRpcCallOptions,\r\n} from '../gateway/types.ts'\r\nimport type {\r\n AthenaFromOptions,\r\n AthenaResult,\r\n AthenaSdkClient,\r\n MutationQuery,\r\n RpcQueryBuilder,\r\n SelectChain,\r\n TableQueryBuilder,\r\n UpdateChain,\r\n} from '../client.ts'\r\n\r\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>\r\n\r\ntype AthenaUpsertOptions<Update> = AthenaGatewayCallOptions & {\r\n updateBody?: Update\r\n onConflict?: string | string[]\r\n}\r\n\r\nexport interface AthenaDbModule {\r\n from<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(table: string, options?: AthenaFromOptions): TableQueryBuilder<Row, Insert, Update>\r\n\r\n select<\r\n Row = AthenaRowShape,\r\n SelectedRow = Row,\r\n >(\r\n table: string,\r\n columns?: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n ): SelectChain<Row, SelectedRow>\r\n\r\n insert<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n >(table: string, values: Insert, options?: AthenaGatewayCallOptions): MutationQuery<Row>\r\n insert<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n >(table: string, values: Insert[], options?: AthenaGatewayCallOptions): MutationQuery<Row[]>\r\n\r\n upsert<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(\r\n table: string,\r\n values: Insert,\r\n options?: AthenaUpsertOptions<Update>,\r\n ): MutationQuery<Row>\r\n upsert<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(\r\n table: string,\r\n values: Insert[],\r\n options?: AthenaUpsertOptions<Update>,\r\n ): MutationQuery<Row[]>\r\n\r\n update<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(table: string, values: Update, options?: AthenaGatewayCallOptions): UpdateChain<Row>\r\n\r\n delete<Row = AthenaRowShape>(\r\n table: string,\r\n options?: AthenaGatewayCallOptions & { resourceId?: string },\r\n ): MutationQuery<Row | null>\r\n\r\n rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\r\n fn: string,\r\n args?: Args,\r\n options?: AthenaRpcCallOptions,\r\n ): RpcQueryBuilder<Row>\r\n\r\n query<Row = unknown>(\r\n query: string,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<Row[]>>\r\n}\r\n\r\ninterface AthenaDbModuleFactoryInput {\r\n from: AthenaSdkClient['from']\r\n rpc: AthenaSdkClient['rpc']\r\n query: AthenaSdkClient['query']\r\n}\r\n\r\nexport function createDbModule(input: AthenaDbModuleFactoryInput): AthenaDbModule {\r\n const db: AthenaDbModule = {\r\n from<Row = AthenaRowShape, Insert = Partial<Row>, Update = Partial<Insert>>(\r\n table: string,\r\n options?: AthenaFromOptions,\r\n ) {\r\n return input.from<Row, Insert, Update>(table, options)\r\n },\r\n select<\r\n Row = AthenaRowShape,\r\n SelectedRow = Row,\r\n >(\r\n table: string,\r\n columns?: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n ) {\r\n return input.from<Row>(table).select<SelectedRow>(columns, options)\r\n },\r\n insert<Row = AthenaRowShape, Insert = Partial<Row>>(\r\n table: string,\r\n values: Insert | Insert[],\r\n options?: AthenaGatewayCallOptions,\r\n ): MutationQuery<Row> | MutationQuery<Row[]> {\r\n return Array.isArray(values)\r\n ? input.from<Row, Insert, Partial<Insert>>(table).insert(values, options)\r\n : input.from<Row, Insert, Partial<Insert>>(table).insert(values, options)\r\n },\r\n upsert<Row = AthenaRowShape, Insert = Partial<Row>, Update = Partial<Insert>>(\r\n table: string,\r\n values: Insert | Insert[],\r\n options?: AthenaUpsertOptions<Update>,\r\n ): MutationQuery<Row> | MutationQuery<Row[]> {\r\n return Array.isArray(values)\r\n ? input.from<Row, Insert, Update>(table).upsert(values, options)\r\n : input.from<Row, Insert, Update>(table).upsert(values, options)\r\n },\r\n update<Row = AthenaRowShape, Insert = Partial<Row>, Update = Partial<Insert>>(\r\n table: string,\r\n values: Update,\r\n options?: AthenaGatewayCallOptions,\r\n ) {\r\n return input.from<Row, Insert, Update>(table).update(values, options)\r\n },\r\n delete<Row = AthenaRowShape>(\r\n table: string,\r\n options?: AthenaGatewayCallOptions & { resourceId?: string },\r\n ) {\r\n return input.from<Row>(table).delete(options)\r\n },\r\n rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\r\n fn: string,\r\n args?: Args,\r\n options?: AthenaRpcCallOptions,\r\n ) {\r\n return input.rpc<Row, Args>(fn, args, options)\r\n },\r\n query<Row = unknown>(query: string, options?: AthenaGatewayCallOptions) {\r\n return input.query<Row>(query, options)\r\n },\r\n }\r\n\r\n return db\r\n}\r\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'\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>\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\nexport type AthenaWhereBooleanOperand<Row = AthenaRowShape> = Partial<\n Record<ResolvedFilterColumnKey<Row>, AthenaWherePrimitive | AthenaWhereOperatorInput>\n>\n\nexport type AthenaWhere<Row = AthenaRowShape> = AthenaWhereBooleanOperand<Row> & {\n or?: Array<AthenaWhereBooleanOperand<Row>>\n not?: AthenaWhereBooleanOperand<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 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 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<Exclude<AthenaFilterOperator, 'in' | 'contains' | 'containedBy'>>([\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 Exclude<AthenaFilterOperator, 'in' | 'contains' | 'containedBy'>)) {\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 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.column_cast !== undefined || 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 { buildStructuredSelectTransport } from './gateway/structured-select.ts'\r\nimport type {\r\n AthenaFetchPayload,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayCondition,\r\n AthenaSortBy,\r\n} from './gateway/types.ts'\r\nimport type { AthenaOrderBy, AthenaSelectShape, AthenaWhere } from './query-ast.ts'\r\n\r\ntype AthenaFindManyAstOrderColumn<Row> =\r\n [Extract<keyof NonNullable<Row>, string>] extends [never] ? string : Extract<keyof NonNullable<Row>, string>\r\n\r\nexport interface AthenaSelectExecutionState {\r\n conditions: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n order?: AthenaSortBy\r\n currentPage?: number\r\n pageSize?: number\r\n totalPages?: number\r\n}\r\n\r\nexport type AthenaFindManyAstPayload<\r\n Row,\r\n TSelect extends AthenaSelectShape,\r\n> = {\r\n table_name: string\r\n select: TSelect\r\n where?: AthenaWhere<Row>\r\n orderBy?: AthenaOrderBy<Row>\r\n limit?: number\r\n}\r\n\r\nexport interface AthenaResolvedPagination {\r\n limit?: number\r\n offset?: number\r\n}\r\n\r\nexport interface AthenaTypedSelectQueryInput {\r\n tableName: string\r\n columns: string | string[]\r\n conditions: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n currentPage?: number\r\n pageSize?: number\r\n order?: AthenaSortBy\r\n}\r\n\r\nexport interface AthenaSelectDebugPlan {\r\n columns: string | string[]\r\n conditions?: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n currentPage?: number\r\n pageSize?: number\r\n order?: AthenaSortBy\r\n}\r\n\r\nexport type AthenaSelectTransportPlan =\r\n | {\r\n kind: 'query'\r\n query: string\r\n payload: {\r\n query: string\r\n }\r\n }\r\n | {\r\n kind: 'fetch'\r\n payload: AthenaFetchPayload\r\n debug: AthenaSelectDebugPlan\r\n }\r\n\r\nexport function canUseFindManyAstTransport(state: AthenaSelectExecutionState): boolean {\r\n return (\r\n state.conditions.length === 0 &&\r\n state.offset === undefined &&\r\n state.currentPage === undefined &&\r\n state.pageSize === undefined &&\r\n state.totalPages === undefined\r\n )\r\n}\r\n\r\nexport function toFindManyAstOrder<Row>(order?: AthenaSortBy): AthenaOrderBy<Row> | undefined {\r\n if (!order) {\r\n return undefined\r\n }\r\n return {\r\n column: order.field as AthenaFindManyAstOrderColumn<Row>,\r\n ascending: order.direction !== 'descending',\r\n }\r\n}\r\n\r\nexport function resolvePagination(input: {\r\n limit?: number\r\n offset?: number\r\n currentPage?: number\r\n pageSize?: number\r\n}): AthenaResolvedPagination {\r\n let limit = input.limit\r\n let offset = input.offset\r\n\r\n if (limit === undefined && input.pageSize !== undefined) {\r\n limit = Math.max(0, Math.trunc(input.pageSize))\r\n }\r\n if (\r\n offset === undefined &&\r\n input.pageSize !== undefined &&\r\n input.currentPage !== undefined &&\r\n input.currentPage > 0\r\n ) {\r\n offset = (Math.trunc(input.currentPage) - 1) * Math.max(0, Math.trunc(input.pageSize))\r\n }\r\n\r\n return { limit, offset }\r\n}\r\n\r\nfunction hasTypedEqualityComparison(conditions: AthenaGatewayCondition[] | undefined): boolean {\r\n return (\r\n conditions?.some(\r\n condition =>\r\n condition.operator === 'eq' &&\r\n (condition.value_cast !== undefined || condition.column_cast !== undefined),\r\n ) ?? false\r\n )\r\n}\r\n\r\nexport function createSelectTransportPlan(input: {\r\n tableName: string\r\n columns: string | string[]\r\n state: AthenaSelectExecutionState\r\n options?: AthenaGatewayCallOptions\r\n buildTypedSelectQuery: (input: AthenaTypedSelectQueryInput) => string | null\r\n}): AthenaSelectTransportPlan {\r\n const conditions = input.state.conditions.length\r\n ? input.state.conditions.map(condition => ({ ...condition }))\r\n : undefined\r\n\r\n if (hasTypedEqualityComparison(conditions) && !input.options?.head && !input.options?.count && conditions) {\r\n const query = input.buildTypedSelectQuery({\r\n tableName: input.tableName,\r\n columns: input.columns,\r\n conditions,\r\n limit: input.state.limit,\r\n offset: input.state.offset,\r\n currentPage: input.state.currentPage,\r\n pageSize: input.state.pageSize,\r\n order: input.state.order,\r\n })\r\n if (query) {\r\n return {\r\n kind: 'query',\r\n query,\r\n payload: { query },\r\n }\r\n }\r\n }\r\n\r\n const pagination = resolvePagination({\r\n limit: input.state.limit,\r\n offset: input.state.offset,\r\n currentPage: input.state.currentPage,\r\n pageSize: input.state.pageSize,\r\n })\r\n const stripNulls = input.options?.stripNulls ?? true\r\n const structuredSelectTransport = buildStructuredSelectTransport({\r\n tableName: input.tableName,\r\n columns: input.columns,\r\n conditions,\r\n limit: pagination.limit,\r\n offset: pagination.offset,\r\n order: input.state.order,\r\n stripNulls,\r\n count: input.options?.count,\r\n head: input.options?.head,\r\n })\r\n if (structuredSelectTransport && 'error' in structuredSelectTransport) {\r\n throw new Error(structuredSelectTransport.error)\r\n }\r\n if (structuredSelectTransport) {\r\n const { payload, select } = structuredSelectTransport\r\n return {\r\n kind: 'fetch',\r\n payload,\r\n debug: {\r\n columns: select,\r\n conditions,\r\n limit: pagination.limit,\r\n offset: pagination.offset,\r\n order: input.state.order,\r\n },\r\n }\r\n }\r\n\r\n return {\r\n kind: 'fetch',\r\n payload: {\r\n table_name: input.tableName,\r\n columns: input.columns,\r\n conditions,\r\n limit: input.state.limit,\r\n offset: input.state.offset,\r\n current_page: input.state.currentPage,\r\n page_size: input.state.pageSize,\r\n total_pages: input.state.totalPages,\r\n sort_by: input.state.order,\r\n strip_nulls: stripNulls,\r\n count: input.options?.count,\r\n head: input.options?.head,\r\n },\r\n debug: {\r\n columns: input.columns,\r\n conditions,\r\n limit: input.state.limit,\r\n offset: input.state.offset,\r\n currentPage: input.state.currentPage,\r\n pageSize: input.state.pageSize,\r\n order: input.state.order,\r\n },\r\n }\r\n}\r\n","import type {\r\n AthenaConditionArrayValue,\r\n AthenaConditionCastType,\r\n AthenaConditionOperator,\r\n AthenaConditionValue,\r\n AthenaDeletePayload,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayConnectionOptions,\r\n AthenaGatewayConnectionResult,\r\n AthenaGatewayCondition,\r\n AthenaGatewayErrorDetails,\r\n AthenaGatewayResponse,\r\n AthenaInsertPayload,\r\n AthenaJsonObject,\r\n AthenaJsonValue,\r\n AthenaRpcCallOptions,\r\n AthenaRpcFilter,\r\n AthenaRpcFilterOperator,\r\n AthenaRpcPayload,\r\n AthenaSortBy,\r\n AthenaUpdatePayload,\r\n} from './gateway/types.ts'\r\nimport type { BackendConfig, BackendType } from './gateway/types.ts'\r\nimport { createAthenaGatewayClient } from './gateway/client.ts'\r\nimport { quoteQualifiedIdentifier, quoteSelectColumnToken, quoteSelectColumnsExpression } from './sql-identifiers.ts'\r\nimport { createAuthClient } from './auth/client.ts'\r\nimport type { AthenaAuthBindings, AthenaAuthClientConfig } from './auth/types.ts'\r\nimport { normalizeAthenaError } from './auxiliaries.ts'\r\nimport type { AthenaOperationContext, NormalizedAthenaError } from './auxiliaries.ts'\r\nimport { createDbModule } from './db/module.ts'\r\nimport type { AthenaDbModule } from './db/module.ts'\r\nimport {\r\n compileOrderBy,\r\n compileSelectShape,\r\n compileWhere,\r\n selectShapeUsesRelationSchema,\r\n shouldUseUuidTextComparison,\r\n} from './query-ast.ts'\r\nimport type {\r\n AthenaFindManyOptions,\r\n AthenaFindManyResult,\r\n AthenaSelectShape,\r\n} from './query-ast.ts'\r\nimport {\r\n canUseFindManyAstTransport,\r\n createSelectTransportPlan,\r\n resolvePagination,\r\n toFindManyAstOrder,\r\n} from './query-transport.ts'\r\nimport type { AthenaFindManyAstPayload } from './query-transport.ts'\r\n\r\nexport interface AthenaResult<T> {\r\n data: T | null\r\n error: AthenaResultError | null\r\n statusText?: string | null\r\n /**\r\n * @deprecated Prefer `error?.gatewayCode`, `error?.hint`, and related fields on `error`.\r\n */\r\n errorDetails?: AthenaGatewayErrorDetails | null\r\n status: number\r\n count?: number | null\r\n raw: unknown\r\n}\r\n\r\nexport interface AthenaResultError {\r\n message: string\r\n code: string | null\r\n athenaCode: NormalizedAthenaError['code']\r\n gatewayCode?: AthenaGatewayErrorDetails['code'] | null\r\n kind: NormalizedAthenaError['kind']\r\n category: NormalizedAthenaError['category']\r\n retryable: boolean\r\n details: unknown | null\r\n hint: string | null\r\n status: number\r\n statusText: string | null\r\n constraint?: string\r\n table?: string\r\n operation?: string\r\n endpoint?: AthenaGatewayErrorDetails['endpoint']\r\n method?: AthenaGatewayErrorDetails['method']\r\n requestId?: string\r\n cause?: string\r\n raw: unknown\r\n}\r\n\r\nexport interface AthenaClientExperimentalOptions {\r\n /**\r\n * @deprecated Failed `AthenaResult` values now include normalized structured `error`\r\n * envelopes by default. This flag is retained as a no-op compatibility switch.\r\n */\r\n enableErrorNormalization?: boolean\r\n /**\r\n * Emit execution diagnostics for every query/mutation/RPC invocation.\r\n * Includes payload, synthesized SQL, full outcome, and best-effort callsite metadata.\r\n */\r\n traceQueries?: boolean | AthenaQueryTraceOptions\r\n /**\r\n * Send the original `findMany(...)` AST body for clean object-select reads.\r\n * This requires gateway support and falls back to legacy compiled transport\r\n * when a chain carries filter/pagination state that the AST payload cannot\r\n * represent losslessly yet.\r\n */\r\n findManyAst?: boolean\r\n}\r\n\r\nexport interface AthenaQueryTraceOptions {\r\n /**\r\n * Custom sink for trace events. Defaults to console.info.\r\n */\r\n logger?: (event: AthenaQueryTraceEvent) => void\r\n}\r\n\r\nexport interface AthenaQueryTraceCallsite {\r\n filePath: string\r\n fileName: string\r\n line: number\r\n column: number\r\n frame?: string\r\n functionName?: string\r\n}\r\n\r\nexport interface AthenaQueryTraceEvent {\r\n timestamp: string\r\n durationMs: number\r\n operation: 'select' | 'insert' | 'upsert' | 'update' | 'delete' | 'rpc' | 'query'\r\n endpoint: '/gateway/fetch' | '/gateway/insert' | '/gateway/update' | '/gateway/delete' | '/gateway/rpc' | '/gateway/query' | `/rpc/${string}`\r\n table?: string\r\n functionName?: string\r\n sql: string\r\n payload: unknown\r\n options?: AthenaGatewayCallOptions | AthenaRpcCallOptions\r\n callsite: AthenaQueryTraceCallsite | null\r\n outcome?: {\r\n status: number\r\n error: AthenaResultError | null\r\n errorDetails?: AthenaGatewayErrorDetails | null\r\n count?: number | null\r\n data: unknown\r\n raw: unknown\r\n }\r\n thrownError?: unknown\r\n}\r\n\r\ntype TableBuilderState = {\r\n conditions: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n order?: AthenaSortBy\r\n currentPage?: number\r\n pageSize?: number\r\n totalPages?: number\r\n}\r\n\r\ntype ConditionCastHints = {\r\n valueCast?: AthenaConditionCastType\r\n columnCast?: AthenaConditionCastType\r\n}\r\n\r\ntype MutationSingleResult<Result> = Result extends Array<infer Item> ? Item | null : Result | null\r\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>\r\ntype FilterColumnKey<Row> = Extract<keyof NonNullable<Row>, string>\r\ntype ResolvedFilterColumnKey<Row> = [FilterColumnKey<Row>] extends [never] ? string : FilterColumnKey<Row>\r\nconst DEFAULT_COLUMNS = '*'\r\nconst SAFE_CAST_PATTERN = /^[a-z_][a-z0-9_]*(?:\\[\\])?$/i\r\nconst ATHENA_NORMALIZED_ERROR_KEY = '__athenaNormalizedError' as const\r\nconst QUERY_TRACE_STACK_SKIP_PATTERNS = [\r\n 'src\\\\client.ts',\r\n 'src/client.ts',\r\n 'dist\\\\client.',\r\n 'dist/client.',\r\n 'node_modules\\\\@xylex-group\\\\athena',\r\n 'node_modules/@xylex-group/athena',\r\n 'node:internal',\r\n 'internal/process',\r\n] as const\r\n\r\ntype AthenaTraceOperation = AthenaQueryTraceEvent['operation']\r\ntype AthenaTraceEndpoint = AthenaQueryTraceEvent['endpoint']\r\n\r\ninterface AthenaTraceContext {\r\n operation: AthenaTraceOperation\r\n endpoint: AthenaTraceEndpoint\r\n table?: string\r\n functionName?: string\r\n sql: string\r\n payload: unknown\r\n options?: AthenaGatewayCallOptions | AthenaRpcCallOptions\r\n}\r\n\r\ntype AthenaQueryTracer = {\r\n captureCallsite: () => AthenaQueryTraceCallsite | null\r\n publishSuccess: <T>(\r\n context: AthenaTraceContext,\r\n result: AthenaResult<T>,\r\n durationMs: number,\r\n callsite: AthenaQueryTraceCallsite | null,\r\n ) => void\r\n publishFailure: (\r\n context: AthenaTraceContext,\r\n error: unknown,\r\n durationMs: number,\r\n callsite: AthenaQueryTraceCallsite | null,\r\n ) => void\r\n}\r\n\r\ntype AthenaTraceCallsiteStore = {\r\n resolve: (callsite?: AthenaQueryTraceCallsite | null) => AthenaQueryTraceCallsite | null\r\n}\r\n\r\nexport interface MutationQuery<Result> extends PromiseLike<AthenaResult<Result>> {\r\n select(columns?: string | string[], options?: AthenaGatewayCallOptions): Promise<AthenaResult<Result>>\r\n returning(columns?: string | string[], options?: AthenaGatewayCallOptions): Promise<AthenaResult<Result>>\r\n single(\r\n columns?: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<MutationSingleResult<Result>>>\r\n maybeSingle(\r\n columns?: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<MutationSingleResult<Result>>>\r\n then<TResult1 = AthenaResult<Result>, TResult2 = never>(\r\n onfulfilled?: ((value: AthenaResult<Result>) => TResult1 | PromiseLike<TResult1>) | undefined | null,\r\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null,\r\n ): Promise<TResult1 | TResult2>\r\n catch<TResult = never>(\r\n onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | undefined | null,\r\n ): Promise<AthenaResult<Result> | TResult>\r\n finally(onfinally?: (() => void) | undefined | null): Promise<AthenaResult<Result>>\r\n}\r\n\r\nfunction formatResult<T>(response: AthenaGatewayResponse<T>): AthenaResult<T> {\r\n const result: AthenaResult<T> = {\r\n data: response.data ?? null,\r\n error: null,\r\n errorDetails: response.errorDetails ?? null,\r\n status: response.status,\r\n statusText: response.statusText ?? null,\r\n raw: response.raw,\r\n }\r\n if (response.count !== undefined) {\r\n result.count = response.count\r\n }\r\n return result\r\n}\r\n\r\ntype AthenaResultFormatter = <T>(\r\n response: AthenaGatewayResponse<T>,\r\n context?: AthenaOperationContext,\r\n) => AthenaResult<T>\r\n\r\nfunction attachNormalizedError<T>(\r\n result: AthenaResult<T>,\r\n normalizedError: NormalizedAthenaError,\r\n): void {\r\n Object.defineProperty(result, ATHENA_NORMALIZED_ERROR_KEY, {\r\n value: normalizedError,\r\n enumerable: false,\r\n configurable: true,\r\n writable: false,\r\n })\r\n}\r\n\r\nfunction createResultFormatter(\r\n experimental?: AthenaClientExperimentalOptions,\r\n): AthenaResultFormatter {\r\n void experimental\r\n return <T>(response: AthenaGatewayResponse<T>, context?: AthenaOperationContext): AthenaResult<T> => {\r\n const result = formatResult(response)\r\n if (response.error == null && response.errorDetails == null) {\r\n return result\r\n }\r\n const normalizedError = normalizeAthenaError(\r\n {\r\n ...result,\r\n error: response.error ?? response.errorDetails?.message ?? null,\r\n },\r\n context,\r\n )\r\n result.error = createResultError(response, result, normalizedError)\r\n attachNormalizedError(result, normalizedError)\r\n return result\r\n }\r\n}\r\n\r\nfunction isRecord(value: unknown): value is Record<string, unknown> {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\r\n for (const value of values) {\r\n if (typeof value === 'string' && value.trim().length > 0) {\r\n return value.trim()\r\n }\r\n }\r\n return undefined\r\n}\r\n\r\nfunction resolveStructuredErrorPayload(raw: unknown): Record<string, unknown> | null {\r\n if (!isRecord(raw)) return null\r\n return isRecord(raw.error) ? raw.error : raw\r\n}\r\n\r\nfunction resolveStructuredErrorDetails(payload: Record<string, unknown> | null, message: string): unknown | null {\r\n if (!payload || !('details' in payload)) {\r\n return null\r\n }\r\n const details = payload.details\r\n if (details == null) {\r\n return null\r\n }\r\n if (typeof details === 'string' && details.trim() === message.trim()) {\r\n return null\r\n }\r\n return details\r\n}\r\n\r\nfunction createResultError<T>(\r\n response: AthenaGatewayResponse<T>,\r\n result: AthenaResult<T>,\r\n normalized: NormalizedAthenaError,\r\n): AthenaResultError {\r\n const rawRecord = isRecord(response.raw) ? response.raw : null\r\n const payload = resolveStructuredErrorPayload(response.raw)\r\n const message =\r\n firstNonEmptyString(\r\n response.error,\r\n payload?.message,\r\n payload?.error,\r\n payload?.details,\r\n response.errorDetails?.message,\r\n normalized.message,\r\n ) ?? normalized.message\r\n const statusText =\r\n firstNonEmptyString(response.statusText, rawRecord?.statusText) ?? null\r\n const hint =\r\n firstNonEmptyString(payload?.hint, response.errorDetails?.hint) ?? null\r\n const code =\r\n firstNonEmptyString(payload?.code) ??\r\n normalized.code\r\n const details =\r\n resolveStructuredErrorDetails(payload, message) ??\r\n response.errorDetails?.cause ??\r\n null\r\n\r\n return {\r\n message,\r\n code,\r\n athenaCode: normalized.code,\r\n gatewayCode: response.errorDetails?.code ?? null,\r\n kind: normalized.kind,\r\n category: normalized.category,\r\n retryable: normalized.retryable,\r\n details,\r\n hint,\r\n status: result.status,\r\n statusText,\r\n constraint: normalized.constraint,\r\n table: normalized.table,\r\n operation: normalized.operation,\r\n endpoint: response.errorDetails?.endpoint,\r\n method: response.errorDetails?.method,\r\n requestId: response.errorDetails?.requestId,\r\n cause: response.errorDetails?.cause,\r\n raw: result.raw,\r\n }\r\n}\r\n\r\nfunction parseQueryTraceCallsiteFrame(frame: string): AthenaQueryTraceCallsite | null {\r\n const trimmed = frame.trim()\r\n if (!trimmed) {\r\n return null\r\n }\r\n\r\n let body = trimmed.replace(/^at\\s+/, '')\r\n if (body.startsWith('async ')) {\r\n body = body.slice(6)\r\n }\r\n\r\n let functionName: string | undefined\r\n let location = body\r\n const wrappedMatch = body.match(/^(.*?)\\s+\\((.*)\\)$/)\r\n if (wrappedMatch) {\r\n functionName = wrappedMatch[1].trim() || undefined\r\n location = wrappedMatch[2].trim()\r\n }\r\n\r\n const locationMatch = location.match(/^(.*):(\\d+):(\\d+)$/)\r\n if (!locationMatch) {\r\n return null\r\n }\r\n\r\n const filePath = locationMatch[1].replace(/^file:\\/\\//, '')\r\n const line = Number(locationMatch[2])\r\n const column = Number(locationMatch[3])\r\n if (!Number.isFinite(line) || !Number.isFinite(column)) {\r\n return null\r\n }\r\n\r\n const normalizedPath = filePath.replace(/\\\\/g, '/')\r\n const fileName = normalizedPath.split('/').at(-1) ?? filePath\r\n return {\r\n filePath,\r\n fileName,\r\n line,\r\n column,\r\n frame: trimmed,\r\n functionName,\r\n }\r\n}\r\n\r\nfunction captureQueryTraceCallsite(): AthenaQueryTraceCallsite | null {\r\n const stack = new Error().stack\r\n if (!stack) return null\r\n const frames = stack\r\n .split('\\n')\r\n .slice(2)\r\n .map(frame => frame.trim())\r\n .filter(Boolean)\r\n\r\n for (const frame of frames) {\r\n if (QUERY_TRACE_STACK_SKIP_PATTERNS.some(pattern => frame.includes(pattern))) {\r\n continue\r\n }\r\n const callsite = parseQueryTraceCallsiteFrame(frame)\r\n if (callsite) return callsite\r\n }\r\n\r\n const fallback = frames.find(frame => !frame.includes('captureQueryTraceCallsite'))\r\n return fallback ? parseQueryTraceCallsiteFrame(fallback) : null\r\n}\r\n\r\nfunction defaultQueryTraceLogger(event: AthenaQueryTraceEvent): void {\r\n const target = event.table ?? event.functionName ?? 'gateway'\r\n const outcomeState = event.outcome?.error ? 'error' : 'ok'\r\n const banner = `[athena-js][trace] ${event.operation.toUpperCase()} ${event.endpoint} ${target} ${event.durationMs}ms ${outcomeState}`\r\n console.info(banner, event)\r\n}\r\n\r\nfunction captureTraceCallsite(tracer?: AthenaQueryTracer): AthenaQueryTraceCallsite | null {\r\n return tracer?.captureCallsite() ?? null\r\n}\r\n\r\nfunction createTraceCallsiteStore(\r\n tracer?: AthenaQueryTracer,\r\n initialCallsite?: AthenaQueryTraceCallsite | null,\r\n): AthenaTraceCallsiteStore {\r\n let storedCallsite = initialCallsite ?? undefined\r\n\r\n return {\r\n resolve(callsite) {\r\n if (callsite) {\r\n storedCallsite = callsite\r\n return callsite\r\n }\r\n if (storedCallsite !== undefined) {\r\n return storedCallsite\r\n }\r\n const capturedCallsite = captureTraceCallsite(tracer)\r\n if (capturedCallsite) {\r\n storedCallsite = capturedCallsite\r\n }\r\n return capturedCallsite\r\n },\r\n }\r\n}\r\n\r\nfunction createQueryTracer(experimental?: AthenaClientExperimentalOptions): AthenaQueryTracer | undefined {\r\n const traceOption = experimental?.traceQueries\r\n if (!traceOption) {\r\n return undefined\r\n }\r\n\r\n const logger =\r\n typeof traceOption === 'object' && traceOption.logger ? traceOption.logger : defaultQueryTraceLogger\r\n\r\n const emit = (event: AthenaQueryTraceEvent) => {\r\n try {\r\n logger(event)\r\n } catch (error) {\r\n console.warn('[athena-js][trace] logger failed', error)\r\n }\r\n }\r\n\r\n return {\r\n captureCallsite: captureQueryTraceCallsite,\r\n publishSuccess<T>(\r\n context: AthenaTraceContext,\r\n result: AthenaResult<T>,\r\n durationMs: number,\r\n callsite: AthenaQueryTraceCallsite | null,\r\n ) {\r\n emit({\r\n timestamp: new Date().toISOString(),\r\n durationMs,\r\n operation: context.operation,\r\n endpoint: context.endpoint,\r\n table: context.table,\r\n functionName: context.functionName,\r\n sql: context.sql,\r\n payload: context.payload,\r\n options: context.options,\r\n callsite,\r\n outcome: {\r\n status: result.status,\r\n error: result.error,\r\n errorDetails: result.errorDetails ?? null,\r\n count: result.count ?? null,\r\n data: result.data,\r\n raw: result.raw,\r\n },\r\n })\r\n },\r\n publishFailure(\r\n context: AthenaTraceContext,\r\n error: unknown,\r\n durationMs: number,\r\n callsite: AthenaQueryTraceCallsite | null,\r\n ) {\r\n emit({\r\n timestamp: new Date().toISOString(),\r\n durationMs,\r\n operation: context.operation,\r\n endpoint: context.endpoint,\r\n table: context.table,\r\n functionName: context.functionName,\r\n sql: context.sql,\r\n payload: context.payload,\r\n options: context.options,\r\n callsite,\r\n thrownError: error,\r\n })\r\n },\r\n }\r\n}\r\n\r\nasync function executeWithQueryTrace<T>(\r\n tracer: AthenaQueryTracer | undefined,\r\n context: AthenaTraceContext,\r\n runner: () => Promise<AthenaResult<T>>,\r\n callsiteOverride?: AthenaQueryTraceCallsite | null,\r\n): Promise<AthenaResult<T>> {\r\n if (!tracer) {\r\n return runner()\r\n }\r\n\r\n const callsite = callsiteOverride ?? tracer.captureCallsite()\r\n const startedAt = Date.now()\r\n try {\r\n const result = await runner()\r\n tracer.publishSuccess(context, result, Date.now() - startedAt, callsite)\r\n return result\r\n } catch (error) {\r\n tracer.publishFailure(context, error, Date.now() - startedAt, callsite)\r\n throw error\r\n }\r\n}\r\n\r\nfunction toSingleResult<Result>(response: AthenaResult<Result>): AthenaResult<MutationSingleResult<Result>> {\r\n const payload = response.data\r\n const singleData =\r\n Array.isArray(payload) ? (payload.length ? payload[0] : null) : payload ?? null\r\n return {\r\n ...response,\r\n data: singleData as MutationSingleResult<Result>,\r\n }\r\n}\r\n\r\nfunction mergeOptions<T extends object>(...options: Array<T | undefined>): T | undefined {\r\n return options.reduce<T | undefined>((acc, next) => {\r\n if (!next) return acc\r\n return { ...acc, ...next }\r\n }, undefined)\r\n}\r\n\r\nfunction asAthenaJsonObject(value: unknown): AthenaJsonObject {\r\n return value as unknown as AthenaJsonObject\r\n}\r\n\r\nfunction asAthenaJsonObjectArray(values: unknown[]): AthenaJsonObject[] {\r\n return values as unknown as AthenaJsonObject[]\r\n}\r\n\r\nfunction createMutationQuery<Result>(\r\n executor: (\r\n columns?: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => Promise<AthenaResult<Result>>,\r\n defaultColumns: string | string[] | null = DEFAULT_COLUMNS,\r\n tracer?: AthenaQueryTracer,\r\n initialCallsite?: AthenaQueryTraceCallsite | null,\r\n): MutationQuery<Result> {\r\n let selectedColumns: string | string[] | undefined = defaultColumns === null ? undefined : defaultColumns\r\n let selectedOptions: AthenaGatewayCallOptions | undefined\r\n let promise: Promise<AthenaResult<Result>> | null = null\r\n const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite)\r\n\r\n const run = (\r\n columns?: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const payloadColumns = columns ?? selectedColumns\r\n const payloadOptions = options ?? selectedOptions\r\n if (!promise) {\r\n promise = executor(payloadColumns, payloadOptions, callsiteStore.resolve(callsite))\r\n }\r\n return promise\r\n }\r\n\r\n const mutationQuery: MutationQuery<Result> = {\r\n select(columns = selectedColumns, options) {\r\n selectedColumns = columns\r\n selectedOptions = options ?? selectedOptions\r\n return run(columns, options, captureTraceCallsite(tracer))\r\n },\r\n returning(columns = selectedColumns, options) {\r\n return mutationQuery.select(columns, options)\r\n },\r\n single(columns = selectedColumns, options) {\r\n selectedColumns = columns\r\n selectedOptions = options ?? selectedOptions\r\n return run(columns, options, captureTraceCallsite(tracer)).then(toSingleResult)\r\n },\r\n maybeSingle(columns = selectedColumns, options) {\r\n return mutationQuery.single(columns, options)\r\n },\r\n then(onfulfilled, onrejected) {\r\n return run(selectedColumns, selectedOptions).then(onfulfilled, onrejected)\r\n },\r\n catch(onrejected) {\r\n return run(selectedColumns, selectedOptions).catch(onrejected)\r\n },\r\n finally(onfinally) {\r\n return run(selectedColumns, selectedOptions).finally(onfinally)\r\n },\r\n }\r\n\r\n return mutationQuery\r\n}\r\n\r\nexport interface OrderOptions {\r\n ascending?: boolean\r\n}\r\n\r\n/** Shared filter chain - supports eq, limit, etc. in any order relative to select/update */\r\ninterface FilterChain<Self, Row> {\r\n eq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n eqCast(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue, cast: AthenaConditionCastType): Self\r\n eqUuid(column: ResolvedFilterColumnKey<Row>, value: string): Self\r\n match(filters: Partial<Record<ResolvedFilterColumnKey<Row>, AthenaConditionValue>>): Self\r\n range(from: number, to: number): Self\r\n limit(count: number): Self\r\n offset(count: number): Self\r\n currentPage(value: number): Self\r\n pageSize(value: number): Self\r\n totalPages(value: number): Self\r\n order(column: ResolvedFilterColumnKey<Row>, options?: OrderOptions): Self\r\n gt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n gte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n lt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n lte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n neq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n like(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n ilike(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n is(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\r\n in(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\r\n contains(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\r\n containedBy(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\r\n not(\r\n columnOrExpression: ResolvedFilterColumnKey<Row> | string,\r\n operator?: AthenaConditionOperator,\r\n value?: AthenaConditionValue,\r\n ): Self\r\n or(expression: string): Self\r\n}\r\n\r\n/** Chain returned by select() - supports filters and single/maybeSingle before execution */\r\nexport interface SelectChain<Row, SelectedRow = Row>\r\n extends FilterChain<SelectChain<Row, SelectedRow>, Row>, PromiseLike<AthenaResult<SelectedRow[]>> {\r\n single<T = SelectedRow>(\r\n columns?: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<T | null>>\r\n maybeSingle<T = SelectedRow>(\r\n columns?: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<T | null>>\r\n}\r\n\r\n/** Chain returned by update() - supports filters before execution, plus select/returning */\r\nexport interface UpdateChain<Row>\r\n extends FilterChain<UpdateChain<Row>, Row>, MutationQuery<Row[]> {}\r\n\r\ninterface RpcFilterChain<Self> {\r\n eq(column: string, value: AthenaConditionValue): Self\r\n neq(column: string, value: AthenaConditionValue): Self\r\n gt(column: string, value: AthenaConditionValue): Self\r\n gte(column: string, value: AthenaConditionValue): Self\r\n lt(column: string, value: AthenaConditionValue): Self\r\n lte(column: string, value: AthenaConditionValue): Self\r\n like(column: string, value: AthenaConditionValue): Self\r\n ilike(column: string, value: AthenaConditionValue): Self\r\n is(column: string, value: AthenaConditionValue): Self\r\n in(column: string, values: AthenaConditionArrayValue): Self\r\n}\r\n\r\nexport interface RpcOrderOptions {\r\n ascending?: boolean\r\n}\r\n\r\nexport interface RpcQueryBuilder<Row>\r\n extends RpcFilterChain<RpcQueryBuilder<Row>>, PromiseLike<AthenaResult<Row[]>> {\r\n select(columns?: string | string[], options?: AthenaRpcCallOptions): Promise<AthenaResult<Row[]>>\r\n single<T = Row>(columns?: string | string[], options?: AthenaRpcCallOptions): Promise<AthenaResult<T | null>>\r\n maybeSingle<T = Row>(\r\n columns?: string | string[],\r\n options?: AthenaRpcCallOptions,\r\n ): Promise<AthenaResult<T | null>>\r\n order(column: string, options?: RpcOrderOptions): RpcQueryBuilder<Row>\r\n limit(count: number): RpcQueryBuilder<Row>\r\n offset(count: number): RpcQueryBuilder<Row>\r\n range(from: number, to: number): RpcQueryBuilder<Row>\r\n}\r\n\r\nexport interface AthenaFromOptions {\r\n schema?: string\r\n}\r\n\r\nexport interface TableQueryBuilder<\r\n Row,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n TContext = unknown,\r\n> extends FilterChain<TableQueryBuilder<Row, Insert, Update, TContext>, Row> {\r\n select<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions): SelectChain<Row, T>\r\n findMany<const TSelect extends AthenaSelectShape>(\r\n options: AthenaFindManyOptions<Row, TSelect>,\r\n ): Promise<AthenaResult<Array<AthenaFindManyResult<Row, TSelect, TContext>>>>\r\n insert(values: Insert, options?: AthenaGatewayCallOptions): MutationQuery<Row>\r\n insert(values: Insert[], options?: AthenaGatewayCallOptions): MutationQuery<Row[]>\r\n upsert(\r\n values: Insert,\r\n options?: AthenaGatewayCallOptions & {\r\n updateBody?: Update\r\n onConflict?: string | string[]\r\n },\r\n ): MutationQuery<Row>\r\n upsert(\r\n values: Insert[],\r\n options?: AthenaGatewayCallOptions & {\r\n updateBody?: Update\r\n onConflict?: string | string[]\r\n },\r\n ): MutationQuery<Row[]>\r\n update(values: Update, options?: AthenaGatewayCallOptions): UpdateChain<Row>\r\n delete(options?: AthenaGatewayCallOptions & { resourceId?: string }): MutationQuery<Row | null>\r\n single<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions): Promise<AthenaResult<T | null>>\r\n maybeSingle<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions): Promise<AthenaResult<T | null>>\r\n reset(): TableQueryBuilder<Row, Insert, Update, TContext>\r\n}\r\n\r\nfunction getResourceId(state: TableBuilderState): string | undefined {\r\n const candidate = state.conditions.find(\r\n condition =>\r\n condition.operator === 'eq' &&\r\n (condition.column === 'resource_id' || condition.column === 'id'),\r\n )\r\n return candidate?.value?.toString()\r\n}\r\n\r\nfunction stringifyFilterValue(value: AthenaConditionValue | AthenaConditionArrayValue | string): string {\r\n if (Array.isArray(value)) {\r\n return value.join(',')\r\n }\r\n return String(value)\r\n}\r\n\r\nfunction normalizeCast(cast: AthenaConditionCastType): string {\r\n const normalized = cast.trim().toLowerCase()\r\n if (!SAFE_CAST_PATTERN.test(normalized)) {\r\n throw new Error(`Invalid cast type \"${cast}\"`)\r\n }\r\n return normalized\r\n}\r\n\r\nfunction escapeSqlStringLiteral(value: string): string {\r\n return value.replace(/'/g, \"''\")\r\n}\r\n\r\nfunction toSqlLiteral(value: AthenaConditionValue): string {\r\n if (value === null) return 'NULL'\r\n if (typeof value === 'number') return Number.isFinite(value) ? String(value) : 'NULL'\r\n if (typeof value === 'boolean') return value ? 'TRUE' : 'FALSE'\r\n return `'${escapeSqlStringLiteral(value)}'`\r\n}\r\n\r\nfunction withCast(expression: string, cast?: AthenaConditionCastType): string {\r\n if (!cast) return expression\r\n return `${expression}::${normalizeCast(cast)}`\r\n}\r\n\r\nfunction buildSelectColumnsClause(columns: string | string[]): string {\r\n if (Array.isArray(columns)) {\r\n return columns.map(column => quoteSelectColumnToken(column)).join(', ')\r\n }\r\n return quoteSelectColumnsExpression(columns)\r\n}\r\n\r\ninterface ParsedIdentifierSegment {\r\n normalizedValue: string\r\n}\r\n\r\nfunction parseIdentifierSegment(input: string): ParsedIdentifierSegment | null {\r\n const trimmed = input.trim()\r\n if (!trimmed) return null\r\n\r\n if (!trimmed.startsWith('\"')) {\r\n return {\r\n normalizedValue: trimmed.toLowerCase(),\r\n }\r\n }\r\n\r\n let value = ''\r\n let index = 1\r\n let closed = false\r\n while (index < trimmed.length) {\r\n const char = trimmed[index]\r\n const next = index + 1 < trimmed.length ? trimmed[index + 1] : ''\r\n if (char === '\"' && next === '\"') {\r\n value += '\"'\r\n index += 2\r\n continue\r\n }\r\n if (char === '\"') {\r\n closed = true\r\n index += 1\r\n break\r\n }\r\n value += char\r\n index += 1\r\n }\r\n\r\n if (!closed || trimmed.slice(index).trim().length > 0 || !value.trim()) {\r\n return null\r\n }\r\n\r\n return {\r\n normalizedValue: value,\r\n }\r\n}\r\n\r\nfunction splitQualifiedTableName(tableName: string): { schemaSegment: string } | null {\r\n const trimmed = tableName.trim()\r\n let inQuotes = false\r\n for (let index = 0; index < trimmed.length; index += 1) {\r\n const char = trimmed[index]\r\n const next = index + 1 < trimmed.length ? trimmed[index + 1] : ''\r\n if (char === '\"') {\r\n if (inQuotes && next === '\"') {\r\n index += 1\r\n continue\r\n }\r\n inQuotes = !inQuotes\r\n continue\r\n }\r\n if (char === '.' && !inQuotes) {\r\n const schemaSegment = trimmed.slice(0, index).trim()\r\n const tableSegment = trimmed.slice(index + 1).trim()\r\n if (!schemaSegment || !tableSegment) {\r\n return null\r\n }\r\n return { schemaSegment }\r\n }\r\n }\r\n return null\r\n}\r\n\r\nfunction resolveTableNameForCall(tableName: string, schema: string | undefined): string {\r\n if (!schema) return tableName\r\n const normalizedSchema = schema.trim()\r\n if (!normalizedSchema) {\r\n throw new Error('schema option must be a non-empty string')\r\n }\r\n const normalizedTableName = tableName.trim()\r\n const parsedSchema = parseIdentifierSegment(normalizedSchema)\r\n if (!parsedSchema) {\r\n throw new Error('schema option must be a non-empty string')\r\n }\r\n const qualified = splitQualifiedTableName(normalizedTableName)\r\n if (qualified) {\r\n const parsedTableSchema = parseIdentifierSegment(qualified.schemaSegment)\r\n const sameSchema = parsedTableSchema\r\n ? parsedTableSchema.normalizedValue === parsedSchema.normalizedValue\r\n : normalizedTableName.startsWith(`${normalizedSchema}.`)\r\n if (sameSchema) {\r\n return normalizedTableName\r\n }\r\n throw new Error(\r\n `schema option \"${normalizedSchema}\" conflicts with schema-qualified table \"${normalizedTableName}\"`,\r\n )\r\n }\r\n return `${normalizedSchema}.${normalizedTableName}`\r\n}\r\n\r\nfunction conditionToSqlClause(condition: AthenaGatewayCondition): string | null {\r\n if (!condition.column) return null\r\n const column = withCast(quoteQualifiedIdentifier(condition.column), condition.column_cast)\r\n const value = condition.value\r\n const sqlOperator = {\r\n eq: '=',\r\n neq: '!=',\r\n gt: '>',\r\n gte: '>=',\r\n lt: '<',\r\n lte: '<=',\r\n like: 'LIKE',\r\n ilike: 'ILIKE',\r\n } as const\r\n\r\n switch (condition.operator) {\r\n case 'eq':\r\n case 'neq':\r\n case 'gt':\r\n case 'gte':\r\n case 'lt':\r\n case 'lte':\r\n case 'like':\r\n case 'ilike': {\r\n if (Array.isArray(value) || value === undefined) return null\r\n const rhs = withCast(toSqlLiteral(value), condition.value_cast)\r\n return `${column} ${sqlOperator[condition.operator]} ${rhs}`\r\n }\r\n case 'is': {\r\n if (value === null) return `${column} IS NULL`\r\n if (value === true) return `${column} IS TRUE`\r\n if (value === false) return `${column} IS FALSE`\r\n return null\r\n }\r\n case 'in': {\r\n if (!Array.isArray(value)) return null\r\n if (value.length === 0) return 'FALSE'\r\n const values = value.map(item => withCast(toSqlLiteral(item), condition.value_cast))\r\n return `${column} IN (${values.join(', ')})`\r\n }\r\n default:\r\n return null\r\n }\r\n}\r\n\r\nfunction buildTypedSelectQuery(input: {\r\n tableName: string\r\n columns: string | string[]\r\n conditions: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n currentPage?: number\r\n pageSize?: number\r\n order?: AthenaSortBy\r\n}): string | null {\r\n const whereClauses: string[] = []\r\n for (const condition of input.conditions) {\r\n const clause = conditionToSqlClause(condition)\r\n if (!clause) return null\r\n whereClauses.push(clause)\r\n }\r\n\r\n let limit = input.limit\r\n let offset = input.offset\r\n if (limit === undefined && input.pageSize !== undefined) {\r\n limit = input.pageSize\r\n }\r\n if (\r\n offset === undefined &&\r\n input.pageSize !== undefined &&\r\n input.currentPage !== undefined &&\r\n input.currentPage > 0\r\n ) {\r\n offset = (input.currentPage - 1) * input.pageSize\r\n }\r\n\r\n const sqlParts = [\r\n `SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\r\n ]\r\n\r\n if (whereClauses.length > 0) {\r\n sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\r\n }\r\n\r\n if (input.order?.field) {\r\n const direction = input.order.direction === 'descending' ? 'DESC' : 'ASC'\r\n sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(input.order.field)} ${direction}`)\r\n }\r\n\r\n if (limit !== undefined) {\r\n sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`)\r\n }\r\n\r\n if (offset !== undefined) {\r\n sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`)\r\n }\r\n\r\n return `${sqlParts.join(' ')};`\r\n}\r\n\r\nfunction sanitizeSqlComment(comment: string): string {\r\n return comment.replace(/\\*\\//g, '* /')\r\n}\r\n\r\nfunction toSqlJsonLiteral(value: AthenaJsonValue | undefined): string {\r\n if (value === undefined) return 'DEFAULT'\r\n if (\r\n value === null ||\r\n typeof value === 'string' ||\r\n typeof value === 'number' ||\r\n typeof value === 'boolean'\r\n ) {\r\n return toSqlLiteral(value)\r\n }\r\n return `'${escapeSqlStringLiteral(JSON.stringify(value))}'::jsonb`\r\n}\r\n\r\nfunction conditionToDebugSqlClause(condition: AthenaGatewayCondition): string {\r\n const exact = conditionToSqlClause(condition)\r\n if (exact) return exact\r\n\r\n const rawCondition = sanitizeSqlComment(JSON.stringify(condition))\r\n if (!condition.column) {\r\n return `TRUE /* unsupported condition: ${rawCondition} */`\r\n }\r\n\r\n const column = withCast(quoteQualifiedIdentifier(condition.column), condition.column_cast)\r\n const value = condition.value\r\n const rhs = withCast(toSqlJsonLiteral(value as AthenaJsonValue | undefined), condition.value_cast)\r\n\r\n switch (condition.operator) {\r\n case 'contains':\r\n return `${column} @> ${rhs}`\r\n case 'containedBy':\r\n return `${column} <@ ${rhs}`\r\n case 'not':\r\n return `TRUE /* NOT expression passthrough: ${rawCondition} */`\r\n case 'or':\r\n return `TRUE /* OR expression passthrough: ${rawCondition} */`\r\n default:\r\n return `TRUE /* unsupported condition: ${rawCondition} */`\r\n }\r\n}\r\n\r\nfunction appendOrderLimitOffset(\r\n sqlParts: string[],\r\n order?: AthenaSortBy,\r\n limit?: number,\r\n offset?: number,\r\n) {\r\n if (order?.field) {\r\n const direction = order.direction === 'descending' ? 'DESC' : 'ASC'\r\n sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(order.field)} ${direction}`)\r\n }\r\n if (limit !== undefined) {\r\n sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`)\r\n }\r\n if (offset !== undefined) {\r\n sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`)\r\n }\r\n}\r\n\r\nfunction buildDebugSelectQuery(input: {\r\n tableName: string\r\n columns: string | string[]\r\n conditions?: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n currentPage?: number\r\n pageSize?: number\r\n order?: AthenaSortBy\r\n}): string {\r\n const sqlParts = [\r\n `SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\r\n ]\r\n if (input.conditions?.length) {\r\n const whereClauses = input.conditions.map(conditionToDebugSqlClause)\r\n sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\r\n }\r\n const pagination = resolvePagination(input)\r\n appendOrderLimitOffset(sqlParts, input.order, pagination.limit, pagination.offset)\r\n return `${sqlParts.join(' ')};`\r\n}\r\n\r\nfunction resolveDebugTableIdentifier(tableName: string | undefined): string {\r\n if (!tableName?.trim()) {\r\n return '\"__unknown_table__\"'\r\n }\r\n return quoteQualifiedIdentifier(tableName)\r\n}\r\n\r\nfunction buildInsertDebugSql(payload: AthenaInsertPayload): string {\r\n const rows = Array.isArray(payload.insert_body)\r\n ? payload.insert_body\r\n : [payload.insert_body]\r\n const columns: string[] = []\r\n const seen = new Set<string>()\r\n for (const row of rows) {\r\n for (const column of Object.keys(row)) {\r\n if (seen.has(column)) continue\r\n seen.add(column)\r\n columns.push(column)\r\n }\r\n }\r\n\r\n const sqlParts = [`INSERT INTO ${quoteQualifiedIdentifier(payload.table_name)}`]\r\n\r\n if (!rows.length || !columns.length) {\r\n sqlParts.push('DEFAULT VALUES')\r\n if (rows.length > 1) {\r\n sqlParts.push(`/* trace: ${rows.length} rows collapsed to DEFAULT VALUES */`)\r\n }\r\n } else {\r\n const valuesClause = rows\r\n .map(row => {\r\n const values = columns.map(column => {\r\n const hasColumn = Object.prototype.hasOwnProperty.call(row, column)\r\n if (!hasColumn) {\r\n return payload.default_to_null ? 'NULL' : 'DEFAULT'\r\n }\r\n const rowValue = (row as Record<string, AthenaJsonValue | undefined>)[column]\r\n return toSqlJsonLiteral(rowValue)\r\n })\r\n return `(${values.join(', ')})`\r\n })\r\n .join(', ')\r\n const columnClause = columns.map(column => quoteQualifiedIdentifier(column)).join(', ')\r\n sqlParts.push(`(${columnClause})`)\r\n sqlParts.push(`VALUES ${valuesClause}`)\r\n }\r\n\r\n if (payload.on_conflict) {\r\n const conflictColumns = Array.isArray(payload.on_conflict)\r\n ? payload.on_conflict.map(column => quoteQualifiedIdentifier(column)).join(', ')\r\n : payload.on_conflict\r\n if (payload.update_body && Object.keys(payload.update_body).length > 0) {\r\n const assignments = Object.entries(payload.update_body).map(([column, value]) =>\r\n `${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`,\r\n )\r\n sqlParts.push(`ON CONFLICT (${conflictColumns}) DO UPDATE SET ${assignments.join(', ')}`)\r\n } else {\r\n sqlParts.push(`ON CONFLICT (${conflictColumns}) DO NOTHING`)\r\n }\r\n }\r\n\r\n if (payload.columns) {\r\n sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`)\r\n }\r\n\r\n return `${sqlParts.join(' ')};`\r\n}\r\n\r\nfunction buildUpdateDebugSql(payload: AthenaUpdatePayload): string {\r\n const set = payload.set ?? payload.data ?? {}\r\n const assignments = Object.entries(set).map(([column, value]) =>\r\n `${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`,\r\n )\r\n const sqlParts = [\r\n `UPDATE ${resolveDebugTableIdentifier(payload.table_name)} SET ${assignments.length ? assignments.join(', ') : '/* empty set */'}`,\r\n ]\r\n if (payload.conditions?.length) {\r\n const whereClauses = payload.conditions.map(conditionToDebugSqlClause)\r\n sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\r\n }\r\n const pagination = resolvePagination({\r\n currentPage: payload.current_page,\r\n pageSize: payload.page_size,\r\n })\r\n appendOrderLimitOffset(sqlParts, payload.sort_by, pagination.limit, pagination.offset)\r\n if (payload.columns) {\r\n sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`)\r\n }\r\n return `${sqlParts.join(' ')};`\r\n}\r\n\r\nfunction buildDeleteDebugSql(payload: AthenaDeletePayload): string {\r\n const sqlParts = [`DELETE FROM ${quoteQualifiedIdentifier(payload.table_name)}`]\r\n const whereClauses: string[] = []\r\n if (payload.resource_id) {\r\n whereClauses.push(`\"resource_id\" = ${toSqlLiteral(payload.resource_id)}`)\r\n }\r\n if (payload.conditions?.length) {\r\n whereClauses.push(...payload.conditions.map(conditionToDebugSqlClause))\r\n }\r\n if (whereClauses.length) {\r\n sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\r\n }\r\n const pagination = resolvePagination({\r\n currentPage: payload.current_page,\r\n pageSize: payload.page_size,\r\n })\r\n appendOrderLimitOffset(sqlParts, payload.sort_by, pagination.limit, pagination.offset)\r\n if (payload.columns) {\r\n sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`)\r\n }\r\n return `${sqlParts.join(' ')};`\r\n}\r\n\r\nfunction rpcFilterToSqlClause(filter: AthenaRpcFilter): string {\r\n const column = quoteQualifiedIdentifier(filter.column)\r\n const value = filter.value\r\n switch (filter.operator) {\r\n case 'eq':\r\n case 'neq':\r\n case 'gt':\r\n case 'gte':\r\n case 'lt':\r\n case 'lte':\r\n case 'like':\r\n case 'ilike': {\r\n if (value === undefined || Array.isArray(value)) {\r\n return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\r\n }\r\n const operatorMap = {\r\n eq: '=',\r\n neq: '!=',\r\n gt: '>',\r\n gte: '>=',\r\n lt: '<',\r\n lte: '<=',\r\n like: 'LIKE',\r\n ilike: 'ILIKE',\r\n } as const\r\n return `${column} ${operatorMap[filter.operator]} ${toSqlLiteral(value)}`\r\n }\r\n case 'is':\r\n if (value === null) return `${column} IS NULL`\r\n if (value === true) return `${column} IS TRUE`\r\n if (value === false) return `${column} IS FALSE`\r\n return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\r\n case 'in':\r\n if (!Array.isArray(value)) {\r\n return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\r\n }\r\n if (value.length === 0) return 'FALSE'\r\n return `${column} IN (${value.map(item => toSqlLiteral(item)).join(', ')})`\r\n default:\r\n return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\r\n }\r\n}\r\n\r\nfunction buildRpcDebugSql(payload: AthenaRpcPayload): string {\r\n const argsEntries = payload.args ? Object.entries(payload.args) : []\r\n const argsClause = argsEntries\r\n .map(([key, value]) => `${quoteQualifiedIdentifier(key)} => ${toSqlJsonLiteral(value as AthenaJsonValue)}`)\r\n .join(', ')\r\n const functionRef = payload.schema\r\n ? `${quoteQualifiedIdentifier(payload.schema)}.${quoteQualifiedIdentifier(payload.function)}`\r\n : quoteQualifiedIdentifier(payload.function)\r\n const sqlParts = [\r\n `SELECT ${payload.select ? quoteSelectColumnsExpression(payload.select) : '*'} FROM ${functionRef}(${argsClause})`,\r\n ]\r\n if (payload.filters?.length) {\r\n sqlParts.push(`WHERE ${payload.filters.map(rpcFilterToSqlClause).join(' AND ')}`)\r\n }\r\n if (payload.order?.column) {\r\n const direction = payload.order.ascending === false ? 'DESC' : 'ASC'\r\n sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(payload.order.column)} ${direction}`)\r\n }\r\n if (payload.limit !== undefined) {\r\n sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(payload.limit))}`)\r\n }\r\n if (payload.offset !== undefined) {\r\n sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(payload.offset))}`)\r\n }\r\n return `${sqlParts.join(' ')};`\r\n}\r\n\r\nfunction createFilterMethods<Self, Row>(\r\n state: TableBuilderState,\r\n addCondition: (\r\n operator: AthenaConditionOperator,\r\n column?: string,\r\n value?: AthenaConditionValue | AthenaConditionArrayValue | string,\r\n hints?: ConditionCastHints,\r\n ) => void,\r\n self: Self,\r\n): FilterChain<Self, Row> {\r\n return {\r\n eq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n const columnName = String(column)\r\n if (shouldUseUuidTextComparison(columnName, value)) {\r\n addCondition('eq', columnName, value, { columnCast: 'text' })\r\n } else {\r\n addCondition('eq', columnName, value)\r\n }\r\n return self\r\n },\r\n eqCast(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue, cast: AthenaConditionCastType) {\r\n addCondition('eq', String(column), value, { valueCast: cast })\r\n return self\r\n },\r\n eqUuid(column: ResolvedFilterColumnKey<Row>, value: string) {\r\n addCondition('eq', String(column), value, { valueCast: 'uuid' })\r\n return self\r\n },\r\n match(filters: Partial<Record<ResolvedFilterColumnKey<Row>, AthenaConditionValue>>) {\r\n Object.entries(filters as Record<string, AthenaConditionValue | undefined>).forEach(([column, value]) => {\r\n if (value === undefined) {\r\n return\r\n }\r\n if (shouldUseUuidTextComparison(column, value)) {\r\n addCondition('eq', column, value, { columnCast: 'text' })\r\n } else {\r\n addCondition('eq', column, value)\r\n }\r\n })\r\n return self\r\n },\r\n range(from: number, to: number) {\r\n state.offset = from\r\n state.limit = to - from + 1\r\n return self\r\n },\r\n limit(count: number) {\r\n state.limit = count\r\n return self\r\n },\r\n offset(count: number) {\r\n state.offset = count\r\n return self\r\n },\r\n currentPage(value: number) {\r\n state.currentPage = value\r\n return self\r\n },\r\n pageSize(value: number) {\r\n state.pageSize = value\r\n return self\r\n },\r\n totalPages(value: number) {\r\n state.totalPages = value\r\n return self\r\n },\r\n order(column: ResolvedFilterColumnKey<Row>, options?: OrderOptions) {\r\n state.order = {\r\n field: String(column),\r\n direction: options?.ascending === false ? 'descending' : 'ascending',\r\n }\r\n return self\r\n },\r\n gt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('gt', String(column), value)\r\n return self\r\n },\r\n gte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('gte', String(column), value)\r\n return self\r\n },\r\n lt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('lt', String(column), value)\r\n return self\r\n },\r\n lte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('lte', String(column), value)\r\n return self\r\n },\r\n neq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('neq', String(column), value)\r\n return self\r\n },\r\n like(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('like', String(column), value)\r\n return self\r\n },\r\n ilike(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('ilike', String(column), value)\r\n return self\r\n },\r\n is(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\r\n addCondition('is', String(column), value)\r\n return self\r\n },\r\n in(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\r\n addCondition('in', String(column), values)\r\n return self\r\n },\r\n contains(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\r\n addCondition('contains', String(column), values)\r\n return self\r\n },\r\n containedBy(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\r\n addCondition('containedBy', String(column), values)\r\n return self\r\n },\r\n not(\r\n columnOrExpression: ResolvedFilterColumnKey<Row> | string,\r\n operator?: AthenaConditionOperator,\r\n value?: AthenaConditionValue,\r\n ) {\r\n const expression = String(columnOrExpression)\r\n if (operator != null && value !== undefined) {\r\n addCondition('not', undefined, `${expression}.${operator}.${stringifyFilterValue(value)}`)\r\n } else {\r\n addCondition('not', undefined, expression)\r\n }\r\n return self\r\n },\r\n or(expression: string) {\r\n addCondition('or', undefined, expression)\r\n return self\r\n },\r\n }\r\n}\r\n\r\nfunction toRpcSelect(columns?: string | string[]) {\r\n if (!columns) return undefined\r\n return Array.isArray(columns) ? columns.join(',') : columns\r\n}\r\n\r\nfunction createRpcFilterMethods<Self>(\r\n filters: AthenaRpcFilter[],\r\n self: Self,\r\n) {\r\n const addFilter = (\r\n operator: AthenaRpcFilterOperator,\r\n column: string,\r\n value: AthenaConditionValue | AthenaConditionArrayValue | string,\r\n ) => {\r\n filters.push({ column, operator, value })\r\n }\r\n\r\n return {\r\n eq(column: string, value: AthenaConditionValue) {\r\n addFilter('eq', column, value)\r\n return self\r\n },\r\n neq(column: string, value: AthenaConditionValue) {\r\n addFilter('neq', column, value)\r\n return self\r\n },\r\n gt(column: string, value: AthenaConditionValue) {\r\n addFilter('gt', column, value)\r\n return self\r\n },\r\n gte(column: string, value: AthenaConditionValue) {\r\n addFilter('gte', column, value)\r\n return self\r\n },\r\n lt(column: string, value: AthenaConditionValue) {\r\n addFilter('lt', column, value)\r\n return self\r\n },\r\n lte(column: string, value: AthenaConditionValue) {\r\n addFilter('lte', column, value)\r\n return self\r\n },\r\n like(column: string, value: AthenaConditionValue) {\r\n addFilter('like', column, value)\r\n return self\r\n },\r\n ilike(column: string, value: AthenaConditionValue) {\r\n addFilter('ilike', column, value)\r\n return self\r\n },\r\n is(column: string, value: AthenaConditionValue) {\r\n addFilter('is', column, value)\r\n return self\r\n },\r\n in(column: string, values: AthenaConditionArrayValue) {\r\n addFilter('in', column, values)\r\n return self\r\n },\r\n }\r\n}\r\n\r\nfunction createRpcBuilder<Row>(\r\n functionName: string,\r\n args: AthenaJsonObject | undefined,\r\n baseOptions: AthenaRpcCallOptions | undefined,\r\n client: ReturnType<typeof createAthenaGatewayClient>,\r\n formatGatewayResult: AthenaResultFormatter,\r\n tracer?: AthenaQueryTracer,\r\n initialCallsite?: AthenaQueryTraceCallsite | null,\r\n): RpcQueryBuilder<Row> {\r\n const state: {\r\n filters: AthenaRpcFilter[]\r\n limit?: number\r\n offset?: number\r\n order?: { column: string; ascending?: boolean }\r\n } = {\r\n filters: [],\r\n }\r\n\r\n let selectedColumns: string | string[] | undefined\r\n let selectedOptions: AthenaRpcCallOptions | undefined\r\n let promise: Promise<AthenaResult<Row[]>> | null = null\r\n const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite)\r\n\r\n const executeRpc = async <SelectedRow = Row>(\r\n columns?: string | string[],\r\n options?: AthenaRpcCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ): Promise<AthenaResult<SelectedRow[]>> => {\r\n const mergedOptions = mergeOptions(baseOptions, options)\r\n const payload: AthenaRpcPayload = {\r\n function: functionName,\r\n args,\r\n schema: mergedOptions?.schema,\r\n select: toRpcSelect(columns),\r\n filters: state.filters.length ? [...state.filters] : undefined,\r\n count: mergedOptions?.count,\r\n head: mergedOptions?.head,\r\n limit: state.limit,\r\n offset: state.offset,\r\n order: state.order,\r\n }\r\n const endpoint: AthenaTraceEndpoint = mergedOptions?.get ? `/rpc/${functionName}` : '/gateway/rpc'\r\n const sql = buildRpcDebugSql(payload)\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'rpc',\r\n endpoint,\r\n functionName,\r\n sql,\r\n payload,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.rpcGateway<SelectedRow[]>(payload, mergedOptions)\r\n return formatGatewayResult(response, { operation: 'rpc' })\r\n },\r\n callsite,\r\n )\r\n }\r\n\r\n const run = (\r\n columns?: string | string[],\r\n options?: AthenaRpcCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const payloadColumns = columns ?? selectedColumns\r\n const payloadOptions = options ?? selectedOptions\r\n if (!promise) {\r\n promise = executeRpc<Row>(payloadColumns, payloadOptions, callsiteStore.resolve(callsite))\r\n }\r\n return promise\r\n }\r\n\r\n const builder = {} as RpcQueryBuilder<Row>\r\n const filterMethods = createRpcFilterMethods(state.filters, builder)\r\n\r\n Object.assign(builder, filterMethods, {\r\n select(columns = selectedColumns, options?: AthenaRpcCallOptions) {\r\n selectedColumns = columns\r\n selectedOptions = options ?? selectedOptions\r\n return run(columns, options, captureTraceCallsite(tracer))\r\n },\r\n async single<T = Row>(columns?: string | string[], options?: AthenaRpcCallOptions) {\r\n const result = await run(columns, options, captureTraceCallsite(tracer))\r\n return toSingleResult(result) as AthenaResult<T | null>\r\n },\r\n maybeSingle<T = Row>(columns?: string | string[], options?: AthenaRpcCallOptions) {\r\n return builder.single<T>(columns, options)\r\n },\r\n order(column: string, options?: RpcOrderOptions) {\r\n state.order = { column, ascending: options?.ascending ?? true }\r\n return builder\r\n },\r\n limit(count: number) {\r\n state.limit = count\r\n return builder\r\n },\r\n offset(count: number) {\r\n state.offset = count\r\n return builder\r\n },\r\n range(from: number, to: number) {\r\n state.offset = from\r\n state.limit = to - from + 1\r\n return builder\r\n },\r\n then<T1 = AthenaResult<Row[]>, T2 = never>(\r\n onfulfilled?: (v: AthenaResult<Row[]>) => T1 | PromiseLike<T1>,\r\n onrejected?: (reason: unknown) => T2 | PromiseLike<T2>,\r\n ) {\r\n return run(selectedColumns, selectedOptions).then(onfulfilled, onrejected)\r\n },\r\n catch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\r\n return run(selectedColumns, selectedOptions).catch(onrejected)\r\n },\r\n finally(onfinally?: () => void) {\r\n return run(selectedColumns, selectedOptions).finally(onfinally)\r\n },\r\n })\r\n\r\n return builder\r\n}\r\n\r\nfunction createTableBuilder<\r\n Row,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n TContext = unknown,\r\n>(\r\n tableName: string,\r\n client: ReturnType<typeof createAthenaGatewayClient>,\r\n formatGatewayResult: AthenaResultFormatter,\r\n tracer?: AthenaQueryTracer,\r\n experimental?: AthenaClientExperimentalOptions,\r\n): TableQueryBuilder<Row, Insert, Update, TContext> {\r\n const state: TableBuilderState = {\r\n conditions: [],\r\n }\r\n\r\n const addCondition = (\r\n operator: AthenaConditionOperator,\r\n column?: string,\r\n value?: AthenaConditionValue | AthenaConditionArrayValue | string,\r\n hints?: ConditionCastHints,\r\n ) => {\r\n const condition: AthenaGatewayCondition = { operator }\r\n if (column) {\r\n condition.column = column\r\n if (operator === 'eq') {\r\n // include legacy gateway shape for compatibility\r\n condition.eq_column = column\r\n }\r\n }\r\n if (value !== undefined) {\r\n condition.value = value\r\n if (operator === 'eq') {\r\n condition.eq_value = value\r\n }\r\n }\r\n if (hints?.valueCast) {\r\n condition.value_cast = hints.valueCast\r\n if (operator === 'eq') {\r\n condition.eq_value_cast = hints.valueCast\r\n }\r\n }\r\n if (hints?.columnCast) {\r\n condition.column_cast = hints.columnCast\r\n if (operator === 'eq') {\r\n condition.eq_column_cast = hints.columnCast\r\n }\r\n }\r\n state.conditions.push(condition)\r\n }\r\n\r\n const snapshotState = (): TableBuilderState => ({\r\n conditions: state.conditions.map(condition => ({ ...condition })),\r\n limit: state.limit,\r\n offset: state.offset,\r\n order: state.order ? { ...state.order } : undefined,\r\n currentPage: state.currentPage,\r\n pageSize: state.pageSize,\r\n totalPages: state.totalPages,\r\n })\r\n\r\n const builder = {} as TableQueryBuilder<Row, Insert, Update, TContext>\r\n\r\n const filterMethods = createFilterMethods<TableQueryBuilder<Row, Insert, Update, TContext>, Row>(\r\n state,\r\n addCondition,\r\n builder,\r\n )\r\n\r\n const runSelect = async <T = Row>(\r\n columns: string | string[] = DEFAULT_COLUMNS,\r\n options?: AthenaGatewayCallOptions,\r\n executionState: TableBuilderState = snapshotState(),\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const resolvedTableName = resolveTableNameForCall(tableName, options?.schema)\r\n const plan = createSelectTransportPlan({\r\n tableName: resolvedTableName,\r\n columns,\r\n state: executionState,\r\n options,\r\n buildTypedSelectQuery,\r\n })\r\n\r\n if (plan.kind === 'query') {\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'select',\r\n endpoint: '/gateway/query',\r\n table: resolvedTableName,\r\n sql: plan.query,\r\n payload: plan.payload,\r\n options,\r\n },\r\n async () => {\r\n const queryResponse = await client.queryGateway<T>(plan.payload, options)\r\n return formatGatewayResult(queryResponse, { table: resolvedTableName, operation: 'select' })\r\n },\r\n callsite,\r\n )\r\n }\r\n\r\n const sql = buildDebugSelectQuery({\r\n tableName: resolvedTableName,\r\n ...plan.debug,\r\n })\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'select',\r\n endpoint: '/gateway/fetch',\r\n table: resolvedTableName,\r\n sql,\r\n payload: plan.payload,\r\n options,\r\n },\r\n async () => {\r\n const response = await client.fetchGateway<T>(plan.payload, options)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'select' })\r\n },\r\n callsite,\r\n )\r\n }\r\n\r\n const createSelectChain = <SelectedRow>(\r\n columns: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n initialCallsite?: AthenaQueryTraceCallsite | null,\r\n ): SelectChain<Row, SelectedRow> => {\r\n const chain = {} as SelectChain<Row, SelectedRow>\r\n const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite)\r\n const filterMethods = createFilterMethods<SelectChain<Row, SelectedRow>, Row>(state, addCondition, chain)\r\n Object.assign(chain, filterMethods, {\r\n async single<T = SelectedRow>(cols?: string | string[], opts?: AthenaGatewayCallOptions) {\r\n const r = await runSelect<T[]>(\r\n cols ?? columns,\r\n opts ?? options,\r\n snapshotState(),\r\n callsiteStore.resolve(captureTraceCallsite(tracer)),\r\n )\r\n return toSingleResult(r)\r\n },\r\n maybeSingle<T = SelectedRow>(cols?: string | string[], opts?: AthenaGatewayCallOptions) {\r\n return chain.single<T>(cols, opts)\r\n },\r\n then<T1 = AthenaResult<SelectedRow[]>, T2 = never>(\r\n onfulfilled?: (v: AthenaResult<SelectedRow[]>) => T1 | PromiseLike<T1>,\r\n onrejected?: (reason: unknown) => T2 | PromiseLike<T2>,\r\n ) {\r\n return runSelect<SelectedRow[]>(\r\n columns,\r\n options,\r\n snapshotState(),\r\n callsiteStore.resolve(),\r\n ).then(onfulfilled, onrejected)\r\n },\r\n catch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\r\n return runSelect<SelectedRow[]>(columns, options, snapshotState(), callsiteStore.resolve()).catch(\r\n onrejected,\r\n )\r\n },\r\n finally(onfinally?: () => void) {\r\n return runSelect<SelectedRow[]>(columns, options, snapshotState(), callsiteStore.resolve()).finally(\r\n onfinally,\r\n )\r\n },\r\n })\r\n return chain\r\n }\r\n\r\n Object.assign(builder, filterMethods, {\r\n reset() {\r\n state.conditions = []\r\n state.limit = undefined\r\n state.offset = undefined\r\n state.order = undefined\r\n state.currentPage = undefined\r\n state.pageSize = undefined\r\n state.totalPages = undefined\r\n return builder\r\n },\r\n select<T = Row>(columns: string | string[] = DEFAULT_COLUMNS, options?: AthenaGatewayCallOptions) {\r\n return createSelectChain<T>(columns, options, captureTraceCallsite(tracer))\r\n },\r\n async findMany<const TSelect extends AthenaSelectShape>(options: AthenaFindManyOptions<Row, TSelect>) {\r\n const columns = compileSelectShape(options.select)\r\n const baseState = snapshotState()\r\n const executionState = snapshotState()\r\n const callsite = captureTraceCallsite(tracer)\r\n const compiledWhere = compileWhere(options.where)\r\n if (compiledWhere?.length) {\r\n executionState.conditions.push(...compiledWhere)\r\n }\r\n if (options.orderBy !== undefined) {\r\n executionState.order = compileOrderBy<Row>(options.orderBy)\r\n }\r\n if (options.limit !== undefined) {\r\n executionState.limit = options.limit\r\n }\r\n if (\r\n experimental?.findManyAst &&\r\n canUseFindManyAstTransport(baseState) &&\r\n !selectShapeUsesRelationSchema(options.select)\r\n ) {\r\n const resolvedTableName = resolveTableNameForCall(tableName, undefined)\r\n const payload: AthenaFindManyAstPayload<Row, TSelect> = {\r\n table_name: resolvedTableName,\r\n select: options.select,\r\n }\r\n if (options.where !== undefined) {\r\n payload.where = options.where\r\n }\r\n const astOrder = toFindManyAstOrder<Row>(executionState.order)\r\n if (astOrder !== undefined) {\r\n payload.orderBy = astOrder\r\n }\r\n if (executionState.limit !== undefined) {\r\n payload.limit = executionState.limit\r\n }\r\n const sql = buildDebugSelectQuery({\r\n tableName: resolvedTableName,\r\n columns,\r\n conditions: executionState.conditions,\r\n limit: executionState.limit,\r\n order: executionState.order,\r\n })\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'select',\r\n endpoint: '/gateway/fetch',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n },\r\n async () => {\r\n const response = await client.fetchGateway<Array<AthenaFindManyResult<Row, TSelect, TContext>>>(\r\n payload,\r\n )\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'select' })\r\n },\r\n callsite,\r\n )\r\n }\r\n return runSelect<Array<AthenaFindManyResult<Row, TSelect, TContext>>>(\r\n columns,\r\n undefined,\r\n executionState,\r\n callsite,\r\n )\r\n },\r\n insert(values: Insert | Insert[], options?: AthenaGatewayCallOptions) {\r\n const mutationCallsite = captureTraceCallsite(tracer)\r\n if (Array.isArray(values)) {\r\n const executeInsertMany = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaInsertPayload = {\r\n table_name: resolvedTableName,\r\n insert_body: asAthenaJsonObjectArray(values),\r\n }\r\n if (columns) payload.columns = columns\r\n if (mergedOptions?.count) payload.count = mergedOptions.count\r\n if (mergedOptions?.head) payload.head = mergedOptions.head\r\n if (mergedOptions?.defaultToNull !== undefined) {\r\n payload.default_to_null = mergedOptions.defaultToNull\r\n }\r\n const sql = buildInsertDebugSql(payload)\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'insert',\r\n endpoint: '/gateway/insert',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.insertGateway<Row[]>(payload, mergedOptions)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\r\n },\r\n callsite,\r\n )\r\n }\r\n return createMutationQuery<Row[]>(executeInsertMany, DEFAULT_COLUMNS, tracer, mutationCallsite)\r\n }\r\n const executeInsertOne = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaInsertPayload = {\r\n table_name: resolvedTableName,\r\n insert_body: asAthenaJsonObject(values),\r\n }\r\n if (columns) payload.columns = columns\r\n if (mergedOptions?.count) payload.count = mergedOptions.count\r\n if (mergedOptions?.head) payload.head = mergedOptions.head\r\n if (mergedOptions?.defaultToNull !== undefined) {\r\n payload.default_to_null = mergedOptions.defaultToNull\r\n }\r\n const sql = buildInsertDebugSql(payload)\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'insert',\r\n endpoint: '/gateway/insert',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.insertGateway<Row>(payload, mergedOptions)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\r\n },\r\n callsite,\r\n )\r\n }\r\n return createMutationQuery<Row>(executeInsertOne, DEFAULT_COLUMNS, tracer, mutationCallsite)\r\n },\r\n upsert(\r\n values: Insert | Insert[],\r\n options?: AthenaGatewayCallOptions & { updateBody?: Update; onConflict?: string | string[] },\r\n ) {\r\n const mutationCallsite = captureTraceCallsite(tracer)\r\n if (Array.isArray(values)) {\r\n const executeUpsertMany = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaInsertPayload = {\r\n table_name: resolvedTableName,\r\n insert_body: asAthenaJsonObjectArray(values),\r\n update_body: options?.updateBody ? asAthenaJsonObject(options.updateBody) : undefined,\r\n }\r\n if (columns) payload.columns = columns\r\n if (options?.onConflict) payload.on_conflict = options.onConflict\r\n if (mergedOptions?.count) payload.count = mergedOptions.count\r\n if (mergedOptions?.head) payload.head = mergedOptions.head\r\n if (mergedOptions?.defaultToNull !== undefined) {\r\n payload.default_to_null = mergedOptions.defaultToNull\r\n }\r\n const sql = buildInsertDebugSql(payload)\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'upsert',\r\n endpoint: '/gateway/insert',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.insertGateway<Row[]>(payload, mergedOptions)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\r\n },\r\n callsite,\r\n )\r\n }\r\n return createMutationQuery<Row[]>(executeUpsertMany, DEFAULT_COLUMNS, tracer, mutationCallsite)\r\n }\r\n const executeUpsertOne = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaInsertPayload = {\r\n table_name: resolvedTableName,\r\n insert_body: asAthenaJsonObject(values),\r\n update_body: options?.updateBody ? asAthenaJsonObject(options.updateBody) : undefined,\r\n }\r\n if (columns) payload.columns = columns\r\n if (options?.onConflict) payload.on_conflict = options.onConflict\r\n if (mergedOptions?.count) payload.count = mergedOptions.count\r\n if (mergedOptions?.head) payload.head = mergedOptions.head\r\n if (mergedOptions?.defaultToNull !== undefined) {\r\n payload.default_to_null = mergedOptions.defaultToNull\r\n }\r\n const sql = buildInsertDebugSql(payload)\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'upsert',\r\n endpoint: '/gateway/insert',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.insertGateway<Row>(payload, mergedOptions)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\r\n },\r\n callsite,\r\n )\r\n }\r\n return createMutationQuery<Row>(executeUpsertOne, DEFAULT_COLUMNS, tracer, mutationCallsite)\r\n },\r\n update(values: Update, options?: AthenaGatewayCallOptions) {\r\n const mutationCallsite = captureTraceCallsite(tracer)\r\n const executeUpdate = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const filters = state.conditions.length ? [...state.conditions] : undefined\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaUpdatePayload = {\r\n table_name: resolvedTableName,\r\n set: asAthenaJsonObject(values),\r\n conditions: filters,\r\n strip_nulls: mergedOptions?.stripNulls ?? true,\r\n }\r\n if (state.order) payload.sort_by = state.order\r\n if (state.currentPage !== undefined) payload.current_page = state.currentPage\r\n if (state.pageSize !== undefined) payload.page_size = state.pageSize\r\n if (state.totalPages !== undefined) payload.total_pages = state.totalPages\r\n if (columns) payload.columns = columns\r\n const sql = buildUpdateDebugSql(payload)\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'update',\r\n endpoint: '/gateway/update',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.updateGateway<Row[]>(payload, mergedOptions)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'update' })\r\n },\r\n callsite,\r\n )\r\n }\r\n const mutation = createMutationQuery<Row[]>(executeUpdate, null, tracer, mutationCallsite)\r\n const updateChain = {} as UpdateChain<Row>\r\n const filterMethods = createFilterMethods<UpdateChain<Row>, Row>(state, addCondition, updateChain)\r\n Object.assign(updateChain, filterMethods, mutation)\r\n return updateChain\r\n },\r\n delete(options?: AthenaGatewayCallOptions & { resourceId?: string }) {\r\n const filters = state.conditions.length ? [...state.conditions] : undefined\r\n const resourceId = options?.resourceId ?? getResourceId(state)\r\n if (!resourceId && !filters?.length) {\r\n throw new Error('delete requires a resource_id either via eq(\"resource_id\", ...) or options.resourceId')\r\n }\r\n const mutationCallsite = captureTraceCallsite(tracer)\r\n const executeDelete = async (\r\n columns?: string | string[],\r\n selectOptions?: AthenaGatewayCallOptions,\r\n callsite?: AthenaQueryTraceCallsite | null,\r\n ) => {\r\n const mergedOptions = mergeOptions(options, selectOptions)\r\n const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\r\n const payload: AthenaDeletePayload = {\r\n table_name: resolvedTableName,\r\n resource_id: resourceId,\r\n conditions: filters,\r\n }\r\n if (state.order) payload.sort_by = state.order\r\n if (state.currentPage !== undefined) payload.current_page = state.currentPage\r\n if (state.pageSize !== undefined) payload.page_size = state.pageSize\r\n if (state.totalPages !== undefined) payload.total_pages = state.totalPages\r\n if (columns) payload.columns = columns\r\n const sql = buildDeleteDebugSql(payload)\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'delete',\r\n endpoint: '/gateway/delete',\r\n table: resolvedTableName,\r\n sql,\r\n payload,\r\n options: mergedOptions,\r\n },\r\n async () => {\r\n const response = await client.deleteGateway<Row | null>(payload, mergedOptions)\r\n return formatGatewayResult(response, { table: resolvedTableName, operation: 'delete' })\r\n },\r\n callsite,\r\n )\r\n }\r\n return createMutationQuery<Row | null>(executeDelete, null, tracer, mutationCallsite)\r\n },\r\n async single<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions) {\r\n const response = await runSelect<T[]>(\r\n columns ?? DEFAULT_COLUMNS,\r\n options,\r\n snapshotState(),\r\n captureTraceCallsite(tracer),\r\n )\r\n return toSingleResult(response)\r\n },\r\n async maybeSingle<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions) {\r\n return builder.single<T>(columns, options)\r\n },\r\n })\r\n\r\n return builder\r\n}\r\n\r\nfunction createQueryBuilder(\r\n client: ReturnType<typeof createAthenaGatewayClient>,\r\n formatGatewayResult: AthenaResultFormatter,\r\n tracer?: AthenaQueryTracer,\r\n) {\r\n return async function query<Row = unknown>(\r\n query: string,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<Row[]>> {\r\n const normalizedQuery = query.trim()\r\n if (!normalizedQuery) {\r\n throw new Error('query requires a non-empty string')\r\n }\r\n const payload = { query: normalizedQuery }\r\n const callsite = captureTraceCallsite(tracer)\r\n return executeWithQueryTrace(\r\n tracer,\r\n {\r\n operation: 'query',\r\n endpoint: '/gateway/query',\r\n sql: normalizedQuery,\r\n payload,\r\n options,\r\n },\r\n async () => {\r\n const response = await client.queryGateway<Row[]>(payload, options)\r\n return formatGatewayResult(response, { operation: 'query' })\r\n },\r\n callsite,\r\n )\r\n }\r\n}\r\n\r\nexport interface AthenaSdkClient {\r\n from<\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(table: string, options?: AthenaFromOptions): TableQueryBuilder<Row, Insert, Update>\r\n db: AthenaDbModule\r\n rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\r\n fn: string,\r\n args?: Args,\r\n options?: AthenaRpcCallOptions,\r\n ): RpcQueryBuilder<Row>\r\n query<Row = unknown>(query: string, options?: AthenaGatewayCallOptions): Promise<AthenaResult<Row[]>>\r\n verifyConnection(options?: AthenaGatewayConnectionOptions): Promise<AthenaGatewayConnectionResult>\r\n}\r\n\r\nexport interface AthenaSdkClientWithAuth extends AthenaSdkClient {\r\n auth: AthenaAuthBindings\r\n}\r\n\r\n/** Client config for builder */\r\nexport interface AthenaClientConfig {\r\n baseUrl: string\r\n apiKey: string\r\n client?: string\r\n backend?: BackendConfig\r\n headers?: Record<string, string>\r\n healthTracking?: boolean\r\n auth?: AthenaAuthClientConfig\r\n experimental?: AthenaClientExperimentalOptions\r\n}\r\n\r\nfunction createClientFromConfig(config: AthenaClientConfig): AthenaSdkClientWithAuth {\r\n const gateway = createAthenaGatewayClient({\r\n baseUrl: config.baseUrl,\r\n apiKey: config.apiKey,\r\n client: config.client,\r\n backend: config.backend,\r\n headers: config.headers,\r\n })\r\n const formatGatewayResult = createResultFormatter(config.experimental)\r\n const queryTracer = createQueryTracer(config.experimental)\r\n const auth = createAuthClient(config.auth)\r\n const from: AthenaSdkClient['from'] = <\r\n Row = AthenaRowShape,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(\r\n table: string,\r\n options?: AthenaFromOptions,\r\n ) =>\r\n createTableBuilder<Row, Insert, Update>(\r\n resolveTableNameForCall(table, options?.schema),\r\n gateway,\r\n formatGatewayResult,\r\n queryTracer,\r\n config.experimental,\r\n )\r\n const rpc: AthenaSdkClient['rpc'] = <Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\r\n fn: string,\r\n args?: Args,\r\n options?: AthenaRpcCallOptions,\r\n ) => {\r\n const normalizedFn = fn.trim()\r\n if (!normalizedFn) {\r\n throw new Error('rpc requires a function name')\r\n }\r\n return createRpcBuilder<Row>(\r\n normalizedFn,\r\n args as AthenaJsonObject | undefined,\r\n options,\r\n gateway,\r\n formatGatewayResult,\r\n queryTracer,\r\n captureTraceCallsite(queryTracer),\r\n )\r\n }\r\n const query = createQueryBuilder(gateway, formatGatewayResult, queryTracer) as AthenaSdkClient['query']\r\n const db = createDbModule({ from, rpc, query })\r\n\r\n return {\r\n from,\r\n db,\r\n rpc,\r\n query,\r\n verifyConnection: gateway.verifyConnection,\r\n auth: auth.auth,\r\n }\r\n}\r\n\r\nexport interface AthenaClientBuilder {\r\n /** Set the gateway base URL. */\r\n url(url: string): AthenaClientBuilder\r\n /** Set the API key used for all requests. */\r\n key(apiKey: string): AthenaClientBuilder\r\n /** Set the default backend routing strategy. */\r\n backend(backend: BackendConfig | BackendType): AthenaClientBuilder\r\n /** Set the default Athena client routing key. */\r\n client(clientName: string): AthenaClientBuilder\r\n /** Attach static headers to every request. */\r\n headers(headers: Record<string, string>): AthenaClientBuilder\r\n /** Configure Athena Auth client behavior for `client.auth.*` methods. */\r\n auth(config: AthenaAuthClientConfig): AthenaClientBuilder\r\n /** Configure experimental client options (for example query tracing or findMany AST transport). */\r\n experimental(options: AthenaClientExperimentalOptions): AthenaClientBuilder\r\n /** Apply the same options object accepted by `createClient(url, key, options)`. */\r\n options(options: AthenaCreateClientOptions): AthenaClientBuilder\r\n /** Enable or disable health tracking metadata. */\r\n healthTracking(enabled: boolean): AthenaClientBuilder\r\n /** Build the immutable Athena SDK client. */\r\n build(): AthenaSdkClientWithAuth\r\n}\r\n\r\nconst DEFAULT_BACKEND: BackendConfig = { type: 'athena' }\r\n\r\nfunction toBackendConfig(b: BackendConfig | BackendType | undefined): BackendConfig {\r\n if (!b) return DEFAULT_BACKEND\r\n return typeof b === 'string' ? { type: b } : b\r\n}\r\n\r\nfunction mergeAuthClientConfig(\r\n current: AthenaAuthClientConfig | undefined,\r\n next: AthenaAuthClientConfig,\r\n): AthenaAuthClientConfig {\r\n const merged: AthenaAuthClientConfig = {\r\n ...(current ?? {}),\r\n ...next,\r\n }\r\n if (current?.headers || next.headers) {\r\n merged.headers = {\r\n ...(current?.headers ?? {}),\r\n ...(next.headers ?? {}),\r\n }\r\n }\r\n return merged\r\n}\r\n\r\nfunction mergeExperimentalOptions(\r\n current: AthenaClientExperimentalOptions | undefined,\r\n next: AthenaClientExperimentalOptions,\r\n): AthenaClientExperimentalOptions {\r\n const merged: AthenaClientExperimentalOptions = {\r\n ...(current ?? {}),\r\n ...next,\r\n }\r\n if (\r\n current?.traceQueries &&\r\n typeof current.traceQueries === 'object' &&\r\n next.traceQueries &&\r\n typeof next.traceQueries === 'object'\r\n ) {\r\n merged.traceQueries = {\r\n ...current.traceQueries,\r\n ...next.traceQueries,\r\n }\r\n }\r\n return merged\r\n}\r\n\r\nclass AthenaClientBuilderImpl implements AthenaClientBuilder {\r\n private baseUrl?: string\r\n private apiKey?: string\r\n private backendConfig: BackendConfig = DEFAULT_BACKEND\r\n private clientName?: string\r\n private defaultHeaders?: Record<string, string>\r\n private authConfig?: AthenaAuthClientConfig\r\n private experimentalOptions?: AthenaClientExperimentalOptions\r\n private isHealthTrackingEnabled = false\r\n\r\n url(url: string): AthenaClientBuilder {\r\n this.baseUrl = url\r\n return this\r\n }\r\n\r\n key(apiKey: string): AthenaClientBuilder {\r\n this.apiKey = apiKey\r\n return this\r\n }\r\n\r\n backend(backend: BackendConfig | BackendType): AthenaClientBuilder {\r\n this.backendConfig = toBackendConfig(backend)\r\n return this\r\n }\r\n\r\n client(clientName: string): AthenaClientBuilder {\r\n this.clientName = clientName\r\n return this\r\n }\r\n\r\n headers(headers: Record<string, string>): AthenaClientBuilder {\r\n this.defaultHeaders = headers\r\n return this\r\n }\r\n\r\n auth(config: AthenaAuthClientConfig): AthenaClientBuilder {\r\n this.authConfig = mergeAuthClientConfig(this.authConfig, config)\r\n return this\r\n }\r\n\r\n experimental(options: AthenaClientExperimentalOptions): AthenaClientBuilder {\r\n this.experimentalOptions = mergeExperimentalOptions(this.experimentalOptions, options)\r\n return this\r\n }\r\n\r\n options(options: AthenaCreateClientOptions): AthenaClientBuilder {\r\n if (options.client !== undefined) {\r\n this.clientName = options.client\r\n }\r\n if (options.backend !== undefined) {\r\n this.backendConfig = toBackendConfig(options.backend)\r\n }\r\n if (options.headers !== undefined) {\r\n this.defaultHeaders = {\r\n ...(this.defaultHeaders ?? {}),\r\n ...options.headers,\r\n }\r\n }\r\n if (options.auth !== undefined) {\r\n this.authConfig = mergeAuthClientConfig(this.authConfig, options.auth)\r\n }\r\n if (options.experimental !== undefined) {\r\n this.experimentalOptions = mergeExperimentalOptions(this.experimentalOptions, options.experimental)\r\n }\r\n return this\r\n }\r\n\r\n healthTracking(enabled: boolean): AthenaClientBuilder {\r\n this.isHealthTrackingEnabled = enabled\r\n return this\r\n }\r\n\r\n build(): AthenaSdkClientWithAuth {\r\n if (!this.baseUrl || !this.apiKey) {\r\n throw new Error('AthenaClient requires url and key; call .url() and .key() before .build()')\r\n }\r\n\r\n return createClientFromConfig({\r\n baseUrl: this.baseUrl,\r\n apiKey: this.apiKey,\r\n client: this.clientName,\r\n backend: this.backendConfig,\r\n headers: this.defaultHeaders,\r\n healthTracking: this.isHealthTrackingEnabled,\r\n auth: this.authConfig,\r\n experimental: this.experimentalOptions,\r\n })\r\n }\r\n}\r\n\r\n/** Canonical Athena client factory with builder-based configuration. */\r\nexport class AthenaClient {\r\n /** Create a fluent builder for a strongly-typed Athena SDK client. */\r\n static builder(): AthenaClientBuilder {\r\n return new AthenaClientBuilderImpl()\r\n }\r\n\r\n /** Build a client from process environment variables. */\r\n static fromEnvironment(): AthenaSdkClientWithAuth {\r\n const url =\r\n process.env.ATHENA_URL ??\r\n process.env.ATHENA_GATEWAY_URL\r\n const key =\r\n process.env.ATHENA_API_KEY ??\r\n process.env.ATHENA_GATEWAY_API_KEY\r\n\r\n if (!url || !key) {\r\n throw new Error(\r\n 'ATHENA_URL and ATHENA_API_KEY (or ATHENA_GATEWAY_URL and ATHENA_GATEWAY_API_KEY) are required',\r\n )\r\n }\r\n\r\n return AthenaClient.builder()\r\n .url(url)\r\n .key(key)\r\n .build()\r\n }\r\n}\r\n\r\nexport interface AthenaCreateClientOptions extends Pick<AthenaGatewayCallOptions, 'client' | 'headers' | 'backend'> {\r\n auth?: AthenaAuthClientConfig\r\n experimental?: AthenaClientExperimentalOptions\r\n}\r\n\r\n/** Create client (convenience wrapper; use AthenaClient.builder() for full control) */\r\nexport function createClient(\r\n url: string,\r\n apiKey: string,\r\n options?: AthenaCreateClientOptions,\r\n): AthenaSdkClientWithAuth {\r\n return createClientFromConfig({\r\n baseUrl: url,\r\n apiKey,\r\n client: options?.client,\r\n backend: toBackendConfig(options?.backend),\r\n headers: options?.headers,\r\n auth: options?.auth,\r\n experimental: options?.experimental,\r\n })\r\n}\r\n","/**\r\n * athena gateway types\r\n *\r\n * type definitions for the athena gateway api client and react hook\r\n */\r\n\r\nexport type AthenaGatewayMethod = 'GET' | 'POST' | 'PUT' | 'DELETE'\r\nexport type AthenaGatewayEndpointPath =\r\n | '/gateway/fetch'\r\n | '/gateway/insert'\r\n | '/gateway/update'\r\n | '/gateway/delete'\r\n | '/gateway/rpc'\r\n | '/gateway/query'\r\n | `/rpc/${string}`\r\n\r\nexport type AthenaCountOption = 'exact' | 'planned' | 'estimated'\r\n\r\nexport type AthenaJsonPrimitive = string | number | boolean | null\r\nexport type AthenaJsonValue = AthenaJsonPrimitive | AthenaJsonObject | AthenaJsonArray\r\nexport interface AthenaJsonObject {\r\n [key: string]: AthenaJsonValue\r\n}\r\nexport type AthenaJsonArray = AthenaJsonValue[]\r\n\r\nexport type AthenaConditionValue = AthenaJsonPrimitive\r\nexport type AthenaConditionArrayValue = Array<AthenaConditionValue>\r\nexport type AthenaConditionCastType = string\r\n\r\nexport type AthenaConditionOperator =\r\n | 'eq'\r\n | 'neq'\r\n | 'gt'\r\n | 'gte'\r\n | 'lt'\r\n | 'lte'\r\n | 'like'\r\n | 'ilike'\r\n | 'is'\r\n | 'in'\r\n | 'contains'\r\n | 'containedBy'\r\n | 'not'\r\n | 'or'\r\n\r\nexport interface AthenaGatewayCondition {\r\n column?: string\r\n operator: AthenaConditionOperator\r\n value?: AthenaConditionValue | AthenaConditionArrayValue | string\r\n /**\r\n * Optional explicit cast for `value` (for example `\"uuid\"`).\r\n * Older gateways ignore unknown fields; newer gateways may use this hint.\r\n */\r\n value_cast?: AthenaConditionCastType\r\n /**\r\n * Optional explicit cast for `column` (for example `\"text\"`).\r\n * Used by SDK SQL fallback for typed comparisons.\r\n */\r\n column_cast?: AthenaConditionCastType\r\n /** Back-compat shape expected by older gateway implementations */\r\n eq_column?: string\r\n eq_value?: AthenaConditionValue | AthenaConditionArrayValue | string\r\n /** Optional cast hint aligned with legacy eq_* fields */\r\n eq_value_cast?: AthenaConditionCastType\r\n /** Optional cast hint aligned with legacy eq_* fields */\r\n eq_column_cast?: AthenaConditionCastType\r\n}\r\n\r\nexport type AthenaSortDirection = 'ascending' | 'descending'\r\n\r\nexport interface AthenaSortBy {\r\n field: string\r\n direction: AthenaSortDirection\r\n}\r\n\r\nexport interface AthenaFetchPayload {\r\n select?: string | AthenaJsonObject\r\n view_name?: string\r\n table_name?: string\r\n columns?: string[] | string\r\n where?: AthenaJsonObject\r\n orderBy?: AthenaJsonObject | AthenaJsonArray\r\n conditions?: AthenaGatewayCondition[]\r\n limit?: number\r\n offset?: number\r\n current_page?: number\r\n page_size?: number\r\n total_pages?: number\r\n strip_nulls?: boolean\r\n count?: AthenaCountOption\r\n head?: boolean\r\n group_by?: string\r\n time_granularity?: 'day' | 'hour' | 'minute'\r\n aggregation_column?: string\r\n aggregation_strategy?: 'cumulative_sum'\r\n aggregation_dedup?: boolean\r\n sort_by?: AthenaSortBy\r\n}\r\n\r\nexport interface AthenaInsertPayload<\r\n TInsertBody = AthenaJsonObject,\r\n TUpdateBody = AthenaJsonObject,\r\n> {\r\n table_name: string\r\n insert_body: TInsertBody | TInsertBody[]\r\n update_body?: TUpdateBody\r\n columns?: string[] | string\r\n count?: AthenaCountOption\r\n head?: boolean\r\n default_to_null?: boolean\r\n on_conflict?: string | string[]\r\n}\r\n\r\nexport interface AthenaDeletePayload {\r\n table_name: string\r\n resource_id?: string\r\n columns?: string[] | string\r\n conditions?: AthenaGatewayCondition[]\r\n sort_by?: AthenaSortBy\r\n current_page?: number\r\n page_size?: number\r\n total_pages?: number\r\n}\r\n\r\nexport interface AthenaUpdatePayload<TUpdateBody = AthenaJsonObject>\r\n extends AthenaFetchPayload {\r\n set?: TUpdateBody\r\n data?: TUpdateBody\r\n}\r\n\r\nexport type AthenaRpcFilterOperator =\r\n | 'eq'\r\n | 'neq'\r\n | 'gt'\r\n | 'gte'\r\n | 'lt'\r\n | 'lte'\r\n | 'like'\r\n | 'ilike'\r\n | 'is'\r\n | 'in'\r\n\r\nexport interface AthenaRpcFilter {\r\n column: string\r\n operator: AthenaRpcFilterOperator\r\n value?: AthenaConditionValue | AthenaConditionArrayValue | string\r\n}\r\n\r\nexport interface AthenaRpcOrder {\r\n column: string\r\n ascending?: boolean\r\n}\r\n\r\nexport interface AthenaRpcPayload<TArgs = AthenaJsonObject> {\r\n function: string\r\n function_name?: string\r\n schema?: string\r\n args?: TArgs\r\n select?: string\r\n filters?: AthenaRpcFilter[]\r\n count?: AthenaCountOption\r\n head?: boolean\r\n limit?: number\r\n offset?: number\r\n order?: AthenaRpcOrder\r\n}\r\n\r\nexport interface AthenaQueryPayload {\r\n query: string\r\n}\r\n\r\n/** Backend type for Athena client (aligns with athena-rs) */\r\nexport type BackendType = 'athena' | 'postgrest' | 'postgresql' | 'scylladb'\r\n\r\n/** Backend config: type from SDK + backend-scoped options */\r\nexport interface BackendConfig {\r\n type: BackendType\r\n options?: AthenaJsonObject\r\n}\r\n\r\n/** Pre-defined backends for lean usage: backend: Backend.Athena */\r\nexport const Backend = {\r\n Athena: { type: 'athena' } as const,\r\n Postgrest: { type: 'postgrest' } as const,\r\n PostgreSQL: { type: 'postgresql' } as const,\r\n ScyllaDB: { type: 'scylladb' } as const,\r\n} as const satisfies Record<string, BackendConfig>\r\n\r\nexport type BackendOption = BackendConfig | BackendType\r\n\r\nexport interface AthenaGatewayBaseOptions {\r\n baseUrl?: string\r\n apiKey?: string\r\n client?: string\r\n backend?: BackendOption\r\n publishEvent?: string\r\n headers?: Record<string, string>\r\n userId?: string | null\r\n organizationId?: string | null\r\n}\r\n\r\nexport type AthenaGatewayHookConfig = AthenaGatewayBaseOptions\r\nexport interface AthenaGatewayCallOptions extends AthenaGatewayBaseOptions {\r\n schema?: string\r\n count?: AthenaCountOption\r\n head?: boolean\r\n defaultToNull?: boolean\r\n stripNulls?: boolean\r\n onConflict?: string | string[]\r\n updateBody?: AthenaJsonObject\r\n}\r\n\r\nexport interface AthenaRpcCallOptions extends AthenaGatewayCallOptions {\r\n count?: AthenaCountOption\r\n get?: boolean\r\n}\r\n\r\nexport interface AthenaGatewayResponse<T = unknown> {\r\n ok: boolean\r\n status: number\r\n statusText?: string | null\r\n data: T | null\r\n count?: number | null\r\n error?: string\r\n errorDetails?: AthenaGatewayErrorDetails | null\r\n raw: unknown\r\n}\r\n\r\nexport type AthenaGatewayErrorCode =\r\n | 'NETWORK_ERROR'\r\n | 'INVALID_URL'\r\n | 'HTTP_ERROR'\r\n | 'INVALID_JSON'\r\n | 'UNKNOWN_ERROR'\r\n\r\nexport interface AthenaGatewayErrorDetails {\r\n code: AthenaGatewayErrorCode\r\n message: string\r\n status: number\r\n endpoint?: AthenaGatewayEndpointPath\r\n method?: AthenaGatewayMethod\r\n requestId?: string\r\n hint?: string\r\n cause?: string\r\n}\r\n\r\nexport interface AthenaGatewayConnectionOptions {\r\n path?: `/${string}`\r\n headers?: Record<string, string>\r\n signal?: AbortSignal\r\n}\r\n\r\nexport interface AthenaGatewayConnectionResult {\r\n ok: boolean\r\n reachable: boolean\r\n status: number\r\n statusText?: string | null\r\n baseUrl: string\r\n url: string\r\n error?: string\r\n errorDetails?: AthenaGatewayErrorDetails | null\r\n raw: unknown\r\n}\r\n\r\nexport interface AthenaGatewayResponseLog extends AthenaGatewayResponse {\r\n timestamp: string\r\n}\r\n\r\nexport interface AthenaGatewayCallLog {\r\n endpoint: AthenaGatewayEndpointPath\r\n method: AthenaGatewayMethod\r\n payload: unknown\r\n headers: Record<string, string>\r\n timestamp: string\r\n}\r\n\r\nexport interface AthenaGatewayHookResult {\r\n fetchGateway: <T = unknown>(\r\n payload: AthenaFetchPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n insertGateway: <T = unknown>(\r\n payload: AthenaInsertPayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n updateGateway: <T = unknown>(\r\n payload: AthenaUpdatePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n deleteGateway: <T = unknown>(\r\n payload: AthenaDeletePayload,\r\n options?: AthenaGatewayCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n rpcGateway: <T = unknown>(\r\n payload: AthenaRpcPayload,\r\n options?: AthenaRpcCallOptions,\r\n ) => Promise<AthenaGatewayResponse<T>>\r\n isLoading: boolean\r\n error: string | null\r\n lastRequest: AthenaGatewayCallLog | null\r\n lastResponse: AthenaGatewayResponseLog | null\r\n baseUrl: string\r\n}\r\n","import type {\r\n AnyModelDef,\r\n DatabaseDef,\r\n ModelDef,\r\n ModelMetadata,\r\n RegistryDef,\r\n SchemaDef,\r\n} from './types.ts'\r\n\r\n/**\r\n * Declares a model contract with explicit metadata and typed row/insert/update shapes.\r\n */\r\nexport function defineModel<\r\n Row,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n Meta extends ModelMetadata<Row> = ModelMetadata<Row>,\r\n>(input: { meta: Meta }): ModelDef<Row, Insert, Update, Meta> {\r\n return input\r\n}\r\n\r\n/**\r\n * Declares a schema-level model map.\r\n */\r\nexport function defineSchema<\r\n Models extends Record<string, AnyModelDef>,\r\n>(models: Models): SchemaDef<Models> {\r\n return { models }\r\n}\r\n\r\n/**\r\n * Declares a database-level schema map.\r\n */\r\nexport function defineDatabase<\r\n Schemas extends Record<string, SchemaDef<Record<string, AnyModelDef>>>,\r\n>(schemas: Schemas): DatabaseDef<Schemas> {\r\n return { schemas }\r\n}\r\n\r\n/**\r\n * Declares a top-level multi-database registry.\r\n */\r\nexport function defineRegistry<\r\n Databases extends Record<string, DatabaseDef<Record<string, SchemaDef<Record<string, AnyModelDef>>>>>,\r\n>(databases: Databases): RegistryDef<Databases> {\r\n return databases\r\n}\r\n\r\n","import {\r\n createClient,\r\n type AthenaFromOptions,\r\n type AthenaResult,\r\n type AthenaSdkClient,\r\n type RpcQueryBuilder,\r\n type TableQueryBuilder,\r\n} from '../client.ts'\r\nimport type {\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayConnectionOptions,\r\n AthenaGatewayConnectionResult,\r\n AthenaJsonObject,\r\n AthenaRpcCallOptions,\r\n} from '../gateway/types.ts'\r\nimport type {\r\n AnyModelDef,\r\n DatabaseDef,\r\n InsertOf,\r\n ModelAt,\r\n RegistryDef,\r\n RowOf,\r\n SchemaDef,\r\n TenantContext,\r\n TenantKeyMap,\r\n UpdateOf,\r\n} from './types.ts'\r\n\r\ntype RegistryConstraint = RegistryDef<\r\n Record<string, DatabaseDef<Record<string, SchemaDef<Record<string, AnyModelDef>>>>>\r\n>\r\n\r\n/**\r\n * Options for creating typed Athena clients.\r\n */\r\nexport interface TypedClientOptions<TMap extends TenantKeyMap = TenantKeyMap>\r\n extends Pick<AthenaGatewayCallOptions, 'backend' | 'client' | 'headers'> {\r\n tenantKeyMap?: TMap\r\n tenantContext?: TenantContext<TMap>\r\n}\r\n\r\n/**\r\n * Typed Athena client with registry-driven model resolution and tenant-context propagation.\r\n */\r\nexport interface TypedAthenaClient<\r\n TRegistry extends RegistryConstraint,\r\n TTenantMap extends TenantKeyMap = Record<never, string>,\r\n> extends AthenaSdkClient {\r\n readonly registry: TRegistry\r\n readonly tenantKeyMap: Readonly<TTenantMap>\r\n readonly tenantContext: TenantContext<TTenantMap>\r\n withTenantContext(context: TenantContext<TTenantMap>): TypedAthenaClient<TRegistry, TTenantMap>\r\n fromModel<\r\n TDatabase extends keyof TRegistry & string,\r\n TSchema extends keyof TRegistry[TDatabase]['schemas'] & string,\r\n TModel extends keyof TRegistry[TDatabase]['schemas'][TSchema]['models'] & string,\r\n >(\r\n database: TDatabase,\r\n schema: TSchema,\r\n model: TModel,\r\n ): TableQueryBuilder<\r\n RowOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n InsertOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n UpdateOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n {\r\n registry: TRegistry\r\n database: TDatabase\r\n schema: TSchema\r\n model: ModelAt<TRegistry, TDatabase, TSchema, TModel>\r\n }\r\n >\r\n}\r\n\r\ntype BaseClientOptions = Pick<AthenaGatewayCallOptions, 'backend' | 'client' | 'headers'>\r\n\r\nclass TenantHeaderMapper<TMap extends TenantKeyMap> {\r\n constructor(private readonly tenantKeyMap: TMap) {}\r\n\r\n apply(\r\n baseHeaders: Record<string, string> | undefined,\r\n tenantContext: TenantContext<TMap>,\r\n ): Record<string, string> | undefined {\r\n const headers: Record<string, string> = {\r\n ...(baseHeaders ?? {}),\r\n }\r\n\r\n for (const [tenantKey, headerName] of Object.entries(this.tenantKeyMap)) {\r\n const tenantValue = tenantContext[tenantKey as keyof TMap]\r\n if (tenantValue === undefined || tenantValue === null) {\r\n continue\r\n }\r\n headers[headerName] = String(tenantValue)\r\n }\r\n\r\n return Object.keys(headers).length > 0 ? headers : undefined\r\n }\r\n}\r\n\r\nclass RegistryNavigator<TRegistry extends RegistryConstraint> {\r\n constructor(private readonly registry: TRegistry) {}\r\n\r\n resolveModel<\r\n TDatabase extends keyof TRegistry & string,\r\n TSchema extends keyof TRegistry[TDatabase]['schemas'] & string,\r\n TModel extends keyof TRegistry[TDatabase]['schemas'][TSchema]['models'] & string,\r\n >(\r\n database: TDatabase,\r\n schema: TSchema,\r\n model: TModel,\r\n ): ModelAt<TRegistry, TDatabase, TSchema, TModel> {\r\n const databaseDef = this.registry[database]\r\n if (!databaseDef) {\r\n throw new Error(`Unknown database \"${database}\"`)\r\n }\r\n\r\n const schemaDef = databaseDef.schemas[schema]\r\n if (!schemaDef) {\r\n throw new Error(`Unknown schema \"${schema}\" in database \"${database}\"`)\r\n }\r\n\r\n const modelDef = schemaDef.models[model]\r\n if (!modelDef) {\r\n throw new Error(`Unknown model \"${model}\" in schema \"${schema}\"`)\r\n }\r\n\r\n return modelDef as ModelAt<TRegistry, TDatabase, TSchema, TModel>\r\n }\r\n\r\n resolveTableName(\r\n schema: string,\r\n model: string,\r\n modelDef: AnyModelDef,\r\n ): string {\r\n if (modelDef.meta.tableName) {\r\n return modelDef.meta.tableName\r\n }\r\n const schemaName = modelDef.meta.schema ?? schema\r\n const modelName = modelDef.meta.model ?? model\r\n return `${schemaName}.${modelName}`\r\n }\r\n}\r\n\r\nclass TypedAthenaClientImpl<\r\n TRegistry extends RegistryConstraint,\r\n TTenantMap extends TenantKeyMap,\r\n> implements TypedAthenaClient<TRegistry, TTenantMap> {\r\n readonly registry: TRegistry\r\n readonly tenantKeyMap: Readonly<TTenantMap>\r\n readonly tenantContext: TenantContext<TTenantMap>\r\n readonly db: AthenaSdkClient['db']\r\n\r\n private readonly baseClient: AthenaSdkClient\r\n private readonly registryNavigator: RegistryNavigator<TRegistry>\r\n private readonly tenantHeaderMapper: TenantHeaderMapper<TTenantMap>\r\n private readonly clientOptions: BaseClientOptions\r\n private readonly url: string\r\n private readonly apiKey: string\r\n\r\n constructor(input: {\r\n registry: TRegistry\r\n url: string\r\n apiKey: string\r\n options?: TypedClientOptions<TTenantMap>\r\n }) {\r\n this.registry = input.registry\r\n this.url = input.url\r\n this.apiKey = input.apiKey\r\n\r\n const tenantKeyMap = (input.options?.tenantKeyMap ?? ({} as TTenantMap)) as TTenantMap\r\n const tenantContext = (input.options?.tenantContext ?? {}) as TenantContext<TTenantMap>\r\n\r\n this.tenantKeyMap = tenantKeyMap\r\n this.tenantContext = tenantContext\r\n this.tenantHeaderMapper = new TenantHeaderMapper(tenantKeyMap)\r\n this.registryNavigator = new RegistryNavigator(input.registry)\r\n\r\n this.clientOptions = {\r\n backend: input.options?.backend,\r\n client: input.options?.client,\r\n headers: input.options?.headers,\r\n }\r\n\r\n this.baseClient = createClient(this.url, this.apiKey, {\r\n backend: this.clientOptions.backend,\r\n client: this.clientOptions.client,\r\n headers: this.tenantHeaderMapper.apply(this.clientOptions.headers, tenantContext),\r\n })\r\n this.db = this.baseClient.db\r\n }\r\n\r\n from<\r\n Row = Record<string, unknown>,\r\n Insert = Partial<Row>,\r\n Update = Partial<Insert>,\r\n >(table: string, options?: AthenaFromOptions): TableQueryBuilder<Row, Insert, Update> {\r\n return this.baseClient.from<Row, Insert, Update>(table, options)\r\n }\r\n\r\n rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\r\n fn: string,\r\n args?: Args,\r\n options?: AthenaRpcCallOptions,\r\n ): RpcQueryBuilder<Row> {\r\n return this.baseClient.rpc<Row, Args>(fn, args, options)\r\n }\r\n\r\n query<Row = unknown>(\r\n query: string,\r\n options?: AthenaGatewayCallOptions,\r\n ): Promise<AthenaResult<Row[]>> {\r\n return this.baseClient.query<Row>(query, options)\r\n }\r\n\r\n verifyConnection(\r\n options?: AthenaGatewayConnectionOptions,\r\n ): Promise<AthenaGatewayConnectionResult> {\r\n return this.baseClient.verifyConnection(options)\r\n }\r\n\r\n withTenantContext(context: TenantContext<TTenantMap>): TypedAthenaClient<TRegistry, TTenantMap> {\r\n return new TypedAthenaClientImpl({\r\n registry: this.registry,\r\n url: this.url,\r\n apiKey: this.apiKey,\r\n options: {\r\n ...this.clientOptions,\r\n tenantKeyMap: this.tenantKeyMap as TTenantMap,\r\n tenantContext: {\r\n ...this.tenantContext,\r\n ...(context ?? {}),\r\n },\r\n },\r\n })\r\n }\r\n\r\n fromModel<\r\n TDatabase extends keyof TRegistry & string,\r\n TSchema extends keyof TRegistry[TDatabase]['schemas'] & string,\r\n TModel extends keyof TRegistry[TDatabase]['schemas'][TSchema]['models'] & string,\r\n >(\r\n database: TDatabase,\r\n schema: TSchema,\r\n model: TModel,\r\n ): TableQueryBuilder<\r\n RowOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n InsertOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n UpdateOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n {\r\n registry: TRegistry\r\n database: TDatabase\r\n schema: TSchema\r\n model: ModelAt<TRegistry, TDatabase, TSchema, TModel>\r\n }\r\n > {\r\n const modelDef = this.registryNavigator.resolveModel(database, schema, model)\r\n const tableName = this.registryNavigator.resolveTableName(schema, model, modelDef as AnyModelDef)\r\n return this.baseClient.from<\r\n RowOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n InsertOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n UpdateOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>\r\n >(tableName) as TableQueryBuilder<\r\n RowOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n InsertOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n UpdateOf<ModelAt<TRegistry, TDatabase, TSchema, TModel>>,\r\n {\r\n registry: TRegistry\r\n database: TDatabase\r\n schema: TSchema\r\n model: ModelAt<TRegistry, TDatabase, TSchema, TModel>\r\n }\r\n >\r\n }\r\n}\r\n\r\n/**\r\n * Creates a typed client bound to a registry contract and optional tenant header mapping.\r\n */\r\nexport function createTypedClient<\r\n TRegistry extends RegistryConstraint,\r\n TTenantMap extends TenantKeyMap = Record<never, string>,\r\n>(\r\n registry: TRegistry,\r\n url: string,\r\n apiKey: string,\r\n options?: TypedClientOptions<TTenantMap>,\r\n): TypedAthenaClient<TRegistry, TTenantMap> {\r\n return new TypedAthenaClientImpl({\r\n registry,\r\n url,\r\n apiKey,\r\n options,\r\n })\r\n}\r\n\r\n","import type {\r\n IntrospectionColumn,\r\n IntrospectionRelation,\r\n IntrospectionSchema,\r\n IntrospectionTable,\r\n ModelRelationKind,\r\n} from './types.ts'\r\n\r\nexport type ColumnQueryRow = {\r\n schema_name: string\r\n table_name: string\r\n column_name: string\r\n data_type: string\r\n udt_name: string\r\n type_kind_code: string\r\n type_oid: number\r\n is_nullable: boolean\r\n has_default: boolean\r\n is_generated: boolean\r\n array_dimensions: number\r\n}\r\n\r\nexport type PrimaryKeyQueryRow = {\r\n schema_name: string\r\n table_name: string\r\n columns: string[]\r\n}\r\n\r\nexport type ForeignKeyQueryRow = {\r\n source_schema: string\r\n source_table: string\r\n constraint_name: string\r\n source_columns: string[]\r\n target_schema: string\r\n target_table: string\r\n target_columns: string[]\r\n source_is_unique: boolean\r\n}\r\n\r\nexport type EnumQueryRow = {\r\n type_oid: number\r\n enum_label: string\r\n}\r\n\r\ntype BridgeCandidate = {\r\n schema: string\r\n table: string\r\n foreignKeys: ForeignKeyQueryRow[]\r\n}\r\n\r\nexport const POSTGRES_CATALOG_SQL = {\r\n columns: `\r\n SELECT\r\n n.nspname AS schema_name,\r\n c.relname AS table_name,\r\n a.attname AS column_name,\r\n format_type(a.atttypid, a.atttypmod) AS data_type,\r\n t.typname AS udt_name,\r\n t.typtype AS type_kind_code,\r\n t.oid AS type_oid,\r\n NOT a.attnotnull AS is_nullable,\r\n (ad.adbin IS NOT NULL) AS has_default,\r\n (a.attgenerated <> '') AS is_generated,\r\n a.attndims AS array_dimensions\r\n FROM pg_attribute a\r\n JOIN pg_class c ON c.oid = a.attrelid\r\n JOIN pg_namespace n ON n.oid = c.relnamespace\r\n JOIN pg_type t ON t.oid = a.atttypid\r\n LEFT JOIN pg_attrdef ad ON ad.adrelid = a.attrelid AND ad.adnum = a.attnum\r\n WHERE c.relkind IN ('r', 'p')\r\n AND a.attnum > 0\r\n AND NOT a.attisdropped\r\n AND n.nspname = ANY($1::text[])\r\n ORDER BY n.nspname, c.relname, a.attnum;\r\n `,\r\n enums: `\r\n SELECT\r\n t.oid AS type_oid,\r\n e.enumlabel AS enum_label\r\n FROM pg_type t\r\n JOIN pg_enum e ON e.enumtypid = t.oid\r\n ORDER BY t.oid, e.enumsortorder;\r\n `,\r\n primaryKeys: `\r\n SELECT\r\n n.nspname AS schema_name,\r\n c.relname AS table_name,\r\n ARRAY_AGG(a.attname ORDER BY ck.ordinality) AS columns\r\n FROM pg_constraint con\r\n JOIN pg_class c ON c.oid = con.conrelid\r\n JOIN pg_namespace n ON n.oid = c.relnamespace\r\n JOIN unnest(con.conkey) WITH ORDINALITY AS ck(attnum, ordinality) ON TRUE\r\n JOIN pg_attribute a ON a.attrelid = c.oid AND a.attnum = ck.attnum\r\n WHERE con.contype = 'p'\r\n AND n.nspname = ANY($1::text[])\r\n GROUP BY n.nspname, c.relname\r\n ORDER BY n.nspname, c.relname;\r\n `,\r\n foreignKeys: `\r\n SELECT\r\n sn.nspname AS source_schema,\r\n sc.relname AS source_table,\r\n con.conname AS constraint_name,\r\n ARRAY_AGG(sa.attname ORDER BY cols.ordinality) AS source_columns,\r\n tn.nspname AS target_schema,\r\n tc.relname AS target_table,\r\n ARRAY_AGG(ta.attname ORDER BY cols.ordinality) AS target_columns,\r\n EXISTS (\r\n SELECT 1\r\n FROM pg_constraint uq\r\n WHERE uq.conrelid = con.conrelid\r\n AND uq.contype IN ('p', 'u')\r\n AND uq.conkey = con.conkey\r\n ) AS source_is_unique\r\n FROM pg_constraint con\r\n JOIN pg_class sc ON sc.oid = con.conrelid\r\n JOIN pg_namespace sn ON sn.oid = sc.relnamespace\r\n JOIN pg_class tc ON tc.oid = con.confrelid\r\n JOIN pg_namespace tn ON tn.oid = tc.relnamespace\r\n JOIN unnest(con.conkey, con.confkey) WITH ORDINALITY AS cols(source_attnum, target_attnum, ordinality) ON TRUE\r\n JOIN pg_attribute sa ON sa.attrelid = con.conrelid AND sa.attnum = cols.source_attnum\r\n JOIN pg_attribute ta ON ta.attrelid = con.confrelid AND ta.attnum = cols.target_attnum\r\n WHERE con.contype = 'f'\r\n AND sn.nspname = ANY($1::text[])\r\n AND tn.nspname = ANY($1::text[])\r\n GROUP BY\r\n sn.nspname,\r\n sc.relname,\r\n con.conname,\r\n tn.nspname,\r\n tc.relname,\r\n con.conkey,\r\n con.conrelid\r\n ORDER BY sn.nspname, sc.relname, con.conname;\r\n `,\r\n} as const\r\n\r\nfunction tableKey(schema: string, table: string): string {\r\n return `${schema}.${table}`\r\n}\r\n\r\nfunction relationKey(...parts: string[]): string {\r\n const base = parts\r\n .join('_')\r\n .replace(/[^A-Za-z0-9_]+/g, '_')\r\n .replace(/^_+|_+$/g, '')\r\n return base.length > 0 ? base : 'relation'\r\n}\r\n\r\nfunction toTypeKind(code: string): IntrospectionColumn['typeKind'] {\r\n switch (code) {\r\n case 'e':\r\n return 'enum'\r\n case 'd':\r\n return 'domain'\r\n case 'r':\r\n return 'range'\r\n case 'm':\r\n return 'multirange'\r\n case 'c':\r\n return 'composite'\r\n default:\r\n return 'scalar'\r\n }\r\n}\r\n\r\nfunction escapeSqlLiteral(value: string): string {\r\n return value.replace(/'/g, \"''\")\r\n}\r\n\r\nfunction parsePostgresArrayLiteral(text: string): string[] {\r\n const body = text.slice(1, -1).trim()\r\n if (!body) return []\r\n\r\n const values: string[] = []\r\n let current = ''\r\n let inQuotes = false\r\n let escaped = false\r\n\r\n for (const char of body) {\r\n if (escaped) {\r\n current += char\r\n escaped = false\r\n continue\r\n }\r\n if (char === '\\\\') {\r\n escaped = true\r\n continue\r\n }\r\n if (char === '\"') {\r\n inQuotes = !inQuotes\r\n continue\r\n }\r\n if (char === ',' && !inQuotes) {\r\n values.push(current)\r\n current = ''\r\n continue\r\n }\r\n current += char\r\n }\r\n\r\n values.push(current)\r\n return values.map(value => value.trim()).filter(value => value.length > 0)\r\n}\r\n\r\nfunction coerceStringArray(value: unknown): string[] {\r\n if (Array.isArray(value)) {\r\n return value\r\n .map(item => (typeof item === 'string' ? item : String(item)))\r\n .map(item => item.trim())\r\n .filter(item => item.length > 0)\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const trimmed = value.trim()\r\n if (!trimmed) return []\r\n\r\n if (trimmed.startsWith('[') && trimmed.endsWith(']')) {\r\n try {\r\n const parsed = JSON.parse(trimmed) as unknown\r\n return coerceStringArray(parsed)\r\n } catch {\r\n // Fall through to more permissive parsing paths.\r\n }\r\n }\r\n\r\n if (trimmed.startsWith('{') && trimmed.endsWith('}')) {\r\n return parsePostgresArrayLiteral(trimmed)\r\n }\r\n\r\n return trimmed\r\n .split(',')\r\n .map(item => item.trim())\r\n .filter(item => item.length > 0)\r\n }\r\n\r\n return []\r\n}\r\n\r\nexport function normalizePostgresCatalogSchemas(schemas?: readonly string[]): string[] {\r\n const normalized: string[] = []\r\n const seen = new Set<string>()\r\n\r\n for (const value of schemas ?? []) {\r\n const schema = value.trim()\r\n if (!schema || seen.has(schema)) {\r\n continue\r\n }\r\n seen.add(schema)\r\n normalized.push(schema)\r\n }\r\n\r\n return normalized.length > 0 ? normalized : ['public']\r\n}\r\n\r\nexport function buildSchemaArrayLiteral(schemas: readonly string[]): string {\r\n const normalized = normalizePostgresCatalogSchemas(schemas)\r\n const literals = normalized.map(schema => `'${escapeSqlLiteral(schema)}'`).join(', ')\r\n return `ARRAY[${literals}]`\r\n}\r\n\r\nfunction inlineSchemaLiteral(sql: string, schemas: readonly string[]): string {\r\n const schemaArray = `${buildSchemaArrayLiteral(schemas)}::text[]`\r\n return sql.replace(/\\$1::text\\[\\]/g, schemaArray)\r\n}\r\n\r\nexport function buildGatewayCatalogQueries(schemas: readonly string[]): {\r\n columns: string\r\n enums: string\r\n primaryKeys: string\r\n foreignKeys: string\r\n} {\r\n return {\r\n columns: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.columns, schemas),\r\n enums: POSTGRES_CATALOG_SQL.enums,\r\n primaryKeys: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.primaryKeys, schemas),\r\n foreignKeys: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.foreignKeys, schemas),\r\n }\r\n}\r\n\r\nexport class PostgresCatalogSnapshotAssembler {\r\n private readonly schemas: Record<string, IntrospectionSchema> = {}\r\n\r\n addColumnRows(columnRows: ColumnQueryRow[], enumMap: Map<number, string[]>) {\r\n for (const row of columnRows) {\r\n const table = this.ensureTable(row.schema_name, row.table_name)\r\n table.columns[row.column_name] = {\r\n name: row.column_name,\r\n dataType: row.data_type,\r\n udtName: row.udt_name,\r\n typeKind: toTypeKind(row.type_kind_code),\r\n isNullable: row.is_nullable,\r\n isPrimaryKey: false,\r\n hasDefault: row.has_default,\r\n isGenerated: row.is_generated,\r\n arrayDimensions: row.array_dimensions ?? 0,\r\n enumValues: enumMap.get(row.type_oid),\r\n }\r\n }\r\n }\r\n\r\n addPrimaryKeyRows(primaryKeyRows: PrimaryKeyQueryRow[]) {\r\n for (const row of primaryKeyRows) {\r\n const table = this.ensureTable(row.schema_name, row.table_name)\r\n const primaryKeyColumns = coerceStringArray(row.columns)\r\n row.columns = primaryKeyColumns\r\n table.primaryKey = primaryKeyColumns\r\n for (const columnName of primaryKeyColumns) {\r\n const column = table.columns[columnName]\r\n if (column) {\r\n column.isPrimaryKey = true\r\n }\r\n }\r\n }\r\n }\r\n\r\n addForeignKeyRows(foreignKeyRows: ForeignKeyQueryRow[]) {\r\n for (const row of foreignKeyRows) {\r\n const sourceTable = this.ensureTable(row.source_schema, row.source_table)\r\n const targetTable = this.ensureTable(row.target_schema, row.target_table)\r\n const sourceColumns = coerceStringArray(row.source_columns)\r\n const targetColumns = coerceStringArray(row.target_columns)\r\n row.source_columns = sourceColumns\r\n row.target_columns = targetColumns\r\n\r\n const sourceRelationKind: ModelRelationKind = row.source_is_unique ? 'one-to-one' : 'many-to-one'\r\n this.upsertRelation(sourceTable, relationKey(row.constraint_name, row.target_table), {\r\n name: row.constraint_name,\r\n kind: sourceRelationKind,\r\n sourceColumns,\r\n targetSchema: row.target_schema,\r\n targetModel: row.target_table,\r\n targetColumns,\r\n })\r\n\r\n const targetRelationKind: ModelRelationKind = row.source_is_unique ? 'one-to-one' : 'one-to-many'\r\n this.upsertRelation(targetTable, relationKey(row.source_table), {\r\n name: relationKey(row.source_table, row.constraint_name),\r\n kind: targetRelationKind,\r\n sourceColumns: targetColumns,\r\n targetSchema: row.source_schema,\r\n targetModel: row.source_table,\r\n targetColumns: sourceColumns,\r\n })\r\n }\r\n }\r\n\r\n addManyToManyRows(foreignKeyRows: ForeignKeyQueryRow[]) {\r\n const bySourceTable = new Map<string, BridgeCandidate>()\r\n for (const fk of foreignKeyRows) {\r\n const key = tableKey(fk.source_schema, fk.source_table)\r\n const current = bySourceTable.get(key) ?? {\r\n schema: fk.source_schema,\r\n table: fk.source_table,\r\n foreignKeys: [],\r\n }\r\n current.foreignKeys.push(fk)\r\n bySourceTable.set(key, current)\r\n }\r\n\r\n for (const candidate of bySourceTable.values()) {\r\n const bridgeTable = this.schemas[candidate.schema]?.tables[candidate.table]\r\n if (!bridgeTable) continue\r\n\r\n const primaryKey = bridgeTable.primaryKey\r\n if (candidate.foreignKeys.length !== 2 || primaryKey.length === 0) continue\r\n\r\n const combinedForeignColumns = Array.from(\r\n new Set(candidate.foreignKeys.flatMap(fk => fk.source_columns)),\r\n )\r\n if (\r\n combinedForeignColumns.length !== primaryKey.length ||\r\n !primaryKey.every(column => combinedForeignColumns.includes(column))\r\n ) {\r\n continue\r\n }\r\n\r\n const [first, second] = candidate.foreignKeys\r\n const firstTarget = this.schemas[first.target_schema]?.tables[first.target_table]\r\n const secondTarget = this.schemas[second.target_schema]?.tables[second.target_table]\r\n if (!firstTarget || !secondTarget) {\r\n continue\r\n }\r\n\r\n this.upsertRelation(firstTarget, relationKey(second.target_table), {\r\n name: relationKey(candidate.table, first.constraint_name, second.constraint_name),\r\n kind: 'many-to-many',\r\n sourceColumns: first.target_columns,\r\n targetSchema: second.target_schema,\r\n targetModel: second.target_table,\r\n targetColumns: second.target_columns,\r\n through: {\r\n schema: candidate.schema,\r\n model: candidate.table,\r\n sourceColumns: first.source_columns,\r\n targetColumns: second.source_columns,\r\n },\r\n })\r\n\r\n this.upsertRelation(secondTarget, relationKey(first.target_table), {\r\n name: relationKey(candidate.table, second.constraint_name, first.constraint_name),\r\n kind: 'many-to-many',\r\n sourceColumns: second.target_columns,\r\n targetSchema: first.target_schema,\r\n targetModel: first.target_table,\r\n targetColumns: first.target_columns,\r\n through: {\r\n schema: candidate.schema,\r\n model: candidate.table,\r\n sourceColumns: second.source_columns,\r\n targetColumns: first.source_columns,\r\n },\r\n })\r\n }\r\n }\r\n\r\n toSchemas(): Record<string, IntrospectionSchema> {\r\n return this.schemas\r\n }\r\n\r\n private ensureTable(schemaName: string, tableName: string): IntrospectionTable {\r\n if (!this.schemas[schemaName]) {\r\n this.schemas[schemaName] = {\r\n name: schemaName,\r\n tables: {},\r\n }\r\n }\r\n\r\n const schema = this.schemas[schemaName]\r\n if (!schema.tables[tableName]) {\r\n schema.tables[tableName] = {\r\n schema: schemaName,\r\n name: tableName,\r\n columns: {},\r\n primaryKey: [],\r\n relations: {},\r\n }\r\n }\r\n\r\n return schema.tables[tableName]\r\n }\r\n\r\n private upsertRelation(\r\n table: IntrospectionTable,\r\n baseKey: string,\r\n relation: IntrospectionRelation,\r\n ) {\r\n let key = baseKey\r\n let suffix = 2\r\n while (table.relations[key]) {\r\n key = `${baseKey}_${suffix}`\r\n suffix += 1\r\n }\r\n table.relations[key] = relation\r\n }\r\n}\r\n","import type { Pool } from 'pg'\nimport type {\n IntrospectionInspectOptions,\n IntrospectionSnapshot,\n SchemaIntrospectionProvider,\n} from './types.ts'\nimport {\r\n type ColumnQueryRow,\r\n type EnumQueryRow,\r\n type ForeignKeyQueryRow,\r\n type PrimaryKeyQueryRow,\r\n POSTGRES_CATALOG_SQL,\r\n normalizePostgresCatalogSchemas,\r\n PostgresCatalogSnapshotAssembler,\r\n} from './postgres-introspection-core.ts'\r\n\r\n/**\r\n * Constructor options for the PostgreSQL introspection provider.\r\n */\r\nexport interface PostgresIntrospectionProviderOptions {\n connectionString: string\n database?: string\n schemas?: readonly string[]\n}\n\ntype PgPoolConstructor = new (config: { connectionString: string }) => Pool\n\nlet pgPoolConstructorPromise: Promise<PgPoolConstructor> | undefined\n\nasync function loadPgPoolConstructor(): Promise<PgPoolConstructor> {\n if (!pgPoolConstructorPromise) {\n pgPoolConstructorPromise = import('pg').then(module => {\n const poolConstructor =\n (module as { Pool?: PgPoolConstructor }).Pool ??\n (module as { default?: { Pool?: PgPoolConstructor } }).default?.Pool\n\n if (!poolConstructor) {\n throw new Error(\n '@xylex-group/athena: Unable to load the PostgreSQL driver. Ensure \"pg\" is installed and this API runs in a Node.js server runtime.',\n )\n }\n\n return poolConstructor\n })\n }\n\n return pgPoolConstructorPromise\n}\n\nclass PgCatalogClient {\n constructor(private readonly pool: Pool) {}\n\r\n async queryColumns(schemas: string[]): Promise<ColumnQueryRow[]> {\r\n const result = await this.pool.query<ColumnQueryRow>(POSTGRES_CATALOG_SQL.columns, [schemas])\r\n return result.rows\r\n }\r\n\r\n async queryEnums(): Promise<Map<number, string[]>> {\r\n const result = await this.pool.query<EnumQueryRow>(POSTGRES_CATALOG_SQL.enums)\r\n const enumMap = new Map<number, string[]>()\r\n for (const row of result.rows) {\r\n const existing = enumMap.get(row.type_oid) ?? []\r\n existing.push(row.enum_label)\r\n enumMap.set(row.type_oid, existing)\r\n }\r\n return enumMap\r\n }\r\n\r\n async queryPrimaryKeys(schemas: string[]): Promise<PrimaryKeyQueryRow[]> {\r\n const result = await this.pool.query<PrimaryKeyQueryRow>(POSTGRES_CATALOG_SQL.primaryKeys, [schemas])\r\n return result.rows\r\n }\r\n\r\n async queryForeignKeys(schemas: string[]): Promise<ForeignKeyQueryRow[]> {\r\n const result = await this.pool.query<ForeignKeyQueryRow>(POSTGRES_CATALOG_SQL.foreignKeys, [schemas])\r\n return result.rows\r\n }\r\n}\r\n\r\nclass PostgresIntrospectionProvider implements SchemaIntrospectionProvider {\r\n readonly backend = 'postgresql' as const\r\n\r\n private readonly connectionString: string\r\n private readonly database: string\r\n private readonly schemas: string[]\r\n\r\n constructor(options: PostgresIntrospectionProviderOptions) {\r\n this.connectionString = options.connectionString\r\n this.database = options.database ?? 'postgres'\r\n this.schemas = normalizePostgresCatalogSchemas(options.schemas)\r\n }\r\n\r\n async inspect(options?: IntrospectionInspectOptions): Promise<IntrospectionSnapshot> {\n const schemas = options?.schemas && options.schemas.length > 0\n ? normalizePostgresCatalogSchemas(options.schemas)\n : this.schemas\n const PoolConstructor = await loadPgPoolConstructor()\n const pool = new PoolConstructor({\n connectionString: this.connectionString,\n })\n const catalogClient = new PgCatalogClient(pool)\n\r\n try {\r\n const [columnRows, enumMap, primaryKeyRows, foreignKeyRows] = await Promise.all([\r\n catalogClient.queryColumns(schemas),\r\n catalogClient.queryEnums(),\r\n catalogClient.queryPrimaryKeys(schemas),\r\n catalogClient.queryForeignKeys(schemas),\r\n ])\r\n\r\n const assembler = new PostgresCatalogSnapshotAssembler()\r\n assembler.addColumnRows(columnRows, enumMap)\r\n assembler.addPrimaryKeyRows(primaryKeyRows)\r\n assembler.addForeignKeyRows(foreignKeyRows)\r\n assembler.addManyToManyRows(foreignKeyRows)\r\n\r\n return {\r\n backend: 'postgresql',\r\n database: this.database,\r\n generatedAt: new Date().toISOString(),\r\n schemas: assembler.toSchemas(),\r\n }\r\n } finally {\r\n await pool.end()\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Creates a PostgreSQL-backed schema introspection provider.\r\n */\r\nexport function createPostgresIntrospectionProvider(\r\n options: PostgresIntrospectionProviderOptions,\r\n): SchemaIntrospectionProvider {\r\n return new PostgresIntrospectionProvider(options)\r\n}\r\n","import type { AnyModelDef, InsertOf, RowOf, UpdateOf } from './types.ts'\r\n\r\ntype ModelValueRecord = Record<string, unknown>\r\n\r\nexport type ModelFormNullishMode = 'empty-string' | 'undefined' | 'null'\r\n\r\ntype NullishValueByMode = {\r\n 'empty-string': ''\r\n undefined: undefined\r\n null: null\r\n}\r\n\r\ntype MapNullableToFormValue<TField, TMode extends ModelFormNullishMode> =\r\n null extends TField\r\n ? Exclude<TField, null> | NullishValueByMode[TMode]\r\n : TField\r\n\r\n/**\r\n * Form value shape derived from a model insert payload.\r\n * Nullable fields are remapped to the selected nullish representation.\r\n */\r\nexport type ModelFormValues<\r\n TModel extends AnyModelDef,\r\n TMode extends ModelFormNullishMode = 'empty-string',\r\n> = {\r\n [K in keyof InsertOf<TModel>]: MapNullableToFormValue<InsertOf<TModel>[K], TMode>\r\n}\r\n\r\n/**\r\n * Default value shape for form initialization.\r\n */\r\nexport type ModelFormDefaults<\r\n TModel extends AnyModelDef,\r\n TMode extends ModelFormNullishMode = 'empty-string',\r\n> = Partial<ModelFormValues<TModel, TMode>>\r\n\r\nexport interface ToModelFormDefaultsOptions<TMode extends ModelFormNullishMode = 'empty-string'> {\r\n /**\r\n * Controls how nullable model values are represented in form defaults.\r\n * - `empty-string` (default): `null -> \"\"`\r\n * - `undefined`: `null -> undefined`\r\n * - `null`: keeps `null`\r\n */\r\n nullishMode?: TMode\r\n}\r\n\r\nexport interface ToModelPayloadOptions {\r\n /**\r\n * Converts `\"\"` into `null` for nullable model fields.\r\n * Defaults to `true`.\r\n */\r\n emptyStringAsNull?: boolean\r\n /**\r\n * Omits `undefined` keys from the outgoing payload.\r\n * Defaults to `true`.\r\n */\r\n stripUndefined?: boolean\r\n}\r\n\r\nfunction resolveNullishValue(mode: ModelFormNullishMode): '' | undefined | null {\r\n if (mode === 'undefined') return undefined\r\n if (mode === 'null') return null\r\n return ''\r\n}\r\n\r\nfunction isRecord(value: unknown): value is ModelValueRecord {\r\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\r\n}\r\n\r\nfunction isNullableColumn(model: AnyModelDef, key: string): boolean {\r\n const nullable = model.meta.nullable as Partial<Record<string, boolean>> | undefined\r\n return nullable?.[key] === true\r\n}\r\n\r\n/**\r\n * Normalizes model data into form-safe defaults using model nullability metadata.\r\n */\r\nexport function toModelFormDefaults<\r\n TModel extends AnyModelDef,\r\n TMode extends ModelFormNullishMode = 'empty-string',\r\n>(\r\n model: TModel,\r\n values?: Partial<RowOf<TModel>> | Partial<InsertOf<TModel>> | null,\r\n options?: ToModelFormDefaultsOptions<TMode>,\r\n): ModelFormDefaults<TModel, TMode> {\r\n const source = values as ModelValueRecord | null | undefined\r\n if (!isRecord(source)) {\r\n return {} as ModelFormDefaults<TModel, TMode>\r\n }\r\n\r\n const mode = options?.nullishMode ?? ('empty-string' as TMode)\r\n const nullishValue = resolveNullishValue(mode)\r\n const result: ModelValueRecord = {}\r\n\r\n for (const [key, value] of Object.entries(source)) {\r\n if (value === null && isNullableColumn(model, key)) {\r\n result[key] = nullishValue\r\n continue\r\n }\r\n result[key] = value\r\n }\r\n\r\n return result as ModelFormDefaults<TModel, TMode>\r\n}\r\n\r\n/**\r\n * Normalizes form values back into model-compatible insert/update payloads.\r\n */\r\nexport function toModelPayload<TModel extends AnyModelDef>(\r\n model: TModel,\r\n formValues: Partial<ModelFormValues<TModel, 'empty-string' | 'undefined' | 'null'>>,\r\n options?: ToModelPayloadOptions,\r\n): Partial<InsertOf<TModel>> {\r\n const emptyStringAsNull = options?.emptyStringAsNull ?? true\r\n const stripUndefined = options?.stripUndefined ?? true\r\n const result: ModelValueRecord = {}\r\n\r\n for (const [key, rawValue] of Object.entries(formValues as ModelValueRecord)) {\r\n if (rawValue === undefined && stripUndefined) {\r\n continue\r\n }\r\n\r\n if (emptyStringAsNull && rawValue === '' && isNullableColumn(model, key)) {\r\n result[key] = null\r\n continue\r\n }\r\n\r\n result[key] = rawValue\r\n }\r\n\r\n return result as Partial<InsertOf<TModel>>\r\n}\r\n\r\n/**\r\n * Runtime form adapter bound to a model contract.\r\n */\r\nexport interface ModelFormAdapter<TModel extends AnyModelDef> {\r\n model: TModel\r\n toDefaults<TMode extends ModelFormNullishMode = 'empty-string'>(\r\n values?: Partial<RowOf<TModel>> | Partial<InsertOf<TModel>> | null,\r\n options?: ToModelFormDefaultsOptions<TMode>,\r\n ): ModelFormDefaults<TModel, TMode>\r\n toInsert(\r\n values: Partial<ModelFormValues<TModel, 'empty-string' | 'undefined' | 'null'>>,\r\n options?: ToModelPayloadOptions,\r\n ): Partial<InsertOf<TModel>>\r\n toUpdate(\r\n values: Partial<ModelFormValues<TModel, 'empty-string' | 'undefined' | 'null'>>,\r\n options?: ToModelPayloadOptions,\r\n ): Partial<UpdateOf<TModel>>\r\n}\r\n\r\n/**\r\n * Creates a small model-aware adapter for form defaults and payload normalization.\r\n */\r\nexport function createModelFormAdapter<TModel extends AnyModelDef>(model: TModel): ModelFormAdapter<TModel> {\r\n return {\r\n model,\r\n toDefaults(values, options) {\r\n return toModelFormDefaults(model, values, options)\r\n },\r\n toInsert(values, options) {\r\n return toModelPayload(model, values, options) as Partial<InsertOf<TModel>>\r\n },\r\n toUpdate(values, options) {\r\n return toModelPayload(model, values, options) as Partial<UpdateOf<TModel>>\r\n },\r\n }\r\n}\r\n","import type { GeneratorProviderConfig, GeneratorSchemaSelection } from './types.ts'\r\n\r\nexport const DEFAULT_POSTGRES_SCHEMAS = ['public'] as const\r\n\r\nfunction collectSchemaNames(input: GeneratorSchemaSelection | undefined): string[] {\r\n if (!input) {\r\n return []\r\n }\r\n\r\n const values = typeof input === 'string' ? [input] : input\r\n return values.flatMap(value => String(value).split(','))\r\n}\r\n\r\n/**\r\n * Normalizes schema selection from config or env-backed strings into a stable,\r\n * deduplicated list. Empty selections fall back to PostgreSQL's public schema.\r\n */\r\nexport function normalizeSchemaSelection(\r\n input: GeneratorSchemaSelection | undefined,\r\n): string[] {\r\n const schemas: string[] = []\r\n const seen = new Set<string>()\r\n\r\n for (const value of collectSchemaNames(input)) {\r\n const schema = value.trim()\r\n if (!schema || seen.has(schema)) {\r\n continue\r\n }\r\n seen.add(schema)\r\n schemas.push(schema)\r\n }\r\n\r\n return schemas.length > 0 ? schemas : [...DEFAULT_POSTGRES_SCHEMAS]\r\n}\r\n\r\n/**\r\n * Resolves the effective schema list for provider-backed generator runs.\r\n */\r\nexport function resolveProviderSchemas(providerConfig: GeneratorProviderConfig): string[] {\r\n if (providerConfig.kind === 'postgres') {\r\n return normalizeSchemaSelection(providerConfig.schemas)\r\n }\r\n\r\n return [...DEFAULT_POSTGRES_SCHEMAS]\r\n}\r\n","import { existsSync, readFileSync } from 'fs'\nimport { resolve } from 'path'\nimport { pathToFileURL } from 'url'\nimport type {\n AthenaGeneratorConfig,\n GeneratorExperimentalFlags,\n GeneratorFeatureFlags,\n GeneratorNamingConfig,\r\n GeneratorOutputConfig,\r\n GeneratorOutputTargets,\r\n GeneratorProviderConfig,\r\n LoadGeneratorConfigOptions,\r\n LoadedGeneratorConfig,\n NormalizedAthenaGeneratorConfig,\n} from './types.ts'\nimport { parseBooleanFlag } from '../auxiliaries.ts'\nimport { normalizeSchemaSelection } from './schema-selection.ts'\n\nconst POSTGRES_PROTOCOLS = new Set(['postgres:', 'postgresql:'])\n\nconst DEFAULT_CONFIG_CANDIDATES = [\n 'athena.config.ts',\n 'athena.config.js',\r\n 'athena-js.config.ts',\r\n 'athena-js.config.js',\r\n '.athena.config.ts',\r\n '.athena.config.js',\r\n]\r\n\r\nconst DEFAULT_TARGETS: GeneratorOutputTargets = {\r\n model: 'athena/models/{schema_kebab}/{model_kebab}.ts',\r\n schema: 'athena/schemas/{schema_kebab}.ts',\r\n database: 'athena/relations.ts',\r\n registry: 'athena/config.ts',\r\n}\r\n\r\nconst DEFAULT_NAMING: GeneratorNamingConfig = {\r\n modelType: 'pascal',\r\n modelConst: 'camel',\r\n schemaConst: 'camel',\r\n databaseConst: 'camel',\r\n registryConst: 'camel',\r\n}\r\n\r\nconst DEFAULT_FEATURES: GeneratorFeatureFlags = {\r\n emitRelations: true,\r\n emitRegistry: true,\r\n}\r\n\r\nconst DEFAULT_EXPERIMENTAL_FLAGS: GeneratorExperimentalFlags = {\n postgresGatewayIntrospection: false,\n scyllaProviderContracts: true,\n}\n\nconst PROJECT_ENV_FILENAMES = ['.env', '.env.local'] as const\n\nconst DIRECT_CONNECTION_STRING_ENV_KEYS = [\n 'ATHENA_GENERATOR_PG_URL',\n 'DATABASE_URL',\n 'PG_URL',\n 'POSTGRES_URL',\n 'POSTGRESQL_URL',\n] as const\n\nconst POSTGRES_DATABASE_ENV_KEYS = ['ATHENA_GENERATOR_DB', 'ATHENA_DATABASE', 'PGDATABASE'] as const\n\nconst POSTGRES_PASSWORD_ENV_KEYS = ['ATHENA_GENERATOR_PG_PASSWORD', 'PGPASSWORD'] as const\n\nconst GATEWAY_URL_ENV_KEYS = ['ATHENA_URL', 'ATHENA_GATEWAY_URL', 'ATHENA_GENERATOR_URL'] as const\n\nconst GATEWAY_API_KEY_ENV_KEYS = [\n 'ATHENA_API_KEY',\n 'ATHENA_GATEWAY_API_KEY',\n 'ATHENA_GENERATOR_API_KEY',\n] as const\n\nfunction normalizeRawEnvValue(rawValue: string): string {\n if (rawValue.startsWith('\"') && rawValue.endsWith('\"') && rawValue.length >= 2) {\n const inner = rawValue.slice(1, -1)\n return inner\n .replace(/\\\\n/g, '\\n')\n .replace(/\\\\r/g, '\\r')\n .replace(/\\\\t/g, '\\t')\n .replace(/\\\\\"/g, '\"')\n .replace(/\\\\\\\\/g, '\\\\')\n }\n\n if (rawValue.startsWith(\"'\") && rawValue.endsWith(\"'\") && rawValue.length >= 2) {\n return rawValue.slice(1, -1)\n }\n\n const commentIndex = rawValue.search(/\\s+#/)\n const withoutComment = commentIndex >= 0 ? rawValue.slice(0, commentIndex) : rawValue\n return withoutComment.trim()\n}\n\nfunction parseEnvLine(line: string): [key: string, value: string] | undefined {\n const trimmed = line.trim()\n if (!trimmed || trimmed.startsWith('#')) {\n return undefined\n }\n\n const match = trimmed.match(/^(?:export\\s+)?([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(.*)$/)\n if (!match) {\n return undefined\n }\n\n const [, key, rawValue] = match\n return [key, normalizeRawEnvValue(rawValue.trim())]\n}\n\nfunction readProjectEnvEntries(cwd: string): Map<string, string> {\n const nodeEnv = process.env.NODE_ENV?.trim()\n const filenames = [\n ...PROJECT_ENV_FILENAMES,\n ...(nodeEnv ? [`.env.${nodeEnv}`, `.env.${nodeEnv}.local`] : []),\n ]\n\n const entries = new Map<string, string>()\n\n for (const filename of filenames) {\n const absolutePath = resolve(cwd, filename)\n if (!existsSync(absolutePath)) {\n continue\n }\n\n const content = readFileSync(absolutePath, 'utf8')\n const lines = content.split(/\\r?\\n/g)\n for (const line of lines) {\n const parsed = parseEnvLine(line)\n if (!parsed) {\n continue\n }\n const [key, value] = parsed\n entries.set(key, value)\n }\n }\n\n return entries\n}\n\nfunction applyProjectEnv(cwd: string): () => void {\n const envEntries = readProjectEnvEntries(cwd)\n if (envEntries.size === 0) {\n return () => {}\n }\n\n const initialKeys = new Set<string>(\n Object.keys(process.env).filter(key => process.env[key] !== undefined),\n )\n const staged = new Map<string, string>()\n\n for (const [key, value] of envEntries.entries()) {\n if (initialKeys.has(key)) {\n continue\n }\n staged.set(key, value)\n }\n\n for (const [key, value] of staged.entries()) {\n process.env[key] = value\n }\n\n return () => {\n for (const key of staged.keys()) {\n delete process.env[key]\n }\n }\n}\n\nfunction readEnvStringValue(key: string): string | undefined {\n const value = process.env[key]\n if (typeof value !== 'string') {\n return undefined\n }\n\n const trimmed = value.trim()\n return trimmed.length > 0 ? trimmed : undefined\n}\n\nfunction resolveFallbackValue(\n fallbackKeys: readonly string[],\n): string | undefined {\n for (const key of fallbackKeys) {\n const value = readEnvStringValue(key)\n if (value) {\n return value\n }\n }\n return undefined\n}\n\nfunction normalizeOptionalString(\n value: unknown,\n fallbackKeys: readonly string[],\n): string | undefined {\n if (typeof value === 'string') {\n const trimmed = value.trim()\n if (trimmed.length > 0) {\n return trimmed\n }\n }\n\n return resolveFallbackValue(fallbackKeys)\n}\n\nfunction normalizeRequiredString(\n value: unknown,\n fieldLabel: string,\n fallbackKeys: readonly string[],\n): string {\n const resolved = normalizeOptionalString(value, fallbackKeys)\n if (resolved) {\n return resolved\n }\n\n throw new Error(\n `Generator config is missing ${fieldLabel}. Set ${fieldLabel} directly or provide one of: ${fallbackKeys.join(', ')}.`,\n )\n}\n\nfunction applyPostgresPasswordFallback(connectionString: string): string {\n let parsedUrl: URL\n try {\n parsedUrl = new URL(connectionString)\n } catch {\n return connectionString\n }\n\n if (!POSTGRES_PROTOCOLS.has(parsedUrl.protocol)) {\n return connectionString\n }\n\n if (!parsedUrl.username || parsedUrl.password) {\n return connectionString\n }\n\n const fallbackPassword = resolveFallbackValue(POSTGRES_PASSWORD_ENV_KEYS)\n if (!fallbackPassword) {\n return connectionString\n }\n\n parsedUrl.password = fallbackPassword\n return parsedUrl.toString()\n}\n\nfunction normalizeBooleanFlag(rawValue: unknown, fallback: boolean): boolean {\n if (typeof rawValue === 'boolean') {\n return rawValue\n }\n if (typeof rawValue === 'string') {\n return parseBooleanFlag(rawValue, fallback)\n }\n return fallback\n}\n\nfunction normalizeFeatureFlags(\n input: Partial<GeneratorFeatureFlags> | undefined,\n): GeneratorFeatureFlags {\n return {\n emitRelations: normalizeBooleanFlag(\n input?.emitRelations,\n DEFAULT_FEATURES.emitRelations,\n ),\n emitRegistry: normalizeBooleanFlag(\n input?.emitRegistry,\n DEFAULT_FEATURES.emitRegistry,\n ),\n }\n}\n\nfunction normalizeExperimentalFlags(\n input: Partial<GeneratorExperimentalFlags> | undefined,\n): GeneratorExperimentalFlags {\n return {\n postgresGatewayIntrospection: normalizeBooleanFlag(\n input?.postgresGatewayIntrospection,\n DEFAULT_EXPERIMENTAL_FLAGS.postgresGatewayIntrospection,\n ),\n scyllaProviderContracts: normalizeBooleanFlag(\n input?.scyllaProviderContracts,\n DEFAULT_EXPERIMENTAL_FLAGS.scyllaProviderContracts,\n ),\n }\n}\n\r\nfunction normalizeOutputConfig(output: GeneratorOutputConfig): GeneratorOutputConfig {\r\n return {\r\n targets: {\r\n ...DEFAULT_TARGETS,\r\n ...(output.targets ?? {}),\r\n },\r\n placeholderMap: {\r\n ...(output.placeholderMap ?? {}),\r\n },\r\n }\r\n}\r\n\r\nfunction normalizeProviderConfig(provider: GeneratorProviderConfig): GeneratorProviderConfig {\n if (provider.kind === 'postgres' && provider.mode === 'direct') {\n const connectionString = normalizeRequiredString(\n provider.connectionString,\n 'provider.connectionString',\n DIRECT_CONNECTION_STRING_ENV_KEYS,\n )\n const database = normalizeOptionalString(provider.database, POSTGRES_DATABASE_ENV_KEYS)\n\n return {\n ...provider,\n connectionString: applyPostgresPasswordFallback(connectionString),\n database,\n schemas: normalizeSchemaSelection(provider.schemas),\n }\n }\n\n if (provider.kind === 'postgres' && provider.mode === 'gateway') {\n const gatewayUrl = normalizeRequiredString(\n provider.gatewayUrl,\n 'provider.gatewayUrl',\n GATEWAY_URL_ENV_KEYS,\n )\n const apiKey = normalizeRequiredString(\n provider.apiKey,\n 'provider.apiKey',\n GATEWAY_API_KEY_ENV_KEYS,\n )\n const database = normalizeRequiredString(\n provider.database,\n 'provider.database',\n POSTGRES_DATABASE_ENV_KEYS,\n )\n\n return {\n ...provider,\n gatewayUrl,\n apiKey,\n database,\n schemas: normalizeSchemaSelection(provider.schemas),\n }\n }\n\r\n return provider\r\n}\r\n\r\nfunction isAthenaGeneratorConfig(value: unknown): value is AthenaGeneratorConfig {\r\n if (!value || typeof value !== 'object') {\r\n return false\r\n }\r\n const record = value as Record<string, unknown>\r\n return Boolean(record.provider && typeof record.provider === 'object') &&\r\n Boolean(record.output && typeof record.output === 'object')\r\n}\r\n\r\nexport function normalizeGeneratorConfig(input: AthenaGeneratorConfig): NormalizedAthenaGeneratorConfig {\n return {\n provider: normalizeProviderConfig(input.provider),\n output: normalizeOutputConfig(input.output),\n naming: {\n ...DEFAULT_NAMING,\n ...(input.naming ?? {}),\n },\n features: normalizeFeatureFlags(input.features),\n experimental: normalizeExperimentalFlags(input.experimental),\n }\n}\n\r\n/**\r\n * Typed identity helper for authoring generator configs.\r\n */\r\nexport function defineGeneratorConfig<TConfig extends AthenaGeneratorConfig>(\r\n config: TConfig,\r\n): TConfig {\r\n return config\r\n}\r\n\r\n/**\r\n * Finds a supported generator config filename in the provided directory.\r\n */\r\nexport function findGeneratorConfigPath(cwd: string = process.cwd()): string | undefined {\r\n for (const candidate of DEFAULT_CONFIG_CANDIDATES) {\r\n const absolutePath = resolve(cwd, candidate)\r\n if (existsSync(absolutePath)) {\r\n return absolutePath\r\n }\r\n }\r\n return undefined\r\n}\r\n\r\nfunction extractConfigExport(module: unknown): AthenaGeneratorConfig {\n const visited = new Set<unknown>()\n const queue: unknown[] = [module]\n\r\n while (queue.length > 0) {\r\n const current = queue.shift()\r\n if (!current || typeof current !== 'object' || visited.has(current)) {\r\n continue\r\n }\r\n visited.add(current)\r\n\r\n const record = current as Record<string, unknown>\r\n if (isAthenaGeneratorConfig(record)) {\r\n return record\r\n }\r\n\r\n const defaultExport = record.default\r\n if (defaultExport && typeof defaultExport === 'object') {\r\n queue.push(defaultExport)\r\n }\r\n\r\n const namedConfigExport = record.config\r\n if (namedConfigExport && typeof namedConfigExport === 'object') {\r\n queue.push(namedConfigExport)\r\n }\r\n\r\n const moduleExports = record['module.exports']\n if (moduleExports && typeof moduleExports === 'object') {\n queue.push(moduleExports)\n }\n\n for (const value of Object.values(record)) {\n if (value && typeof value === 'object') {\n queue.push(value)\n }\n }\n }\n\r\n throw new Error(\r\n 'Generator config file must export a config object as default export or `config`.',\r\n )\r\n}\r\n\r\nfunction importConfigModule(moduleSpecifier: string): Promise<unknown> {\r\n // Keep this as an indirect import so bundlers do not try to statically resolve\r\n // runtime file-system config paths when athena-js is consumed in Next.js.\r\n const runtimeImport = new Function(\r\n 'moduleSpecifier',\r\n 'return import(moduleSpecifier)',\r\n ) as (moduleSpecifier: string) => Promise<unknown>\r\n return runtimeImport(moduleSpecifier)\r\n}\r\n\r\n/**\r\n * Loads and normalizes `athena.config.*` from disk.\r\n */\r\nexport async function loadGeneratorConfig(\n options: LoadGeneratorConfigOptions = {},\n): Promise<LoadedGeneratorConfig> {\n const cwd = options.cwd ?? process.cwd()\n const restoreProjectEnv = applyProjectEnv(cwd)\n const resolvedPath = options.configPath\n ? resolve(cwd, options.configPath)\n : findGeneratorConfigPath(cwd)\n\n if (!resolvedPath) {\n throw new Error(\r\n `No generator config found in ${cwd}. Expected one of: ${DEFAULT_CONFIG_CANDIDATES.join(', ')}`,\r\n )\r\n }\r\n\r\n try {\n const moduleUrl = pathToFileURL(resolvedPath)\n const module = await importConfigModule(`${moduleUrl.href}?cacheBust=${Date.now()}`)\n const rawConfig = extractConfigExport(module)\n\n return {\n configPath: resolvedPath,\n config: normalizeGeneratorConfig(rawConfig),\n }\n } finally {\n restoreProjectEnv()\n }\n}\n","export function slugify(input: string): string {\n return input\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 64)\n}\n","import type { NamingStyle } from './types.ts'\nimport { slugify } from '../utils/slugify.ts'\n\r\nconst IDENTIFIER_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*$/\r\nconst RESERVED_IDENTIFIERS = new Set([\r\n 'break',\r\n 'case',\r\n 'catch',\r\n 'class',\r\n 'const',\r\n 'continue',\r\n 'debugger',\r\n 'default',\r\n 'delete',\r\n 'do',\r\n 'else',\r\n 'enum',\r\n 'export',\r\n 'extends',\r\n 'false',\r\n 'finally',\r\n 'for',\r\n 'function',\r\n 'if',\r\n 'import',\r\n 'in',\r\n 'instanceof',\r\n 'new',\r\n 'null',\r\n 'return',\r\n 'super',\r\n 'switch',\r\n 'this',\r\n 'throw',\r\n 'true',\r\n 'try',\r\n 'typeof',\r\n 'var',\r\n 'void',\r\n 'while',\r\n 'with',\r\n 'as',\r\n 'implements',\r\n 'interface',\r\n 'let',\r\n 'package',\r\n 'private',\r\n 'protected',\r\n 'public',\r\n 'static',\r\n 'yield',\r\n 'any',\r\n 'boolean',\r\n 'constructor',\r\n 'declare',\r\n 'get',\r\n 'module',\r\n 'require',\r\n 'number',\r\n 'set',\r\n 'string',\r\n 'symbol',\r\n 'type',\r\n 'from',\r\n 'of',\r\n])\r\n\r\nfunction splitWords(input: string): string[] {\r\n return input\r\n .trim()\r\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\r\n .replace(/([A-Z]+)([A-Z][a-z0-9]+)/g, '$1 $2')\r\n .replace(/[^A-Za-z0-9]+/g, ' ')\r\n .split(' ')\r\n .map(word => word.trim())\r\n .filter(word => word.length > 0)\r\n}\r\n\r\nfunction capitalize(word: string): string {\r\n return word.length > 0 ? `${word[0].toUpperCase()}${word.slice(1).toLowerCase()}` : word\r\n}\r\n\r\nfunction ensureValidIdentifier(candidate: string, fallback: string): string {\r\n const normalized = candidate.length > 0 ? candidate : fallback\r\n const prefixed = /^[0-9]/.test(normalized) ? `_${normalized}` : normalized\r\n if (RESERVED_IDENTIFIERS.has(prefixed)) {\r\n return `${prefixed}_value`\r\n }\r\n return prefixed\r\n}\r\n\r\nexport function applyNamingStyle(input: string, style: NamingStyle): string {\r\n const words = splitWords(input)\r\n if (words.length === 0) {\r\n return ''\r\n }\r\n\r\n switch (style) {\r\n case 'preserve':\r\n return input\r\n case 'camel': {\r\n const [first, ...rest] = words\r\n return `${first.toLowerCase()}${rest.map(capitalize).join('')}`\r\n }\r\n case 'pascal':\r\n return words.map(capitalize).join('')\r\n case 'snake':\n return words.map(word => word.toLowerCase()).join('_')\n case 'kebab':\n return slugify(words.join('-'))\n default:\n return input\n }\n}\n\r\nexport function toSafeIdentifier(input: string, style: NamingStyle, fallback = 'value'): string {\r\n const transformed = applyNamingStyle(input, style)\r\n const normalized = transformed\r\n .replace(/[^A-Za-z0-9_$]+/g, '_')\r\n .replace(/^_+|_+$/g, '')\r\n const fallbackValue = splitWords(input).join('')\r\n return ensureValidIdentifier(\r\n normalized.length > 0 ? normalized : fallbackValue,\r\n fallback,\r\n )\r\n}\r\n\r\nexport function escapeTypePropertyName(propertyName: string): string {\r\n if (IDENTIFIER_PATTERN.test(propertyName) && !RESERVED_IDENTIFIERS.has(propertyName)) {\r\n return propertyName\r\n }\r\n return `'${propertyName.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`\r\n}\r\n\r\nexport function escapeStringLiteral(value: string): string {\r\n return `'${value.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`\r\n}\r\n","import { applyNamingStyle } from './naming.ts'\r\nimport type { GeneratorArtifactKind, GeneratorOutputConfig } from './types.ts'\r\n\r\nexport interface PlaceholderContext {\r\n provider: string\r\n kind: GeneratorArtifactKind\r\n database: string\r\n schema: string\r\n model: string\r\n}\r\n\r\nfunction createStyleTokens(prefix: string, value: string): Record<string, string> {\r\n return {\r\n [prefix]: value,\r\n [`${prefix}_camel`]: applyNamingStyle(value, 'camel'),\r\n [`${prefix}_pascal`]: applyNamingStyle(value, 'pascal'),\r\n [`${prefix}_snake`]: applyNamingStyle(value, 'snake'),\r\n [`${prefix}_kebab`]: applyNamingStyle(value, 'kebab'),\r\n }\r\n}\r\n\r\nfunction renderTemplate(template: string, tokenMap: Record<string, string>): string {\r\n return template.replace(/\\{([A-Za-z0-9_]+)\\}/g, (_match, token) => {\r\n if (!(token in tokenMap)) {\r\n throw new Error(`Unknown placeholder token \"${token}\" in template \"${template}\"`)\r\n }\r\n return tokenMap[token]\r\n })\r\n}\r\n\r\nfunction resolvePlaceholderMap(\n baseTokens: Record<string, string>,\n outputConfig: GeneratorOutputConfig,\n): Record<string, string> {\n const resolved: Record<string, string> = {\n ...baseTokens,\n }\n const reservedTokenKeys = new Set(Object.keys(baseTokens))\n\n const entries = Object.entries(outputConfig.placeholderMap ?? {})\n for (let index = 0; index < entries.length; index += 1) {\n const [key, value] = entries[index]\n if (reservedTokenKeys.has(key)) {\n continue\n }\n\n let current = value\n for (let depth = 0; depth < 8; depth += 1) {\n const next = renderTemplate(current, resolved)\n if (next === current) {\r\n break\r\n }\r\n current = next\r\n }\r\n resolved[key] = current\r\n }\r\n\r\n return resolved\r\n}\r\n\r\nexport function renderOutputPath(\r\n template: string,\r\n context: PlaceholderContext,\r\n outputConfig: GeneratorOutputConfig,\r\n): string {\r\n const baseTokens: Record<string, string> = {\r\n provider: context.provider,\r\n kind: context.kind,\r\n ...createStyleTokens('database', context.database),\r\n ...createStyleTokens('schema', context.schema),\r\n ...createStyleTokens('model', context.model),\r\n }\r\n\r\n const tokens = resolvePlaceholderMap(baseTokens, outputConfig)\r\n return renderTemplate(template, tokens)\r\n}\r\n","import type { IntrospectionColumn } from '../schema/types.ts'\r\n\r\nconst NUMBER_TYPES = new Set([\r\n 'int2',\r\n 'int4',\r\n 'float4',\r\n 'float8',\r\n 'smallint',\r\n 'integer',\r\n 'real',\r\n 'double precision',\r\n])\r\n\r\nconst STRING_NUMERIC_TYPES = new Set([\r\n 'int8',\r\n 'bigint',\r\n 'serial8',\r\n 'bigserial',\r\n 'numeric',\r\n 'decimal',\r\n 'money',\r\n])\r\n\r\nconst TEXT_TYPES = new Set([\r\n 'char',\r\n 'bpchar',\r\n 'varchar',\r\n 'character varying',\r\n 'text',\r\n 'citext',\r\n 'name',\r\n 'uuid',\r\n 'date',\r\n 'time',\r\n 'timetz',\r\n 'timestamp',\r\n 'timestamptz',\r\n 'interval',\r\n 'inet',\r\n 'cidr',\r\n 'macaddr',\r\n 'macaddr8',\r\n 'point',\r\n 'line',\r\n 'lseg',\r\n 'box',\r\n 'path',\r\n 'polygon',\r\n 'circle',\r\n 'bit',\r\n 'varbit',\r\n 'xml',\r\n 'tsvector',\r\n 'tsquery',\r\n 'jsonpath',\r\n])\r\n\r\nfunction normalizeTypeLabel(column: IntrospectionColumn): string {\r\n const preferred = (column.udtName || column.dataType).toLowerCase().trim()\r\n if (column.arrayDimensions > 0 && preferred.startsWith('_')) {\r\n return preferred.slice(1)\r\n }\r\n return preferred\r\n}\r\n\r\nfunction wrapArrayType(baseType: string, depth: number): string {\r\n let wrapped = baseType\r\n for (let index = 0; index < depth; index += 1) {\r\n wrapped = `Array<${wrapped}>`\r\n }\r\n return wrapped\r\n}\r\n\r\nfunction resolveScalarType(column: IntrospectionColumn): string {\r\n const label = normalizeTypeLabel(column)\r\n\r\n if (NUMBER_TYPES.has(label)) {\r\n return 'number'\r\n }\r\n\r\n if (STRING_NUMERIC_TYPES.has(label)) {\r\n return 'string'\r\n }\r\n\r\n if (label === 'bool' || label === 'boolean') {\r\n return 'boolean'\r\n }\r\n\r\n if (label === 'bytea') {\r\n return 'Buffer'\r\n }\r\n\r\n if (label === 'json' || label === 'jsonb') {\r\n return 'Record<string, unknown>'\r\n }\r\n\r\n if (TEXT_TYPES.has(label)) {\r\n return 'string'\r\n }\r\n\r\n if (label.endsWith('range') || label.endsWith('multirange')) {\r\n return 'string'\r\n }\r\n\r\n return 'unknown'\r\n}\r\n\r\nfunction resolveKindAwareType(column: IntrospectionColumn): string {\r\n if (column.typeKind === 'enum') {\r\n const values = column.enumValues ?? []\r\n if (values.length === 0) {\r\n return 'string'\r\n }\r\n return values.map(value => `'${value.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\")}'`).join(' | ')\r\n }\r\n\r\n if (column.typeKind === 'composite') {\r\n return 'Record<string, unknown>'\r\n }\r\n\r\n if (column.typeKind === 'domain' || column.typeKind === 'range' || column.typeKind === 'multirange') {\r\n return 'string'\r\n }\r\n\r\n return resolveScalarType(column)\r\n}\r\n\r\nexport function resolvePostgresColumnType(column: IntrospectionColumn): string {\r\n const baseType = resolveKindAwareType(column)\r\n if (!column.arrayDimensions || column.arrayDimensions <= 0) {\r\n return baseType\r\n }\r\n return wrapArrayType(baseType, column.arrayDimensions)\r\n}\r\n","import { posix } from 'path'\r\nimport type {\r\n AthenaGeneratorConfig,\r\n GeneratedArtifact,\r\n GeneratedArtifacts,\r\n NormalizedAthenaGeneratorConfig,\r\n} from './types.ts'\r\nimport type {\r\n IntrospectionRelation,\r\n IntrospectionSnapshot,\r\n IntrospectionTable,\r\n} from '../schema/types.ts'\r\nimport {\n applyNamingStyle,\n escapeStringLiteral,\n escapeTypePropertyName,\n toSafeIdentifier,\n} from './naming.ts'\nimport { renderOutputPath } from './placeholders.ts'\r\nimport { resolvePostgresColumnType } from './postgres-type-mapping.ts'\r\nimport { normalizeGeneratorConfig } from './config.ts'\r\n\r\ntype ModelRenderDescriptor = {\r\n schemaName: string\r\n tableName: string\r\n filePath: string\r\n rowTypeName: string\r\n insertTypeName: string\r\n updateTypeName: string\r\n modelConstName: string\r\n table: IntrospectionTable\r\n}\r\n\r\ntype SchemaRenderDescriptor = {\r\n schemaName: string\r\n filePath: string\r\n schemaConstName: string\r\n models: ModelRenderDescriptor[]\r\n}\r\n\r\ntype DatabaseRenderDescriptor = {\r\n filePath: string\r\n databaseConstName: string\r\n schemas: SchemaRenderDescriptor[]\r\n}\r\n\r\nfunction normalizePath(pathValue: string): string {\r\n return pathValue.replace(/\\\\/g, '/')\r\n}\r\n\r\nfunction withoutTypeScriptExtension(pathValue: string): string {\r\n return pathValue.replace(/\\.tsx?$/i, '')\r\n}\r\n\r\nfunction toModuleImportPath(fromFile: string, targetFile: string): string {\r\n const relativePath = withoutTypeScriptExtension(\r\n normalizePath(posix.relative(posix.dirname(fromFile), targetFile)),\r\n )\r\n return relativePath.startsWith('.') ? relativePath : `./${relativePath}`\r\n}\r\n\r\nfunction renderObjectKey(key: string): string {\r\n const escaped = escapeTypePropertyName(key)\r\n return escaped.startsWith(\"'\") ? escaped : escaped\r\n}\r\n\r\nfunction renderRelation(relation: IntrospectionRelation): string {\r\n const through = relation.through\r\n ? `,\r\n through: {\r\n schema: ${escapeStringLiteral(relation.through.schema)},\r\n model: ${escapeStringLiteral(relation.through.model)},\r\n sourceColumns: [${relation.through.sourceColumns.map(value => escapeStringLiteral(value)).join(', ')}],\r\n targetColumns: [${relation.through.targetColumns.map(value => escapeStringLiteral(value)).join(', ')}],\r\n }`\r\n : ''\r\n\r\n return `{\r\n kind: ${escapeStringLiteral(relation.kind)},\r\n sourceColumns: [${relation.sourceColumns.map(value => escapeStringLiteral(value)).join(', ')}],\r\n targetSchema: ${escapeStringLiteral(relation.targetSchema)},\r\n targetModel: ${escapeStringLiteral(relation.targetModel)},\r\n targetColumns: [${relation.targetColumns.map(value => escapeStringLiteral(value)).join(', ')}]${through}\r\n }`\r\n}\r\n\r\nfunction renderModelArtifact(\r\n snapshot: IntrospectionSnapshot,\r\n descriptor: ModelRenderDescriptor,\r\n config: NormalizedAthenaGeneratorConfig,\r\n): GeneratedArtifact {\r\n const columnLines = Object.values(descriptor.table.columns)\r\n .map(column => {\r\n const propertyName = escapeTypePropertyName(column.name)\r\n const baseType = resolvePostgresColumnType(column)\r\n const isOptional = column.isNullable\r\n const typeWithNullability = column.isNullable ? `${baseType} | null` : baseType\r\n return ` ${propertyName}${isOptional ? '?' : ''}: ${typeWithNullability}`\r\n })\r\n .join('\\n')\r\n\r\n const nullableLines = Object.values(descriptor.table.columns)\r\n .map(column => ` ${renderObjectKey(column.name)}: ${column.isNullable ? 'true' : 'false'}`)\r\n .join(',\\n')\r\n\r\n const relationEntries = Object.entries(descriptor.table.relations)\r\n const relationBlock = config.features.emitRelations && relationEntries.length > 0\r\n ? `,\r\n relations: {\r\n${relationEntries\r\n .map(([relationKey, relationValue]) => ` ${renderObjectKey(relationKey)}: ${renderRelation(relationValue)}`)\r\n .join(',\\n')}\r\n }`\r\n : ''\r\n\r\n const content = `import { defineModel } from '@xylex-group/athena'\r\n\r\nexport interface ${descriptor.rowTypeName} {\r\n${columnLines}\r\n}\r\n\r\nexport type ${descriptor.insertTypeName} = Partial<${descriptor.rowTypeName}>\r\nexport type ${descriptor.updateTypeName} = Partial<${descriptor.insertTypeName}>\r\n\r\nexport const ${descriptor.modelConstName} = defineModel<${descriptor.rowTypeName}, ${descriptor.insertTypeName}, ${descriptor.updateTypeName}>({\r\n meta: {\r\n database: ${escapeStringLiteral(snapshot.database)},\r\n schema: ${escapeStringLiteral(descriptor.schemaName)},\r\n model: ${escapeStringLiteral(descriptor.tableName)},\r\n tableName: ${escapeStringLiteral(`${descriptor.schemaName}.${descriptor.tableName}`)},\r\n primaryKey: [${descriptor.table.primaryKey.map(value => escapeStringLiteral(value)).join(', ')}],\r\n nullable: {\r\n${nullableLines}\r\n }${relationBlock}\r\n }\r\n})\r\n`\r\n\r\n return {\r\n kind: 'model',\r\n path: descriptor.filePath,\r\n content,\r\n }\r\n}\r\n\r\nfunction renderSchemaArtifact(descriptor: SchemaRenderDescriptor): GeneratedArtifact {\r\n const importLines = descriptor.models\r\n .map(modelDescriptor => {\r\n const importPath = toModuleImportPath(descriptor.filePath, modelDescriptor.filePath)\r\n return `import { ${modelDescriptor.modelConstName} } from '${importPath}'`\r\n })\r\n .join('\\n')\r\n\r\n const modelEntries = descriptor.models\r\n .map(modelDescriptor => ` ${renderObjectKey(modelDescriptor.tableName)}: ${modelDescriptor.modelConstName}`)\r\n .join(',\\n')\r\n\r\n const content = `import { defineSchema } from '@xylex-group/athena'\r\n${importLines ? `\\n${importLines}\\n` : '\\n'}\r\nexport const ${descriptor.schemaConstName} = defineSchema({\r\n${modelEntries}\r\n})\r\n`\r\n\r\n return {\r\n kind: 'schema',\r\n path: descriptor.filePath,\r\n content,\r\n }\r\n}\r\n\r\nfunction renderDatabaseArtifact(descriptor: DatabaseRenderDescriptor): GeneratedArtifact {\r\n const importLines = descriptor.schemas\r\n .map(schemaDescriptor => {\r\n const importPath = toModuleImportPath(descriptor.filePath, schemaDescriptor.filePath)\r\n return `import { ${schemaDescriptor.schemaConstName} } from '${importPath}'`\r\n })\r\n .join('\\n')\r\n\r\n const schemaEntries = descriptor.schemas\r\n .map(schemaDescriptor => ` ${renderObjectKey(schemaDescriptor.schemaName)}: ${schemaDescriptor.schemaConstName}`)\r\n .join(',\\n')\r\n\r\n const content = `import { defineDatabase } from '@xylex-group/athena'\r\n${importLines ? `\\n${importLines}\\n` : '\\n'}\r\nexport const ${descriptor.databaseConstName} = defineDatabase({\r\n${schemaEntries}\r\n})\r\n`\r\n\r\n return {\r\n kind: 'database',\r\n path: descriptor.filePath,\r\n content,\r\n }\r\n}\r\n\r\nfunction renderRegistryArtifact(\r\n registryPath: string,\r\n databasePath: string,\r\n databaseConstName: string,\r\n registryConstName: string,\r\n databaseName: string,\r\n): GeneratedArtifact {\r\n const databaseImportPath = toModuleImportPath(registryPath, databasePath)\r\n const content = `import { defineRegistry } from '@xylex-group/athena'\r\nimport { ${databaseConstName} } from '${databaseImportPath}'\r\n\r\nexport const ${registryConstName} = defineRegistry({\r\n ${renderObjectKey(databaseName)}: ${databaseConstName}\r\n})\r\n`\r\n\r\n return {\r\n kind: 'registry',\r\n path: registryPath,\r\n content,\r\n }\r\n}\r\n\r\nfunction assertNoDuplicatePaths(files: GeneratedArtifact[]) {\n const seen = new Map<string, GeneratedArtifact>()\r\n for (const file of files) {\r\n const existing = seen.get(file.path)\r\n if (existing) {\r\n throw new Error(\n [\n `Generator output collision detected for path: ${file.path}`,\n `Collision: ${existing.kind} and ${file.kind}.`,\n 'Use explicit placeholders such as {model}, {model_kebab}, {schema}, or {schema_kebab} in output targets so each artifact resolves to a unique path.',\n ].join(' '),\n )\n }\n seen.set(file.path, file)\r\n }\r\n}\n\ntype SchemaScopedPathDescriptor = {\n schemaName: string\n filePath: string\n}\n\nfunction addSchemaSegmentToPath(pathValue: string, schemaName: string): string {\n const normalizedPath = normalizePath(pathValue)\n const parsedPath = posix.parse(normalizedPath)\n const schemaSegment = applyNamingStyle(schemaName, 'kebab')\n if (!schemaSegment) {\n return normalizedPath\n }\n\n const dir = parsedPath.dir.length > 0 ? `${parsedPath.dir}/${schemaSegment}` : schemaSegment\n return normalizePath(posix.join(dir, parsedPath.base))\n}\n\nfunction scopeDuplicateDescriptorPathsBySchema<\n TDescriptor extends SchemaScopedPathDescriptor,\n>(\n descriptors: TDescriptor[],\n): TDescriptor[] {\n const nextDescriptors = descriptors.map(descriptor => ({ ...descriptor }))\n const duplicates = new Map<string, number[]>()\n\n for (let index = 0; index < nextDescriptors.length; index += 1) {\n const descriptor = nextDescriptors[index]\n const indexes = duplicates.get(descriptor.filePath) ?? []\n indexes.push(index)\n duplicates.set(descriptor.filePath, indexes)\n }\n\n let appliedSchemaScoping = false\n for (const indexes of duplicates.values()) {\n if (indexes.length <= 1) {\n continue\n }\n\n const schemaNames = new Set(indexes.map(index => nextDescriptors[index].schemaName))\n if (schemaNames.size <= 1) {\n continue\n }\n\n for (const index of indexes) {\n const descriptor = nextDescriptors[index]\n descriptor.filePath = addSchemaSegmentToPath(descriptor.filePath, descriptor.schemaName)\n }\n appliedSchemaScoping = true\n }\n\n if (!appliedSchemaScoping) {\n return nextDescriptors\n }\n\n const normalizedPaths = new Set<string>()\n for (const descriptor of nextDescriptors) {\n if (normalizedPaths.has(descriptor.filePath)) {\n throw new Error(\n [\n `Generator output collision detected for path: ${descriptor.filePath}`,\n 'Automatic schema path scoping was applied but collisions remain.',\n 'Add explicit placeholders such as {model}, {model_kebab}, {schema}, or {schema_kebab} to your output targets.',\n ].join(' '),\n )\n }\n normalizedPaths.add(descriptor.filePath)\n }\n\n return nextDescriptors\n}\n\nclass ArtifactComposer {\n constructor(\r\n private readonly snapshot: IntrospectionSnapshot,\r\n private readonly config: NormalizedAthenaGeneratorConfig,\r\n ) {}\r\n\r\n compose(): GeneratedArtifacts {\r\n const providerName = this.snapshot.backend\r\n const databaseName = this.snapshot.database\r\n const modelDescriptors: ModelRenderDescriptor[] = []\r\n\r\n for (const schemaName of Object.keys(this.snapshot.schemas).sort()) {\r\n const schema = this.snapshot.schemas[schemaName]\r\n for (const tableName of Object.keys(schema.tables).sort()) {\r\n const table = schema.tables[tableName]\r\n const rowTypeName = `${toSafeIdentifier(`${schemaName} ${tableName}`, this.config.naming.modelType, 'Model')}Row`\r\n const insertTypeName = `${toSafeIdentifier(`${schemaName} ${tableName}`, this.config.naming.modelType, 'Model')}Insert`\r\n const updateTypeName = `${toSafeIdentifier(`${schemaName} ${tableName}`, this.config.naming.modelType, 'Model')}Update`\r\n const modelConstName = `${toSafeIdentifier(`${schemaName} ${tableName} model`, this.config.naming.modelConst, 'model')}`\r\n\r\n const modelPath = normalizePath(\r\n renderOutputPath(this.config.output.targets.model, {\r\n provider: providerName,\r\n kind: 'model',\r\n database: databaseName,\r\n schema: schemaName,\r\n model: tableName,\r\n }, this.config.output),\r\n )\r\n\r\n modelDescriptors.push({\r\n schemaName,\r\n tableName,\r\n filePath: modelPath,\r\n rowTypeName,\r\n insertTypeName,\r\n updateTypeName,\r\n modelConstName,\r\n table,\r\n })\r\n }\r\n }\r\n\r\n const scopedModelDescriptors = scopeDuplicateDescriptorPathsBySchema(modelDescriptors)\n\n let schemaDescriptors: SchemaRenderDescriptor[] = Object.keys(this.snapshot.schemas)\n .sort()\n .map(schemaName => {\n const schemaPath = normalizePath(\n renderOutputPath(this.config.output.targets.schema, {\r\n provider: providerName,\r\n kind: 'schema',\r\n database: databaseName,\r\n schema: schemaName,\r\n model: 'index',\r\n }, this.config.output),\r\n )\r\n\r\n return {\r\n schemaName,\r\n filePath: schemaPath,\r\n schemaConstName: toSafeIdentifier(\n `${schemaName} schema`,\n this.config.naming.schemaConst,\n 'schema',\n ),\n models: scopedModelDescriptors.filter(model => model.schemaName === schemaName),\n }\n })\n\n schemaDescriptors = scopeDuplicateDescriptorPathsBySchema(schemaDescriptors)\n\n const databasePath = normalizePath(\n renderOutputPath(this.config.output.targets.database, {\r\n provider: providerName,\r\n kind: 'database',\r\n database: databaseName,\r\n schema: 'index',\r\n model: 'index',\r\n }, this.config.output),\r\n )\r\n\r\n const databaseDescriptor: DatabaseRenderDescriptor = {\r\n filePath: databasePath,\r\n databaseConstName: toSafeIdentifier(\r\n `${databaseName} database`,\r\n this.config.naming.databaseConst,\r\n 'database',\r\n ),\r\n schemas: schemaDescriptors,\r\n }\r\n\r\n const files: GeneratedArtifact[] = []\r\n\r\n for (const modelDescriptor of scopedModelDescriptors) {\n files.push(renderModelArtifact(this.snapshot, modelDescriptor, this.config))\n }\n\r\n for (const schemaDescriptor of schemaDescriptors) {\r\n files.push(renderSchemaArtifact(schemaDescriptor))\r\n }\r\n\r\n files.push(renderDatabaseArtifact(databaseDescriptor))\r\n\r\n if (this.config.features.emitRegistry) {\r\n const registryPath = normalizePath(\r\n renderOutputPath(this.config.output.targets.registry, {\r\n provider: providerName,\r\n kind: 'registry',\r\n database: databaseName,\r\n schema: 'index',\r\n model: 'index',\r\n }, this.config.output),\r\n )\r\n files.push(\r\n renderRegistryArtifact(\r\n registryPath,\r\n databaseDescriptor.filePath,\r\n databaseDescriptor.databaseConstName,\r\n toSafeIdentifier('registry', this.config.naming.registryConst, 'registry'),\r\n databaseName,\r\n ),\r\n )\r\n }\r\n\r\n assertNoDuplicatePaths(files)\r\n\r\n return {\r\n snapshot: this.snapshot,\r\n files,\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Generates model/schema/database/registry source artifacts from an introspection snapshot.\r\n */\r\nexport function generateArtifactsFromSnapshot(\r\n snapshot: IntrospectionSnapshot,\r\n config: AthenaGeneratorConfig | NormalizedAthenaGeneratorConfig,\r\n): GeneratedArtifacts {\r\n const normalizedConfig = 'naming' in config && 'features' in config && 'experimental' in config\r\n ? config as NormalizedAthenaGeneratorConfig\r\n : normalizeGeneratorConfig(config as AthenaGeneratorConfig)\r\n return new ArtifactComposer(snapshot, normalizedConfig).compose()\r\n}\r\n","import { createClient, type AthenaSdkClient } from '../client.ts'\r\nimport {\r\n buildGatewayCatalogQueries,\r\n PostgresCatalogSnapshotAssembler,\r\n type ColumnQueryRow,\r\n type EnumQueryRow,\r\n type ForeignKeyQueryRow,\r\n type PrimaryKeyQueryRow,\r\n} from '../schema/postgres-introspection-core.ts'\r\nimport { createPostgresIntrospectionProvider } from '../schema/postgres-provider.ts'\r\nimport type {\r\n IntrospectionInspectOptions,\r\n IntrospectionSnapshot,\r\n SchemaIntrospectionProvider,\r\n} from '../schema/types.ts'\r\nimport type {\r\n GeneratorExperimentalFlags,\r\n GeneratorProviderConfig,\r\n PostgresDirectProviderConfig,\r\n PostgresGatewayProviderConfig,\r\n ScyllaDirectProviderConfig,\r\n} from './types.ts'\r\nimport { normalizeSchemaSelection } from './schema-selection.ts'\r\n\r\nclass AthenaGatewayCatalogClient {\r\n constructor(private readonly client: AthenaSdkClient) {}\r\n\r\n async queryRows<T extends Record<string, unknown>>(query: string): Promise<T[]> {\r\n const result = await this.client.query<T>(query)\r\n if (result.error || result.status < 200 || result.status >= 300) {\r\n throw new Error(result.error?.message ?? `Gateway query failed with status ${result.status}`)\n }\r\n return result.data ?? []\r\n }\r\n\r\n async queryColumns(query: string): Promise<ColumnQueryRow[]> {\r\n return this.queryRows<ColumnQueryRow>(query)\r\n }\r\n\r\n async queryEnums(query: string): Promise<Map<number, string[]>> {\r\n const rows = await this.queryRows<EnumQueryRow>(query)\r\n const enumMap = new Map<number, string[]>()\r\n for (const row of rows) {\r\n const existing = enumMap.get(row.type_oid) ?? []\r\n existing.push(row.enum_label)\r\n enumMap.set(row.type_oid, existing)\r\n }\r\n return enumMap\r\n }\r\n\r\n async queryPrimaryKeys(query: string): Promise<PrimaryKeyQueryRow[]> {\r\n return this.queryRows<PrimaryKeyQueryRow>(query)\r\n }\r\n\r\n async queryForeignKeys(query: string): Promise<ForeignKeyQueryRow[]> {\r\n return this.queryRows<ForeignKeyQueryRow>(query)\r\n }\r\n}\r\n\r\nclass AthenaGatewayPostgresIntrospectionProvider implements SchemaIntrospectionProvider {\r\n readonly backend = 'postgresql' as const\r\n\r\n private readonly client: AthenaSdkClient\r\n private readonly schemas: string[]\r\n\r\n constructor(private readonly config: PostgresGatewayProviderConfig) {\r\n this.client = createClient(this.config.gatewayUrl, this.config.apiKey, {\r\n backend: {\r\n type: this.config.backend ?? 'postgresql',\r\n },\r\n })\r\n this.schemas = normalizeSchemaSelection(this.config.schemas)\r\n }\r\n\r\n async inspect(options?: IntrospectionInspectOptions): Promise<IntrospectionSnapshot> {\r\n const schemas =\r\n options?.schemas && options.schemas.length > 0\r\n ? normalizeSchemaSelection(options.schemas)\r\n : this.schemas\r\n\r\n const catalogClient = new AthenaGatewayCatalogClient(this.client)\r\n const queries = buildGatewayCatalogQueries(schemas)\r\n\r\n const [columnRows, enumMap, primaryKeyRows, foreignKeyRows] = await Promise.all([\r\n catalogClient.queryColumns(queries.columns),\r\n catalogClient.queryEnums(queries.enums),\r\n catalogClient.queryPrimaryKeys(queries.primaryKeys),\r\n catalogClient.queryForeignKeys(queries.foreignKeys),\r\n ])\r\n\r\n const assembler = new PostgresCatalogSnapshotAssembler()\r\n assembler.addColumnRows(columnRows, enumMap)\r\n assembler.addPrimaryKeyRows(primaryKeyRows)\r\n assembler.addForeignKeyRows(foreignKeyRows)\r\n assembler.addManyToManyRows(foreignKeyRows)\r\n\r\n return {\r\n backend: 'postgresql',\r\n database: this.config.database,\r\n generatedAt: new Date().toISOString(),\r\n schemas: assembler.toSchemas(),\r\n }\r\n }\r\n}\r\n\r\nclass ScyllaIntrospectionProvider implements SchemaIntrospectionProvider {\r\n readonly backend = 'scylladb' as const\r\n\r\n constructor(private readonly config: ScyllaDirectProviderConfig) {}\r\n\r\n async inspect(): Promise<IntrospectionSnapshot> {\r\n throw new Error(\r\n `Scylla introspection provider is not implemented yet for keyspace ${this.config.keyspace}.`,\r\n )\r\n }\r\n}\r\n\r\nfunction createPostgresProvider(config: PostgresDirectProviderConfig): SchemaIntrospectionProvider {\r\n return createPostgresIntrospectionProvider({\r\n connectionString: config.connectionString,\r\n database: config.database,\r\n schemas: normalizeSchemaSelection(config.schemas),\r\n })\r\n}\r\n\r\n/**\r\n * Resolves a runtime introspection provider from generator config.\r\n */\r\nexport function resolveGeneratorProvider(\r\n providerConfig: GeneratorProviderConfig,\r\n experimentalFlags: GeneratorExperimentalFlags,\r\n): SchemaIntrospectionProvider {\r\n if (providerConfig.kind === 'postgres' && providerConfig.mode === 'direct') {\r\n return createPostgresProvider(providerConfig)\r\n }\r\n\r\n if (providerConfig.kind === 'postgres' && providerConfig.mode === 'gateway') {\r\n return new AthenaGatewayPostgresIntrospectionProvider(providerConfig)\r\n }\r\n\r\n if (providerConfig.kind === 'scylla') {\r\n if (!experimentalFlags.scyllaProviderContracts) {\r\n throw new Error(\r\n 'Scylla provider contracts are disabled. Set experimental.scyllaProviderContracts=true to enable placeholders.',\r\n )\r\n }\r\n return new ScyllaIntrospectionProvider(providerConfig)\r\n }\r\n\r\n throw new Error(`Unsupported generator provider kind: ${(providerConfig as { kind?: string }).kind ?? 'unknown'}`)\r\n}\r\n","import { mkdir, stat, writeFile } from 'fs/promises'\nimport { dirname, resolve } from 'path'\nimport { generateArtifactsFromSnapshot } from './renderer.ts'\nimport { loadGeneratorConfig } from './config.ts'\nimport { resolveGeneratorProvider } from './providers.ts'\nimport { resolveProviderSchemas } from './schema-selection.ts'\r\nimport type {\r\n GeneratedArtifact,\r\n LoadGeneratorConfigOptions,\r\n RunGeneratorOptions,\r\n RunGeneratorResult,\n} from './types.ts'\n\nfunction canOverwriteArtifact(file: GeneratedArtifact): boolean {\n return file.kind === 'model' || file.kind === 'schema'\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n try {\n await stat(path)\n return true\n } catch {\n return false\n }\n}\n\nasync function writeArtifacts(\n files: GeneratedArtifact[],\n cwd: string,\n): Promise<string[]> {\n const writtenFiles: string[] = []\n\n for (const file of files) {\n const absolutePath = resolve(cwd, file.path)\n if (!canOverwriteArtifact(file) && await fileExists(absolutePath)) {\n continue\n }\n await mkdir(dirname(absolutePath), { recursive: true })\n await writeFile(absolutePath, file.content, 'utf8')\n writtenFiles.push(file.path)\n }\n\r\n return writtenFiles\r\n}\r\n\r\n/**\r\n * End-to-end generator execution: load config, introspect, render, and optionally write files.\r\n */\r\nexport async function runSchemaGenerator(options: RunGeneratorOptions = {}): Promise<RunGeneratorResult> {\r\n const cwd = options.cwd ?? process.cwd()\r\n const configOptions: LoadGeneratorConfigOptions = {\r\n cwd,\r\n configPath: options.configPath,\r\n }\r\n\r\n const { configPath, config } = await loadGeneratorConfig(configOptions)\r\n const provider = options.provider ?? resolveGeneratorProvider(config.provider, config.experimental)\r\n\r\n const snapshot = await provider.inspect({\r\n schemas: resolveProviderSchemas(config.provider),\r\n })\r\n\r\n const generated = generateArtifactsFromSnapshot(snapshot, config)\r\n const writtenFiles = options.dryRun ? [] : await writeArtifacts(generated.files, cwd)\r\n\r\n return {\r\n ...generated,\r\n configPath,\r\n writtenFiles,\r\n }\r\n}\r\n"]}