@xylex-group/athena 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +101 -8
- package/dist/{errors-CB-eJQ7x.d.cts → errors-C4GJaFI_.d.cts} +16 -1
- package/dist/{errors-CB-eJQ7x.d.ts → errors-C4GJaFI_.d.ts} +16 -1
- package/dist/index.cjs +173 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -3
- package/dist/index.d.ts +5 -3
- package/dist/index.js +173 -4
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +965 -0
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +234 -3
- package/dist/react.d.ts +234 -3
- package/dist/react.js +960 -2
- package/dist/react.js.map +1 -1
- package/package.json +11 -7
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/gateway/errors.ts","../src/gateway/client.ts","../src/client.ts","../src/gateway/types.ts","../src/auxiliaries.ts"],"names":["filterMethods","isRecord","message"],"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","import type {\r\n AthenaConditionArrayValue,\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 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\n\r\nexport interface AthenaResult<T> {\r\n data: T | null\r\n error: string | null\r\n errorDetails?: AthenaGatewayErrorDetails | null\r\n status: number\r\n count?: number | null\r\n raw: 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 MutationSingleResult<Result> = Result extends Array<infer Item> ? Item | null : Result | null\r\nconst DEFAULT_COLUMNS = '*'\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: 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 }\r\n return result\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 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> {\r\n eq(column: string, value: AthenaConditionValue): Self\r\n match(filters: Record<string, 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: string, options?: OrderOptions): 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 neq(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 contains(column: string, values: AthenaConditionArrayValue): Self\r\n containedBy(column: string, values: AthenaConditionArrayValue): Self\r\n not(\r\n columnOrExpression: 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> extends FilterChain<SelectChain<Row>>, PromiseLike<AthenaResult<Row[]>> {\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}\r\n\r\n/** Chain returned by update() - supports filters before execution, plus select/returning */\r\nexport interface UpdateChain<Row> extends FilterChain<UpdateChain<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<Row> extends FilterChain<TableQueryBuilder<Row>> {\r\n select<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions): SelectChain<T>\r\n insert(values: Row, options?: AthenaGatewayCallOptions): MutationQuery<Row>\r\n insert(values: Row[], options?: AthenaGatewayCallOptions): MutationQuery<Row[]>\r\n upsert(\r\n values: Row,\r\n options?: AthenaGatewayCallOptions & {\r\n updateBody?: Partial<Row>\r\n onConflict?: string | string[]\r\n },\r\n ): MutationQuery<Row>\r\n upsert(\r\n values: Row[],\r\n options?: AthenaGatewayCallOptions & {\r\n updateBody?: Partial<Row>\r\n onConflict?: string | string[]\r\n },\r\n ): MutationQuery<Row[]>\r\n update(values: Partial<Row>, 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>\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 createFilterMethods<Self>(\r\n state: TableBuilderState,\r\n addCondition: (\r\n operator: AthenaConditionOperator,\r\n column?: string,\r\n value?: AthenaConditionValue | AthenaConditionArrayValue | string,\r\n ) => void,\r\n self: Self,\r\n) {\r\n return {\r\n eq(column: string, value: AthenaConditionValue) {\r\n addCondition('eq', column, value)\r\n return self\r\n },\r\n match(filters: Record<string, AthenaConditionValue>) {\r\n Object.entries(filters).forEach(([column, value]) => addCondition('eq', column, value))\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: string, options?: OrderOptions) {\r\n state.order = {\r\n field: column,\r\n direction: options?.ascending === false ? 'descending' : 'ascending',\r\n }\r\n return self\r\n },\r\n gt(column: string, value: AthenaConditionValue) {\r\n addCondition('gt', column, value)\r\n return self\r\n },\r\n gte(column: string, value: AthenaConditionValue) {\r\n addCondition('gte', column, value)\r\n return self\r\n },\r\n lt(column: string, value: AthenaConditionValue) {\r\n addCondition('lt', column, value)\r\n return self\r\n },\r\n lte(column: string, value: AthenaConditionValue) {\r\n addCondition('lte', column, value)\r\n return self\r\n },\r\n neq(column: string, value: AthenaConditionValue) {\r\n addCondition('neq', column, value)\r\n return self\r\n },\r\n like(column: string, value: AthenaConditionValue) {\r\n addCondition('like', column, value)\r\n return self\r\n },\r\n ilike(column: string, value: AthenaConditionValue) {\r\n addCondition('ilike', column, value)\r\n return self\r\n },\r\n is(column: string, value: AthenaConditionValue) {\r\n addCondition('is', column, value)\r\n return self\r\n },\r\n in(column: string, values: AthenaConditionArrayValue) {\r\n addCondition('in', column, values)\r\n return self\r\n },\r\n contains(column: string, values: AthenaConditionArrayValue) {\r\n addCondition('contains', column, values)\r\n return self\r\n },\r\n containedBy(column: string, values: AthenaConditionArrayValue) {\r\n addCondition('containedBy', column, values)\r\n return self\r\n },\r\n not(columnOrExpression: string, operator?: AthenaConditionOperator, value?: AthenaConditionValue) {\r\n if (operator != null && value !== undefined) {\r\n addCondition('not', undefined, `${columnOrExpression}.${operator}.${stringifyFilterValue(value)}`)\r\n } else {\r\n addCondition('not', undefined, columnOrExpression)\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: Record<string, unknown> | undefined,\r\n baseOptions: AthenaRpcCallOptions | undefined,\r\n client: ReturnType<typeof createAthenaGatewayClient>,\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\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 }\r\n const response = await client.rpcGateway<SelectedRow[]>(payload, mergedOptions)\r\n return formatResult(response)\r\n }\r\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<Row>(\r\n tableName: string,\r\n client: ReturnType<typeof createAthenaGatewayClient>,\r\n): TableQueryBuilder<Row> {\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 ) => {\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 state.conditions.push(condition)\r\n }\r\n\r\n const builder = {} as TableQueryBuilder<Row>\r\n\r\n const filterMethods = createFilterMethods(state, addCondition, builder)\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 payload = {\r\n table_name: tableName,\r\n columns,\r\n conditions: state.conditions.length ? [...state.conditions] : undefined,\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 }\r\n const response = await client.fetchGateway<T>(payload, options)\r\n return formatResult(response)\r\n }\r\n\r\n const createSelectChain = <SelectedRow>(\r\n columns: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n ): SelectChain<SelectedRow> => {\r\n const chain = {} as SelectChain<SelectedRow>\r\n const filterMethods = createFilterMethods(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: Row | Row[], 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 payload: AthenaInsertPayload = {\r\n table_name: tableName,\r\n insert_body: values as Record<string, unknown>[],\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 response = await client.insertGateway<Row[]>(payload, mergedOptions)\r\n return formatResult(response)\r\n }\r\n return createMutationQuery<Row[]>(executeInsertMany)\r\n }\r\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 payload: AthenaInsertPayload = {\r\n table_name: tableName,\r\n insert_body: values as Record<string, unknown>,\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 response = await client.insertGateway<Row>(payload, mergedOptions)\r\n return formatResult(response)\r\n }\r\n return createMutationQuery<Row>(executeInsertOne)\r\n },\r\n upsert(\r\n values: Row | Row[],\r\n options?: AthenaGatewayCallOptions & { updateBody?: Partial<Row>; 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 payload: AthenaInsertPayload = {\r\n table_name: tableName,\r\n insert_body: values as Record<string, unknown>[],\r\n update_body: options?.updateBody ? (options.updateBody as Record<string, unknown>) : 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 response = await client.insertGateway<Row[]>(payload, mergedOptions)\r\n return formatResult(response)\r\n }\r\n return createMutationQuery<Row[]>(executeUpsertMany)\r\n }\r\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 payload: AthenaInsertPayload = {\r\n table_name: tableName,\r\n insert_body: values as Record<string, unknown>,\r\n update_body: options?.updateBody ? (options.updateBody as Record<string, unknown>) : 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 response = await client.insertGateway<Row>(payload, mergedOptions)\r\n return formatResult(response)\r\n }\r\n return createMutationQuery<Row>(executeUpsertOne)\r\n },\r\n update(values: Partial<Row>, 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 payload: AthenaUpdatePayload = {\r\n table_name: tableName,\r\n set: 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 response = await client.updateGateway<Row[]>(payload, mergedOptions)\r\n return formatResult(response)\r\n }\r\n const mutation = createMutationQuery<Row[]>(executeUpdate, null)\r\n const updateChain = {} as UpdateChain<Row>\r\n const filterMethods = createFilterMethods(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 payload: AthenaDeletePayload = {\r\n table_name: tableName,\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 response = await client.deleteGateway<Row | null>(payload, mergedOptions)\r\n return formatResult(response)\r\n }\r\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(client: ReturnType<typeof createAthenaGatewayClient>) {\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 response = await client.queryGateway<Row[]>({ query: normalizedQuery }, options)\r\n return formatResult(response)\r\n }\r\n}\r\n\r\nexport interface AthenaSdkClient {\r\n from<Row = unknown>(table: string): TableQueryBuilder<Row>\r\n rpc<Row = unknown, Args extends Record<string, unknown> = Record<string, unknown>>(\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}\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}\r\n\r\nfunction createClientFromConfig(config: AthenaClientConfig): AthenaSdkClient {\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 return {\r\n from<Row = unknown>(table: string) {\r\n return createTableBuilder<Row>(table, gateway)\r\n },\r\n rpc<Row = unknown, Args extends Record<string, unknown> = Record<string, unknown>>(\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 Record<string, unknown> | undefined,\r\n options,\r\n gateway,\r\n )\r\n },\r\n query: createQueryBuilder(gateway) as AthenaSdkClient['query'],\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 /** Enable or disable health tracking metadata. */\r\n healthTracking(enabled: boolean): AthenaClientBuilder\r\n /** Build the immutable Athena SDK client. */\r\n build(): AthenaSdkClient\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\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 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(): AthenaSdkClient {\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 })\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(): AthenaSdkClient {\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\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?: Pick<AthenaGatewayCallOptions, 'client' | 'headers' | 'backend'>,\r\n): AthenaSdkClient {\r\n const b = AthenaClient.builder().url(url).key(apiKey).backend(toBackendConfig(options?.backend))\r\n if (options?.client) b.client(options.client)\r\n if (options?.headers && Object.keys(options.headers).length > 0) b.headers(options.headers)\r\n return b.build()\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 AthenaConditionValue = string | number | boolean | null\r\nexport type AthenaConditionArrayValue = Array<AthenaConditionValue>\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 /** Back-compat shape expected by older gateway implementations */\r\n eq_column?: string\r\n eq_value?: AthenaConditionValue | AthenaConditionArrayValue | string\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 table_name: string\r\n insert_body: Record<string, unknown> | Record<string, unknown>[]\r\n update_body?: Record<string, unknown>\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 extends AthenaFetchPayload {\r\n set?: Record<string, unknown>\r\n data?: Record<string, unknown>\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 {\r\n function: string\r\n function_name?: string\r\n schema?: string\r\n args?: Record<string, unknown>\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?: Record<string, unknown>\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 count?: AthenaCountOption\r\n head?: boolean\r\n defaultToNull?: boolean\r\n stripNulls?: boolean\r\n onConflict?: string | string[]\r\n updateBody?: Record<string, unknown>\r\n}\r\n\r\nexport interface AthenaRpcCallOptions extends AthenaGatewayCallOptions {\r\n schema?: string\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 { 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 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 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 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 {\r\n strictBigInt?: boolean\r\n min?: number\r\n max?: number\r\n}\r\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 {\r\n min?: number\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 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 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(\r\n resultOrError: unknown,\r\n context?: AthenaOperationContext,\r\n): NormalizedAthenaError {\r\n if (isAthenaResultLike(resultOrError)) {\r\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 return {\r\n kind,\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 return {\r\n kind,\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 return {\r\n kind: classifyKind(maybeStatus, undefined, resultOrError.message),\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 return {\r\n kind: classifyKind(undefined, undefined, message),\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}"]}
|
|
1
|
+
{"version":3,"sources":["../src/gateway/errors.ts","../src/gateway/client.ts","../src/client.ts","../src/gateway/types.ts","../src/auxiliaries.ts"],"names":["filterMethods","isRecord","message"],"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","import type {\n AthenaConditionArrayValue,\n AthenaConditionCastType,\n AthenaConditionOperator,\n AthenaConditionValue,\n AthenaDeletePayload,\r\n AthenaGatewayCallOptions,\r\n AthenaGatewayCondition,\r\n AthenaGatewayErrorDetails,\r\n AthenaGatewayResponse,\r\n AthenaInsertPayload,\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\n\r\nexport interface AthenaResult<T> {\r\n data: T | null\r\n error: string | null\r\n errorDetails?: AthenaGatewayErrorDetails | null\r\n status: number\r\n count?: number | null\r\n raw: unknown\r\n}\r\n\r\ntype TableBuilderState = {\n conditions: AthenaGatewayCondition[]\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}\n\ntype ConditionCastHints = {\n valueCast?: AthenaConditionCastType\n columnCast?: AthenaConditionCastType\n}\n\ntype MutationSingleResult<Result> = Result extends Array<infer Item> ? Item | null : Result | null\nconst DEFAULT_COLUMNS = '*'\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\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: 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 }\r\n return result\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 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> {\n eq(column: string, value: AthenaConditionValue): Self\n eqCast(column: string, value: AthenaConditionValue, cast: AthenaConditionCastType): Self\n eqUuid(column: string, value: string): Self\n match(filters: Record<string, AthenaConditionValue>): Self\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: string, options?: OrderOptions): 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 neq(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 contains(column: string, values: AthenaConditionArrayValue): Self\r\n containedBy(column: string, values: AthenaConditionArrayValue): Self\r\n not(\r\n columnOrExpression: 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> extends FilterChain<SelectChain<Row>>, PromiseLike<AthenaResult<Row[]>> {\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}\r\n\r\n/** Chain returned by update() - supports filters before execution, plus select/returning */\r\nexport interface UpdateChain<Row> extends FilterChain<UpdateChain<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<Row> extends FilterChain<TableQueryBuilder<Row>> {\r\n select<T = Row>(columns?: string | string[], options?: AthenaGatewayCallOptions): SelectChain<T>\r\n insert(values: Row, options?: AthenaGatewayCallOptions): MutationQuery<Row>\r\n insert(values: Row[], options?: AthenaGatewayCallOptions): MutationQuery<Row[]>\r\n upsert(\r\n values: Row,\r\n options?: AthenaGatewayCallOptions & {\r\n updateBody?: Partial<Row>\r\n onConflict?: string | string[]\r\n },\r\n ): MutationQuery<Row>\r\n upsert(\r\n values: Row[],\r\n options?: AthenaGatewayCallOptions & {\r\n updateBody?: Partial<Row>\r\n onConflict?: string | string[]\r\n },\r\n ): MutationQuery<Row[]>\r\n update(values: Partial<Row>, 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>\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 {\n if (Array.isArray(value)) {\n return value.join(',')\n }\n return String(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\nfunction shouldUseUuidTextComparison(column: string, value: AthenaConditionValue): boolean {\n return typeof value === 'string' && isUuidString(value) && isUuidIdentifierColumn(column)\n}\n\nfunction normalizeCast(cast: AthenaConditionCastType): string {\n const normalized = cast.trim().toLowerCase()\n if (!SAFE_CAST_PATTERN.test(normalized)) {\n throw new Error(`Invalid cast type \"${cast}\"`)\n }\n return normalized\n}\n\nfunction escapeSqlStringLiteral(value: string): string {\n return value.replace(/'/g, \"''\")\n}\n\nfunction quoteIdentifier(identifier: string): string {\n return `\"${identifier.replace(/\"/g, '\"\"')}\"`\n}\n\nfunction quoteQualifiedIdentifier(identifier: string): string {\n return identifier\n .split('.')\n .map(segment => quoteIdentifier(segment))\n .join('.')\n}\n\nfunction toSqlLiteral(value: AthenaConditionValue): string {\n if (value === null) return 'NULL'\n if (typeof value === 'number') return Number.isFinite(value) ? String(value) : 'NULL'\n if (typeof value === 'boolean') return value ? 'TRUE' : 'FALSE'\n return `'${escapeSqlStringLiteral(value)}'`\n}\n\nfunction withCast(expression: string, cast?: AthenaConditionCastType): string {\n if (!cast) return expression\n return `${expression}::${normalizeCast(cast)}`\n}\n\nfunction buildSelectColumnsClause(columns: string | string[]): string {\n if (Array.isArray(columns)) {\n return columns.map(column => quoteQualifiedIdentifier(column)).join(', ')\n }\n return columns\n}\n\nfunction conditionToSqlClause(condition: AthenaGatewayCondition): string | null {\n if (!condition.column) return null\n const column = withCast(quoteQualifiedIdentifier(condition.column), condition.column_cast)\n const value = condition.value\n const sqlOperator = {\n eq: '=',\n neq: '!=',\n gt: '>',\n gte: '>=',\n lt: '<',\n lte: '<=',\n like: 'LIKE',\n ilike: 'ILIKE',\n } as const\n\n switch (condition.operator) {\n case 'eq':\n case 'neq':\n case 'gt':\n case 'gte':\n case 'lt':\n case 'lte':\n case 'like':\n case 'ilike': {\n if (Array.isArray(value) || value === undefined) return null\n const rhs = withCast(toSqlLiteral(value), condition.value_cast)\n return `${column} ${sqlOperator[condition.operator]} ${rhs}`\n }\n case 'is': {\n if (value === null) return `${column} IS NULL`\n if (value === true) return `${column} IS TRUE`\n if (value === false) return `${column} IS FALSE`\n return null\n }\n case 'in': {\n if (!Array.isArray(value)) return null\n if (value.length === 0) return 'FALSE'\n const values = value.map(item => withCast(toSqlLiteral(item), condition.value_cast))\n return `${column} IN (${values.join(', ')})`\n }\n default:\n return null\n }\n}\n\nfunction buildTypedSelectQuery(input: {\n tableName: string\n columns: string | string[]\n conditions: AthenaGatewayCondition[]\n limit?: number\n offset?: number\n currentPage?: number\n pageSize?: number\n order?: AthenaSortBy\n}): string | null {\n const whereClauses: string[] = []\n for (const condition of input.conditions) {\n const clause = conditionToSqlClause(condition)\n if (!clause) return null\n whereClauses.push(clause)\n }\n\n let limit = input.limit\n let offset = input.offset\n if (limit === undefined && input.pageSize !== undefined) {\n limit = input.pageSize\n }\n if (\n offset === undefined &&\n input.pageSize !== undefined &&\n input.currentPage !== undefined &&\n input.currentPage > 0\n ) {\n offset = (input.currentPage - 1) * input.pageSize\n }\n\n const sqlParts = [\n `SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\n ]\n\n if (whereClauses.length > 0) {\n sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\n }\n\n if (input.order?.field) {\n const direction = input.order.direction === 'descending' ? 'DESC' : 'ASC'\n sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(input.order.field)} ${direction}`)\n }\n\n if (limit !== undefined) {\n sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`)\n }\n\n if (offset !== undefined) {\n sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`)\n }\n\n return `${sqlParts.join(' ')};`\n}\n\r\nfunction createFilterMethods<Self>(\n state: TableBuilderState,\n addCondition: (\n operator: AthenaConditionOperator,\n column?: string,\n value?: AthenaConditionValue | AthenaConditionArrayValue | string,\n hints?: ConditionCastHints,\n ) => void,\n self: Self,\n) {\n return {\n eq(column: string, value: AthenaConditionValue) {\n if (shouldUseUuidTextComparison(column, value)) {\n addCondition('eq', column, value, { columnCast: 'text' })\n } else {\n addCondition('eq', column, value)\n }\n return self\n },\n eqCast(column: string, value: AthenaConditionValue, cast: AthenaConditionCastType) {\n addCondition('eq', column, value, { valueCast: cast })\n return self\n },\n eqUuid(column: string, value: string) {\n addCondition('eq', column, value, { valueCast: 'uuid' })\n return self\n },\n match(filters: Record<string, AthenaConditionValue>) {\n Object.entries(filters).forEach(([column, value]) => {\n if (shouldUseUuidTextComparison(column, value)) {\n addCondition('eq', column, value, { columnCast: 'text' })\n } else {\n addCondition('eq', column, value)\n }\n })\n return self\n },\n range(from: number, to: number) {\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: string, options?: OrderOptions) {\r\n state.order = {\r\n field: column,\r\n direction: options?.ascending === false ? 'descending' : 'ascending',\r\n }\r\n return self\r\n },\r\n gt(column: string, value: AthenaConditionValue) {\r\n addCondition('gt', column, value)\r\n return self\r\n },\r\n gte(column: string, value: AthenaConditionValue) {\r\n addCondition('gte', column, value)\r\n return self\r\n },\r\n lt(column: string, value: AthenaConditionValue) {\r\n addCondition('lt', column, value)\r\n return self\r\n },\r\n lte(column: string, value: AthenaConditionValue) {\r\n addCondition('lte', column, value)\r\n return self\r\n },\r\n neq(column: string, value: AthenaConditionValue) {\r\n addCondition('neq', column, value)\r\n return self\r\n },\r\n like(column: string, value: AthenaConditionValue) {\r\n addCondition('like', column, value)\r\n return self\r\n },\r\n ilike(column: string, value: AthenaConditionValue) {\r\n addCondition('ilike', column, value)\r\n return self\r\n },\r\n is(column: string, value: AthenaConditionValue) {\r\n addCondition('is', column, value)\r\n return self\r\n },\r\n in(column: string, values: AthenaConditionArrayValue) {\r\n addCondition('in', column, values)\r\n return self\r\n },\r\n contains(column: string, values: AthenaConditionArrayValue) {\r\n addCondition('contains', column, values)\r\n return self\r\n },\r\n containedBy(column: string, values: AthenaConditionArrayValue) {\r\n addCondition('containedBy', column, values)\r\n return self\r\n },\r\n not(columnOrExpression: string, operator?: AthenaConditionOperator, value?: AthenaConditionValue) {\r\n if (operator != null && value !== undefined) {\r\n addCondition('not', undefined, `${columnOrExpression}.${operator}.${stringifyFilterValue(value)}`)\r\n } else {\r\n addCondition('not', undefined, columnOrExpression)\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: Record<string, unknown> | undefined,\r\n baseOptions: AthenaRpcCallOptions | undefined,\r\n client: ReturnType<typeof createAthenaGatewayClient>,\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\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 }\r\n const response = await client.rpcGateway<SelectedRow[]>(payload, mergedOptions)\r\n return formatResult(response)\r\n }\r\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<Row>(\r\n tableName: string,\r\n client: ReturnType<typeof createAthenaGatewayClient>,\r\n): TableQueryBuilder<Row> {\r\n const state: TableBuilderState = {\r\n conditions: [],\r\n }\r\n\r\n const addCondition = (\n operator: AthenaConditionOperator,\n column?: string,\n value?: AthenaConditionValue | AthenaConditionArrayValue | string,\n hints?: ConditionCastHints,\n ) => {\n const condition: AthenaGatewayCondition = { operator }\n if (column) {\n condition.column = column\n if (operator === 'eq') {\n // include legacy gateway shape for compatibility\r\n condition.eq_column = column\r\n }\r\n }\r\n if (value !== undefined) {\n condition.value = value\n if (operator === 'eq') {\n condition.eq_value = value\n }\n }\n if (hints?.valueCast) {\n condition.value_cast = hints.valueCast\n if (operator === 'eq') {\n condition.eq_value_cast = hints.valueCast\n }\n }\n if (hints?.columnCast) {\n condition.column_cast = hints.columnCast\n if (operator === 'eq') {\n condition.eq_column_cast = hints.columnCast\n }\n }\n state.conditions.push(condition)\n }\n\r\n const builder = {} as TableQueryBuilder<Row>\r\n\r\n const filterMethods = createFilterMethods(state, addCondition, builder)\r\n\r\n const runSelect = async <T = Row>(\n columns: string | string[] = DEFAULT_COLUMNS,\n options?: AthenaGatewayCallOptions,\n ) => {\n const conditions = state.conditions.length\n ? state.conditions.map(condition => ({ ...condition }))\n : undefined\n const hasTypedEqualityComparison =\n conditions?.some(\n condition =>\n condition.operator === 'eq' &&\n (condition.value_cast !== undefined || condition.column_cast !== undefined),\n ) ?? false\n\n if (hasTypedEqualityComparison && !options?.head && !options?.count && conditions) {\n const query = buildTypedSelectQuery({\n tableName,\n columns,\n conditions,\n limit: state.limit,\n offset: state.offset,\n currentPage: state.currentPage,\n pageSize: state.pageSize,\n order: state.order,\n })\n if (query) {\n const queryResponse = await client.queryGateway<T>({ query }, options)\n return formatResult(queryResponse)\n }\n }\n\n const payload = {\n table_name: tableName,\n columns,\n conditions,\n limit: state.limit,\n offset: state.offset,\n current_page: state.currentPage,\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 }\r\n const response = await client.fetchGateway<T>(payload, options)\r\n return formatResult(response)\r\n }\r\n\r\n const createSelectChain = <SelectedRow>(\r\n columns: string | string[],\r\n options?: AthenaGatewayCallOptions,\r\n ): SelectChain<SelectedRow> => {\r\n const chain = {} as SelectChain<SelectedRow>\r\n const filterMethods = createFilterMethods(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: Row | Row[], 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 payload: AthenaInsertPayload = {\r\n table_name: tableName,\r\n insert_body: values as Record<string, unknown>[],\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 response = await client.insertGateway<Row[]>(payload, mergedOptions)\r\n return formatResult(response)\r\n }\r\n return createMutationQuery<Row[]>(executeInsertMany)\r\n }\r\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 payload: AthenaInsertPayload = {\r\n table_name: tableName,\r\n insert_body: values as Record<string, unknown>,\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 response = await client.insertGateway<Row>(payload, mergedOptions)\r\n return formatResult(response)\r\n }\r\n return createMutationQuery<Row>(executeInsertOne)\r\n },\r\n upsert(\r\n values: Row | Row[],\r\n options?: AthenaGatewayCallOptions & { updateBody?: Partial<Row>; 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 payload: AthenaInsertPayload = {\r\n table_name: tableName,\r\n insert_body: values as Record<string, unknown>[],\r\n update_body: options?.updateBody ? (options.updateBody as Record<string, unknown>) : 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 response = await client.insertGateway<Row[]>(payload, mergedOptions)\r\n return formatResult(response)\r\n }\r\n return createMutationQuery<Row[]>(executeUpsertMany)\r\n }\r\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 payload: AthenaInsertPayload = {\r\n table_name: tableName,\r\n insert_body: values as Record<string, unknown>,\r\n update_body: options?.updateBody ? (options.updateBody as Record<string, unknown>) : 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 response = await client.insertGateway<Row>(payload, mergedOptions)\r\n return formatResult(response)\r\n }\r\n return createMutationQuery<Row>(executeUpsertOne)\r\n },\r\n update(values: Partial<Row>, 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 payload: AthenaUpdatePayload = {\r\n table_name: tableName,\r\n set: 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 response = await client.updateGateway<Row[]>(payload, mergedOptions)\r\n return formatResult(response)\r\n }\r\n const mutation = createMutationQuery<Row[]>(executeUpdate, null)\r\n const updateChain = {} as UpdateChain<Row>\r\n const filterMethods = createFilterMethods(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 payload: AthenaDeletePayload = {\r\n table_name: tableName,\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 response = await client.deleteGateway<Row | null>(payload, mergedOptions)\r\n return formatResult(response)\r\n }\r\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(client: ReturnType<typeof createAthenaGatewayClient>) {\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 response = await client.queryGateway<Row[]>({ query: normalizedQuery }, options)\r\n return formatResult(response)\r\n }\r\n}\r\n\r\nexport interface AthenaSdkClient {\r\n from<Row = unknown>(table: string): TableQueryBuilder<Row>\r\n rpc<Row = unknown, Args extends Record<string, unknown> = Record<string, unknown>>(\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}\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}\r\n\r\nfunction createClientFromConfig(config: AthenaClientConfig): AthenaSdkClient {\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 return {\r\n from<Row = unknown>(table: string) {\r\n return createTableBuilder<Row>(table, gateway)\r\n },\r\n rpc<Row = unknown, Args extends Record<string, unknown> = Record<string, unknown>>(\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 Record<string, unknown> | undefined,\r\n options,\r\n gateway,\r\n )\r\n },\r\n query: createQueryBuilder(gateway) as AthenaSdkClient['query'],\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 /** Enable or disable health tracking metadata. */\r\n healthTracking(enabled: boolean): AthenaClientBuilder\r\n /** Build the immutable Athena SDK client. */\r\n build(): AthenaSdkClient\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\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 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(): AthenaSdkClient {\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 })\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(): AthenaSdkClient {\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\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?: Pick<AthenaGatewayCallOptions, 'client' | 'headers' | 'backend'>,\r\n): AthenaSdkClient {\r\n const b = AthenaClient.builder().url(url).key(apiKey).backend(toBackendConfig(options?.backend))\r\n if (options?.client) b.client(options.client)\r\n if (options?.headers && Object.keys(options.headers).length > 0) b.headers(options.headers)\r\n return b.build()\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 AthenaConditionValue = string | number | boolean | null\nexport type AthenaConditionArrayValue = Array<AthenaConditionValue>\nexport type AthenaConditionCastType = string\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 {\n column?: string\n operator: AthenaConditionOperator\n value?: AthenaConditionValue | AthenaConditionArrayValue | string\n /**\n * Optional explicit cast for `value` (for example `\"uuid\"`).\n * Older gateways ignore unknown fields; newer gateways may use this hint.\n */\n value_cast?: AthenaConditionCastType\n /**\n * Optional explicit cast for `column` (for example `\"text\"`).\n * Used by SDK SQL fallback for typed comparisons.\n */\n column_cast?: AthenaConditionCastType\n /** Back-compat shape expected by older gateway implementations */\n eq_column?: string\n eq_value?: AthenaConditionValue | AthenaConditionArrayValue | string\n /** Optional cast hint aligned with legacy eq_* fields */\n eq_value_cast?: AthenaConditionCastType\n /** Optional cast hint aligned with legacy eq_* fields */\n eq_column_cast?: AthenaConditionCastType\n}\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 table_name: string\r\n insert_body: Record<string, unknown> | Record<string, unknown>[]\r\n update_body?: Record<string, unknown>\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 extends AthenaFetchPayload {\r\n set?: Record<string, unknown>\r\n data?: Record<string, unknown>\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 {\r\n function: string\r\n function_name?: string\r\n schema?: string\r\n args?: Record<string, unknown>\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?: Record<string, unknown>\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 count?: AthenaCountOption\r\n head?: boolean\r\n defaultToNull?: boolean\r\n stripNulls?: boolean\r\n onConflict?: string | string[]\r\n updateBody?: Record<string, unknown>\r\n}\r\n\r\nexport interface AthenaRpcCallOptions extends AthenaGatewayCallOptions {\r\n schema?: string\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 { 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 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 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 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 {\r\n strictBigInt?: boolean\r\n min?: number\r\n max?: number\r\n}\r\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 {\r\n min?: number\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 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 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(\r\n resultOrError: unknown,\r\n context?: AthenaOperationContext,\r\n): NormalizedAthenaError {\r\n if (isAthenaResultLike(resultOrError)) {\r\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 return {\r\n kind,\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 return {\r\n kind,\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 return {\r\n kind: classifyKind(maybeStatus, undefined, resultOrError.message),\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 return {\r\n kind: classifyKind(undefined, undefined, message),\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}"]}
|