{"version":3,"sources":["../../src/gateway/errors.ts","../../src/utils/parse-boolean-flag.ts","../../src/auxiliaries.ts","../../src/env/index.ts","../../src/generator/schema-selection.ts","../../src/generator/table-selection.ts","../../src/migrations/constants.ts","../../src/generator/config.ts","../../src/gateway/url.ts","../../package.json","../../src/sdk-version.ts","../../src/cookies/cookie-utils.ts","../../src/cookies/index.ts","../../src/utils/athena-request-headers.ts","../../src/billing/module.ts","../../src/client-result.ts","../../src/gateway/structured-select.ts","../../src/query-ast.ts","../../src/query-transport.ts","../../src/sql-identifiers.ts","../../src/client-sql.ts","../../src/client-request.ts","../../src/gateway/routes.ts","../../src/admin/query.ts","../../src/http/parse-response-body.ts","../../src/auth/limits.ts","../../src/auth/react-email.ts","../../src/auth/client.ts","../../src/chat/module.ts","../../src/release/identity.ts","../../src/compatibility/report.ts","../../src/gateway/client.ts","../../src/query-debug-ast.ts","../../src/query-tracing.ts","../../src/schema/model-target.ts","../../src/http/append-query.ts","../../src/storage/errors.ts","../../src/storage/backup.ts","../../src/storage/xhr-put.ts","../../src/storage/direct-upload.ts","../../src/storage/file.ts","../../src/storage/module.ts","../../src/client.ts","../../src/cloudflare/capabilities.ts","../../src/cloudflare/types.ts","../../src/cloudflare/d1/runner.ts","../../src/cloudflare/d1/sql.ts","../../src/cloudflare/d1/sql-rewrite.ts","../../src/cloudflare/d1/transport.ts","../../src/config/errors.ts","../../src/cloudflare/execution-mode.ts","../../src/cloudflare/r2/storage.ts","../../src/context/merge.ts","../../src/diagnostics.ts","../../src/v3-client.ts","../../src/generator/schema-discovery.ts","../../src/generator/config-file.ts","../../src/generator/artifact-merge.ts","../../src/schema/postgres-introspection-core.ts","../../src/postgres/driver.ts","../../src/schema/postgres-provider.ts","../../src/generator/providers.ts","../../src/utils/slugify.ts","../../src/generator/naming.ts","../../src/generator/postgres-type-mapping.ts","../../src/generator/placeholders.ts","../../src/generator/render-shared.ts","../../src/generator/table-builder-renderer.ts","../../src/generator/renderer.ts","../../src/generator/pipeline.ts","../../src/migrations/checksum.ts","../../src/migrations/types.ts","../../src/migrations/sql-guards.ts","../../src/migrations/discovery.ts","../../src/migrations/planner.ts","../../src/migrations/postgres.ts","../../src/migrations/runner.ts","../../src/cli/index.ts"],"names":["parseBooleanFlag","message","kind","resolve","existsSync","readFileSync","pathToFileURL","request","isRecord","firstNonEmptyString","aliasIdentifier","baseIdentifier","SDK_NAME","parsed","SDK_HEADER_VALUE","token","sessions","resolveRequestId","resolveErrorMessage","buildHeaders","report","nonEmptyString","resolveStructuredErrorPayload","appendQuery","headerValue","withPathParam","resolveErrorHint","isBlobBody","stringifyFilterValue","filterMethods","sum","j","rows","RESPONSE_ALIAS_PATTERN","SQL_ALIAS_PATTERN","clause","parts","assignments","isIdentChar","hasPaginationBounds","i","depth","inSingle","inDouble","inBacktick","inBracket","mapped","relative","readProcessEnv","normalizeOptional","isD1Binding","absolutePath","mkdir","dirname","writeFile","readFile","block","loadPgPoolConstructor","posix","renderModelArtifact","normalizeTypeLabel","relationKey","stat","createHash","readdir","join","normalizePath","configPath","dryRun","discoverSchemas","databaseLabel","result"],"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  cause?: string;\n  code: AthenaGatewayErrorCode;\n  endpoint?: AthenaGatewayEndpointPath;\n  /** Original thrown value for Error.cause (distinct from string `cause` detail). */\n  errorCause?: unknown;\n  hint?: string;\n  message: string;\n  method?: AthenaGatewayMethod;\n  requestId?: string;\n  status?: number;\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(\n      input.message,\n      input.errorCause === undefined ? undefined : { cause: input.errorCause }\n    );\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      cause: this.causeDetail,\n      code: this.code,\n      endpoint: this.endpoint,\n      hint: this.hint,\n      message: this.message,\n      method: this.method,\n      requestId: this.requestId,\n      status: this.status,\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        cause: details.cause,\n        code: details.code,\n        endpoint: details.endpoint ?? fallback.endpoint,\n        hint: details.hint,\n        message: details.message,\n        method: details.method ?? fallback.method,\n        requestId: details.requestId ?? fallback.requestId,\n        status: details.status,\n      });\n    }\n\n    return new AthenaGatewayError({\n      code: \"HTTP_ERROR\",\n      endpoint: fallback.endpoint,\n      message: response.error ?? \"Gateway request failed\",\n      method: fallback.method,\n      requestId: fallback.requestId,\n      status: response.status,\n    });\n  }\n}\n\nexport function isAthenaGatewayError(\n  error: unknown\n): error is AthenaGatewayError {\n  return error instanceof AthenaGatewayError;\n}\n","export function parseBooleanFlag(\n  rawValue: string | undefined,\n  fallback: boolean\n): boolean {\n  if (!rawValue) {\n    return fallback;\n  }\n\n  const normalized = rawValue.trim().toLowerCase();\n\n  if (\n    normalized === \"1\" ||\n    normalized === \"true\" ||\n    normalized === \"yes\" ||\n    normalized === \"on\"\n  ) {\n    return true;\n  }\n\n  if (\n    normalized === \"0\" ||\n    normalized === \"false\" ||\n    normalized === \"no\" ||\n    normalized === \"off\"\n  ) {\n    return false;\n  }\n\n  return fallback;\n}\n","import type { AthenaResult } from \"./client-result.ts\";\nimport { AthenaGatewayError, isAthenaGatewayError } from \"./gateway/errors.ts\";\nimport type {\n  AthenaGatewayErrorCode,\n  AthenaGatewayErrorDetails,\n} from \"./gateway/types.ts\";\nimport { parseBooleanFlag as parseBooleanFlagUtil } from \"./utils/parse-boolean-flag.ts\";\n\nexport type AthenaErrorKind =\n  | \"unique_violation\"\n  | \"not_found\"\n  | \"validation\"\n  | \"auth\"\n  | \"rate_limit\"\n  | \"transient\"\n  | \"unknown\";\n\nexport const AthenaErrorKind = {\n  Auth: \"auth\",\n  NotFound: \"not_found\",\n  RateLimit: \"rate_limit\",\n  Transient: \"transient\",\n  UniqueViolation: \"unique_violation\",\n  Unknown: \"unknown\",\n  Validation: \"validation\",\n} as const;\n\nexport type AthenaErrorCode =\n  | \"UNIQUE_VIOLATION\"\n  | \"NOT_FOUND\"\n  | \"VALIDATION_FAILED\"\n  | \"AUTH_UNAUTHORIZED\"\n  | \"AUTH_FORBIDDEN\"\n  | \"RATE_LIMITED\"\n  | \"NETWORK_UNAVAILABLE\"\n  | \"TRANSIENT_FAILURE\"\n  | \"HTTP_FAILURE\"\n  | \"UNKNOWN\";\n\nexport const AthenaErrorCode = {\n  AuthForbidden: \"AUTH_FORBIDDEN\",\n  AuthUnauthorized: \"AUTH_UNAUTHORIZED\",\n  HttpFailure: \"HTTP_FAILURE\",\n  NetworkUnavailable: \"NETWORK_UNAVAILABLE\",\n  NotFound: \"NOT_FOUND\",\n  RateLimited: \"RATE_LIMITED\",\n  TransientFailure: \"TRANSIENT_FAILURE\",\n  UniqueViolation: \"UNIQUE_VIOLATION\",\n  Unknown: \"UNKNOWN\",\n  ValidationFailed: \"VALIDATION_FAILED\",\n} as const satisfies Record<string, AthenaErrorCode>;\n\nexport type AthenaErrorCategory =\n  | \"transport\"\n  | \"client\"\n  | \"server\"\n  | \"database\"\n  | \"unknown\";\n\nexport const AthenaErrorCategory = {\n  Client: \"client\",\n  Database: \"database\",\n  Server: \"server\",\n  Transport: \"transport\",\n  Unknown: \"unknown\",\n} as const satisfies Record<string, AthenaErrorCategory>;\n\nexport interface AthenaOperationContext {\n  identity?: string | Record<string, unknown>;\n  operation?: string;\n  table?: string;\n}\n\nexport interface NormalizedAthenaError {\n  category: AthenaErrorCategory;\n  code: AthenaErrorCode;\n  constraint?: string;\n  kind: AthenaErrorKind;\n  message: string;\n  operation?: string;\n  raw: unknown;\n  retryable: boolean;\n  status?: number;\n  table?: string;\n}\n\nexport interface AthenaErrorInput {\n  category: AthenaErrorCategory;\n  code: AthenaErrorCode;\n  context?: AthenaOperationContext;\n  kind: AthenaErrorKind;\n  message: string;\n  raw?: unknown;\n  requestId?: string;\n  retryable?: boolean;\n  status?: number;\n}\n\nexport interface UnwrapOptions {\n  allowNull?: boolean;\n  context?: AthenaOperationContext;\n}\n\nexport interface UnwrapOneOptions extends UnwrapOptions {\n  requireExactlyOne?: boolean;\n}\n\nexport interface IntCoercionOptions {\n  max?: number;\n  min?: number;\n  strictBigInt?: boolean;\n}\n\nexport type RetryBackoffStrategy =\n  | \"linear\"\n  | \"exponential\"\n  | ((attempt: number, error: unknown) => number);\n\nexport interface RetryConfig {\n  backoff?: RetryBackoffStrategy;\n  baseDelayMs?: number;\n  jitter?: boolean | number;\n  maxDelayMs?: number;\n  retries: number;\n  shouldRetry?: (error: unknown, attempt: number) => boolean | Promise<boolean>;\n}\n\nexport interface RequireAffectedOptions {\n  min?: number;\n}\n\n/**\n * Parses a string-based boolean flag with a deterministic fallback.\n *\n * Accepts common truthy/falsey token variants used by env vars and CLI flags.\n */\nexport function parseBooleanFlag(\n  rawValue: string | undefined,\n  fallback: boolean\n): boolean {\n  return parseBooleanFlagUtil(rawValue, fallback);\n}\n\nexport class AthenaError extends Error {\n  readonly code: AthenaErrorCode;\n  readonly kind: AthenaErrorKind;\n  readonly category: AthenaErrorCategory;\n  readonly status?: number;\n  readonly retryable: boolean;\n  readonly requestId?: string;\n  readonly context?: AthenaOperationContext;\n  readonly raw?: unknown;\n\n  constructor(input: AthenaErrorInput) {\n    super(input.message);\n    this.name = \"AthenaError\";\n    this.code = input.code;\n    this.kind = input.kind;\n    this.category = input.category;\n    this.status = input.status;\n    this.retryable = input.retryable ?? false;\n    this.requestId = input.requestId;\n    this.context = input.context;\n    this.raw = input.raw;\n  }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\n  for (const value of values) {\n    if (typeof value === \"string\" && value.trim().length > 0) {\n      return value.trim();\n    }\n  }\n  return undefined;\n}\n\nfunction messageFromUnknownError(error: unknown): string | undefined {\n  if (typeof error === \"string\" && error.trim().length > 0) {\n    return error.trim();\n  }\n  if (error instanceof Error && error.message.trim().length > 0) {\n    return error.message.trim();\n  }\n  if (!isRecord(error)) {\n    return undefined;\n  }\n  return firstNonEmptyString(error.message, error.error, error.details);\n}\n\nfunction gatewayCodeFromUnknownError(\n  error: unknown\n): AthenaGatewayErrorCode | undefined {\n  if (!isRecord(error) || typeof error.gatewayCode !== \"string\") {\n    return undefined;\n  }\n  return error.gatewayCode as AthenaGatewayErrorCode;\n}\n\nfunction isAthenaResultErrorLike(value: unknown): value is {\n  message: string;\n  athenaCode?: AthenaErrorCode;\n  kind?: AthenaErrorKind;\n  category?: AthenaErrorCategory;\n  retryable?: boolean;\n  status?: number;\n  constraint?: string;\n  table?: string;\n  operation?: string;\n  raw?: unknown;\n} {\n  return (\n    isRecord(value) &&\n    typeof value.message === \"string\" &&\n    (value.athenaCode === undefined || isAthenaErrorCode(value.athenaCode)) &&\n    (value.kind === undefined || isAthenaErrorKind(value.kind)) &&\n    (value.category === undefined || isAthenaErrorCategory(value.category)) &&\n    (value.retryable === undefined || typeof value.retryable === \"boolean\") &&\n    (value.status === undefined || typeof value.status === \"number\")\n  );\n}\n\nfunction isAthenaErrorKind(value: unknown): value is AthenaErrorKind {\n  return (\n    value === \"unique_violation\" ||\n    value === \"not_found\" ||\n    value === \"validation\" ||\n    value === \"auth\" ||\n    value === \"rate_limit\" ||\n    value === \"transient\" ||\n    value === \"unknown\"\n  );\n}\n\nfunction isAthenaErrorCode(value: unknown): value is AthenaErrorCode {\n  return (\n    value === \"UNIQUE_VIOLATION\" ||\n    value === \"NOT_FOUND\" ||\n    value === \"VALIDATION_FAILED\" ||\n    value === \"AUTH_UNAUTHORIZED\" ||\n    value === \"AUTH_FORBIDDEN\" ||\n    value === \"RATE_LIMITED\" ||\n    value === \"NETWORK_UNAVAILABLE\" ||\n    value === \"TRANSIENT_FAILURE\" ||\n    value === \"HTTP_FAILURE\" ||\n    value === \"UNKNOWN\"\n  );\n}\n\nfunction isAthenaErrorCategory(value: unknown): value is AthenaErrorCategory {\n  return (\n    value === \"transport\" ||\n    value === \"client\" ||\n    value === \"server\" ||\n    value === \"database\" ||\n    value === \"unknown\"\n  );\n}\n\nfunction isNormalizedAthenaError(\n  value: unknown\n): value is NormalizedAthenaError {\n  return (\n    isRecord(value) &&\n    isAthenaErrorKind(value.kind) &&\n    isAthenaErrorCode(value.code) &&\n    isAthenaErrorCategory(value.category) &&\n    typeof value.retryable === \"boolean\" &&\n    typeof value.message === \"string\" &&\n    \"raw\" in value\n  );\n}\n\nfunction withContextOverrides(\n  normalized: NormalizedAthenaError,\n  context?: AthenaOperationContext\n): NormalizedAthenaError {\n  if (!(context?.table || context?.operation)) {\n    return normalized;\n  }\n\n  return {\n    ...normalized,\n    operation: context.operation ?? normalized.operation,\n    table: context.table ?? normalized.table,\n  };\n}\n\nfunction resolveAttachedNormalizedError(\n  resultOrError: unknown\n): NormalizedAthenaError | undefined {\n  if (!isRecord(resultOrError)) {\n    return undefined;\n  }\n  if (!(\"__athenaNormalizedError\" in resultOrError)) {\n    return undefined;\n  }\n  const candidate = resultOrError.__athenaNormalizedError;\n  return isNormalizedAthenaError(candidate) ? candidate : undefined;\n}\n\nfunction safeStringify(value: unknown): string {\n  try {\n    const serialized = JSON.stringify(value);\n    return serialized ?? String(value);\n  } catch {\n    return \"[unserializable]\";\n  }\n}\n\nfunction contextHint(context?: AthenaOperationContext): string | undefined {\n  if (!context?.identity) {\n    return undefined;\n  }\n  const identity =\n    typeof context.identity === \"string\"\n      ? context.identity\n      : safeStringify(context.identity);\n  return `Identity: ${identity}`;\n}\n\nfunction isAthenaResultLike(value: unknown): value is AthenaResult<unknown> {\n  return (\n    isRecord(value) &&\n    \"status\" in value &&\n    \"error\" in value &&\n    \"data\" in value &&\n    typeof value.status === \"number\"\n  );\n}\n\nfunction operationFromDetails(\n  details?: AthenaGatewayErrorDetails | null\n): string | undefined {\n  if (!details?.endpoint) {\n    return undefined;\n  }\n  if (\n    details.endpoint === \"/gateway/fetch\" ||\n    details.endpoint === \"/gateway/query\"\n  ) {\n    return \"select\";\n  }\n  if (details.endpoint === \"/gateway/insert\") {\n    return \"insert\";\n  }\n  if (details.endpoint === \"/gateway/update\") {\n    return \"update\";\n  }\n  if (details.endpoint === \"/gateway/delete\") {\n    return \"delete\";\n  }\n  if (\n    details.endpoint === \"/gateway/rpc\" ||\n    details.endpoint.startsWith(\"/rpc/\")\n  ) {\n    return \"rpc\";\n  }\n  return undefined;\n}\n\nfunction matchRegex(input: string, patterns: RegExp[]): string | undefined {\n  for (const pattern of patterns) {\n    const match = pattern.exec(input);\n    if (match?.[1]) {\n      return match[1];\n    }\n  }\n  return undefined;\n}\n\nfunction extractConstraint(message: string): string | undefined {\n  return matchRegex(message, [\n    /unique constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n    /constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n  ]);\n}\n\nfunction extractTable(message: string): string | undefined {\n  return matchRegex(message, [\n    /(?:table|relation)\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n    /on\\s+table\\s+([a-zA-Z0-9_.]+)/i,\n  ]);\n}\n\nfunction classifyKind(\n  status: number | undefined,\n  code: AthenaGatewayErrorCode | undefined,\n  message: string\n): AthenaErrorKind {\n  const lower = message.toLowerCase();\n  const hasUniquePattern =\n    lower.includes(\"unique constraint\") ||\n    lower.includes(\"duplicate key\") ||\n    lower.includes(\"already exists\") ||\n    lower.includes(\"duplicate\");\n  const hasNotFoundPattern =\n    lower.includes(\"not found\") || lower.includes(\"no rows\");\n  const hasValidationPattern =\n    lower.includes(\"validation\") ||\n    lower.includes(\"invalid\") ||\n    lower.includes(\"malformed\");\n  const hasAuthPattern =\n    lower.includes(\"unauthorized\") ||\n    lower.includes(\"forbidden\") ||\n    lower.includes(\"auth\");\n  const hasRateLimitPattern =\n    lower.includes(\"rate limit\") || lower.includes(\"too many requests\");\n  const hasTransientPattern =\n    lower.includes(\"timeout\") ||\n    lower.includes(\"temporar\") ||\n    lower.includes(\"connection reset\") ||\n    lower.includes(\"socket\") ||\n    lower.includes(\"deadlock\");\n\n  if (status === 409 || hasUniquePattern) {\n    return \"unique_violation\";\n  }\n  if (status === 404 || hasNotFoundPattern) {\n    return \"not_found\";\n  }\n  if (status === 401 || status === 403 || hasAuthPattern) {\n    return \"auth\";\n  }\n  if (status === 429 || hasRateLimitPattern) {\n    return \"rate_limit\";\n  }\n  if (code === \"INVALID_URL\") {\n    return \"validation\";\n  }\n  if (status === 400 || status === 422 || hasValidationPattern) {\n    return \"validation\";\n  }\n  if (\n    code === \"NETWORK_ERROR\" ||\n    status === 0 ||\n    (status !== undefined && status >= 500) ||\n    hasTransientPattern\n  ) {\n    return \"transient\";\n  }\n  return \"unknown\";\n}\n\nfunction toAthenaErrorCode(\n  kind: AthenaErrorKind,\n  status: number | undefined,\n  gatewayCode?: AthenaGatewayErrorCode\n): AthenaErrorCode {\n  if (gatewayCode === \"INVALID_URL\") {\n    return AthenaErrorCode.ValidationFailed;\n  }\n\n  if (\n    gatewayCode === \"NETWORK_ERROR\" ||\n    (kind === \"transient\" && status === 0)\n  ) {\n    return AthenaErrorCode.NetworkUnavailable;\n  }\n\n  switch (kind) {\n    case \"unique_violation\":\n      return AthenaErrorCode.UniqueViolation;\n    case \"not_found\":\n      return AthenaErrorCode.NotFound;\n    case \"validation\":\n      return AthenaErrorCode.ValidationFailed;\n    case \"rate_limit\":\n      return AthenaErrorCode.RateLimited;\n    case \"auth\":\n      if (status === 403) {\n        return AthenaErrorCode.AuthForbidden;\n      }\n      return AthenaErrorCode.AuthUnauthorized;\n    case \"transient\":\n      return status !== undefined && status >= 500\n        ? AthenaErrorCode.HttpFailure\n        : AthenaErrorCode.TransientFailure;\n    default:\n      return status !== undefined && status >= 400\n        ? AthenaErrorCode.HttpFailure\n        : AthenaErrorCode.Unknown;\n  }\n}\n\nfunction toAthenaErrorCategory(\n  kind: AthenaErrorKind,\n  status: number | undefined\n): AthenaErrorCategory {\n  if (kind === \"transient\" && (status === 0 || status === undefined)) {\n    return AthenaErrorCategory.Transport;\n  }\n  if (kind === \"unique_violation\") {\n    return AthenaErrorCategory.Database;\n  }\n  if (kind === \"validation\" || kind === \"auth\" || kind === \"not_found\") {\n    return AthenaErrorCategory.Client;\n  }\n  if (kind === \"rate_limit\" || kind === \"transient\") {\n    return AthenaErrorCategory.Server;\n  }\n  return AthenaErrorCategory.Unknown;\n}\n\nfunction isRetryable(\n  kind: AthenaErrorKind,\n  status: number | undefined\n): boolean {\n  if (kind === \"rate_limit\" || kind === \"transient\") {\n    return true;\n  }\n  return status !== undefined && status >= 500;\n}\n\nfunction toGatewayCode(\n  kind: AthenaErrorKind,\n  status?: number\n): AthenaGatewayErrorCode {\n  if (kind === \"transient\" && (status === 0 || status === undefined)) {\n    return \"NETWORK_ERROR\";\n  }\n  if (kind === \"validation\") {\n    return \"INVALID_JSON\";\n  }\n  if (status !== undefined && status >= 400) {\n    return \"HTTP_ERROR\";\n  }\n  return \"UNKNOWN_ERROR\";\n}\n\nfunction toAthenaGatewayError(\n  source: unknown,\n  fallbackMessage: string,\n  context?: AthenaOperationContext\n): AthenaGatewayError {\n  if (isAthenaGatewayError(source)) {\n    return source;\n  }\n\n  if (isAthenaResultLike(source) && source.errorDetails) {\n    const message =\n      messageFromUnknownError(source.error) ??\n      source.errorDetails.message ??\n      fallbackMessage;\n    return new AthenaGatewayError({\n      cause:\n        (isRecord(source.error)\n          ? firstNonEmptyString(source.error.cause)\n          : undefined) ?? source.errorDetails.cause,\n      code: source.errorDetails.code,\n      endpoint: source.errorDetails.endpoint,\n      hint:\n        (isRecord(source.error)\n          ? firstNonEmptyString(source.error.hint)\n          : undefined) ?? source.errorDetails.hint,\n      message,\n      method: source.errorDetails.method,\n      requestId: source.errorDetails.requestId,\n      status: source.status,\n    });\n  }\n\n  const normalized = normalizeAthenaError(source, context);\n  const message =\n    isAthenaResultLike(source) &&\n    source.error === null &&\n    source.errorDetails === null\n      ? fallbackMessage\n      : normalized.message || fallbackMessage;\n\n  return new AthenaGatewayError({\n    cause:\n      typeof normalized.raw === \"string\"\n        ? normalized.raw\n        : safeStringify(normalized.raw),\n    code: toGatewayCode(normalized.kind, normalized.status),\n    hint:\n      normalized.constraint === null\n        ? contextHint(context)\n        : `Constraint: ${normalized.constraint}`,\n    message,\n    status: normalized.status ?? 0,\n  });\n}\n\n/**\n * Returns `true` when a result is successful (`2xx` status and no `error`).\n */\nexport function isOk<T>(result: AthenaResult<T>): boolean {\n  return result.error === null && result.status >= 200 && result.status < 300;\n}\n\n/**\n * @deprecated Prefer `result.error` on failed `AthenaResult` values and the\n * structured fields already attached to thrown SDK errors. This helper is\n * retained for compatibility with mixed unknown inputs.\n *\n * Normalizes any Athena failure shape into a stable, typed error envelope.\n *\n * Accepts `AthenaResult`, `AthenaGatewayError`, native `Error`, or unknown values.\n * Optional `context` can override inferred table/operation metadata for clearer diagnostics.\n */\nexport function normalizeAthenaError(\n  resultOrError: unknown,\n  context?: AthenaOperationContext\n): NormalizedAthenaError {\n  const attached = resolveAttachedNormalizedError(resultOrError);\n  if (attached) {\n    return withContextOverrides(attached, context);\n  }\n\n  if (isAthenaResultLike(resultOrError)) {\n    if (isAthenaResultErrorLike(resultOrError.error)) {\n      return {\n        category:\n          resultOrError.error.category ??\n          toAthenaErrorCategory(\n            resultOrError.error.kind ??\n              classifyKind(\n                resultOrError.status,\n                gatewayCodeFromUnknownError(resultOrError.error),\n                resultOrError.error.message\n              ),\n            resultOrError.error.status ?? resultOrError.status\n          ),\n        code:\n          resultOrError.error.athenaCode ??\n          toAthenaErrorCode(\n            resultOrError.error.kind ??\n              classifyKind(\n                resultOrError.status,\n                gatewayCodeFromUnknownError(resultOrError.error),\n                resultOrError.error.message\n              ),\n            resultOrError.error.status ?? resultOrError.status,\n            gatewayCodeFromUnknownError(resultOrError.error)\n          ),\n        constraint: resultOrError.error.constraint,\n        kind:\n          resultOrError.error.kind ??\n          classifyKind(\n            resultOrError.status,\n            gatewayCodeFromUnknownError(resultOrError.error),\n            resultOrError.error.message\n          ),\n        message: resultOrError.error.message,\n        operation: context?.operation ?? resultOrError.error.operation,\n        raw: resultOrError.error.raw ?? resultOrError.raw,\n        retryable:\n          resultOrError.error.retryable ??\n          isRetryable(\n            resultOrError.error.kind ??\n              classifyKind(\n                resultOrError.status,\n                gatewayCodeFromUnknownError(resultOrError.error),\n                resultOrError.error.message\n              ),\n            resultOrError.error.status ?? resultOrError.status\n          ),\n        status: resultOrError.error.status ?? resultOrError.status,\n        table: context?.table ?? resultOrError.error.table,\n      };\n    }\n\n    const details = resultOrError.errorDetails;\n    const message =\n      messageFromUnknownError(resultOrError.error) ??\n      details?.message ??\n      `Athena ${context?.operation ?? operationFromDetails(details) ?? \"request\"} failed`;\n    const operation = context?.operation ?? operationFromDetails(details);\n    const table = context?.table ?? extractTable(message);\n    const constraint = extractConstraint(message);\n    const gatewayCode =\n      details?.code ?? gatewayCodeFromUnknownError(resultOrError.error);\n    const kind = classifyKind(resultOrError.status, gatewayCode, message);\n    const code = toAthenaErrorCode(kind, resultOrError.status, gatewayCode);\n    const category = toAthenaErrorCategory(kind, resultOrError.status);\n    return {\n      category,\n      code,\n      constraint,\n      kind,\n      message,\n      operation,\n      raw: resultOrError.raw,\n      retryable: isRetryable(kind, resultOrError.status),\n      status: resultOrError.status,\n      table,\n    };\n  }\n\n  if (isAthenaGatewayError(resultOrError)) {\n    const details = resultOrError.toDetails();\n    const operation = context?.operation ?? operationFromDetails(details);\n    const table = context?.table ?? extractTable(resultOrError.message);\n    const constraint = extractConstraint(resultOrError.message);\n    const kind = classifyKind(\n      resultOrError.status,\n      resultOrError.code,\n      resultOrError.message\n    );\n    const code = toAthenaErrorCode(\n      kind,\n      resultOrError.status,\n      resultOrError.code\n    );\n    const category = toAthenaErrorCategory(kind, resultOrError.status);\n    return {\n      category,\n      code,\n      constraint,\n      kind,\n      message: resultOrError.message,\n      operation,\n      raw: resultOrError,\n      retryable: isRetryable(kind, resultOrError.status),\n      status: resultOrError.status,\n      table,\n    };\n  }\n\n  if (resultOrError instanceof Error) {\n    const maybeStatus =\n      isRecord(resultOrError) && typeof resultOrError.status === \"number\"\n        ? resultOrError.status\n        : undefined;\n    const kind = classifyKind(maybeStatus, undefined, resultOrError.message);\n    return {\n      category: toAthenaErrorCategory(kind, maybeStatus),\n      code: toAthenaErrorCode(kind, maybeStatus),\n      constraint: extractConstraint(resultOrError.message),\n      kind,\n      message: resultOrError.message,\n      operation: context?.operation,\n      raw: resultOrError,\n      retryable: isRetryable(kind, maybeStatus),\n      status: maybeStatus,\n      table: context?.table ?? extractTable(resultOrError.message),\n    };\n  }\n\n  const message =\n    typeof resultOrError === \"string\" ? resultOrError : \"Unknown Athena error\";\n  const kind = classifyKind(undefined, undefined, message);\n  return {\n    category: toAthenaErrorCategory(kind, undefined),\n    code: toAthenaErrorCode(kind, undefined),\n    constraint: extractConstraint(message),\n    kind,\n    message,\n    operation: context?.operation,\n    raw: resultOrError,\n    retryable: isRetryable(kind, undefined),\n    status: undefined,\n    table: context?.table ?? extractTable(message),\n  };\n}\n\n/**\n * Unwraps a successful result into a row array.\n *\n * - Throws on failed results.\n * - Converts `null` data to an empty array.\n * - Wraps scalar data in a single-element array.\n */\nexport function unwrapRows<T>(\n  result: AthenaResult<T[] | T | null>,\n  options?: UnwrapOptions\n): T[] {\n  if (!isOk(result)) {\n    throw toAthenaGatewayError(\n      result,\n      \"Athena request failed\",\n      options?.context\n    );\n  }\n  if (result.data === null) {\n    return [];\n  }\n  return Array.isArray(result.data) ? result.data : [result.data];\n}\n\n/**\n * Unwraps successful result data from `AthenaResult<T | null>`.\n *\n * By default, `null` data throws. Pass `{ allowNull: true }` to permit nullable payloads.\n */\nexport function unwrap<T>(\n  result: AthenaResult<T | null>,\n  options: UnwrapOptions & { allowNull: true }\n): T | null;\nexport function unwrap<T>(\n  result: AthenaResult<T | null>,\n  options?: UnwrapOptions\n): T;\nexport function unwrap<T>(\n  result: AthenaResult<T | null>,\n  options?: UnwrapOptions\n): T | null {\n  if (!isOk(result)) {\n    throw toAthenaGatewayError(\n      result,\n      \"Athena request failed\",\n      options?.context\n    );\n  }\n  if (result.data === null && !options?.allowNull) {\n    throw toAthenaGatewayError(\n      result,\n      \"Expected data but received null\",\n      options?.context\n    );\n  }\n  return result.data;\n}\n\n/**\n * Unwraps the first row from a successful result that may contain arrays/scalars/null.\n *\n * - Throws on failed results.\n * - Throws when no row exists unless `allowNull: true` is provided.\n * - Optionally enforces exact cardinality via `requireExactlyOne`.\n */\nexport function unwrapOne<T>(\n  result: AthenaResult<T[] | T | null>,\n  options: UnwrapOneOptions & { allowNull: true }\n): T | null;\nexport function unwrapOne<T>(\n  result: AthenaResult<T[] | T | null>,\n  options?: UnwrapOneOptions\n): T;\nexport function unwrapOne<T>(\n  result: AthenaResult<T[] | T | null>,\n  options?: UnwrapOneOptions\n): T | null {\n  const rows = unwrapRows(result, options);\n  if (!rows.length) {\n    if (options?.allowNull) {\n      return null;\n    }\n    throw toAthenaGatewayError(\n      result,\n      \"Expected one row but received none\",\n      options?.context\n    );\n  }\n  if (options?.requireExactlyOne && rows.length !== 1) {\n    throw toAthenaGatewayError(\n      result,\n      `Expected exactly one row but received ${rows.length}`,\n      options.context\n    );\n  }\n  return rows[0];\n}\n\n/**\n * Asserts that an Athena result is successful.\n *\n * Returns the original result for fluent composition and throws `AthenaGatewayError` on failure.\n */\nexport function requireSuccess<T>(\n  result: AthenaResult<T>,\n  context?: AthenaOperationContext\n): AthenaResult<T> {\n  if (!isOk(result)) {\n    throw toAthenaGatewayError(\n      result,\n      `Athena ${context?.operation ?? \"request\"} failed`,\n      context\n    );\n  }\n  return result;\n}\n\n/**\n * Enforces mutation postconditions based on `result.count`.\n *\n * - Validates success first.\n * - Requires a non-null count in the response.\n * - Validates `count >= min` (default: `1`).\n *\n * Useful for guaranteeing that critical writes actually affected rows.\n */\nexport function requireAffected<T>(\n  result: AthenaResult<T>,\n  options?: RequireAffectedOptions,\n  context?: AthenaOperationContext\n): number {\n  requireSuccess(result, context);\n\n  const minimum = options?.min ?? 1;\n  const count = result.count;\n  if (count === null || count === undefined) {\n    throw new AthenaGatewayError({\n      cause: safeStringify(result.raw),\n      code: \"UNKNOWN_ERROR\",\n      hint: 'Set call option { count: \"exact\" } for mutation postcondition checks.',\n      message: \"Expected affected row count but response.count is missing\",\n      status: result.status,\n    });\n  }\n\n  if (count < minimum) {\n    throw new AthenaGatewayError({\n      cause: safeStringify(result.raw),\n      code: \"UNKNOWN_ERROR\",\n      hint: contextHint(context),\n      message: `Expected at least ${minimum} affected rows but received ${count}`,\n      status: result.status,\n    });\n  }\n\n  return count;\n}\n\nfunction applyBounds(\n  value: number,\n  options?: IntCoercionOptions\n): number | null {\n  if (options?.min !== undefined && value < options.min) {\n    return null;\n  }\n  if (options?.max !== undefined && value > options.max) {\n    return null;\n  }\n  return value;\n}\n\nfunction parseIntegerString(value: string): number | null {\n  const normalized = value.trim();\n  if (!/^[-+]?\\d+$/.test(normalized)) {\n    return null;\n  }\n  const parsed = Number(normalized);\n  if (!(Number.isFinite(parsed) && Number.isInteger(parsed))) {\n    return null;\n  }\n  return parsed;\n}\n\n/**\n * Safely coerces `unknown` values into finite integers.\n *\n * Returns `null` when coercion fails or bounds/strict bigint checks are violated.\n */\nexport function coerceInt(\n  value: unknown,\n  options?: IntCoercionOptions\n): number | null {\n  if (value === null) {\n    return null;\n  }\n\n  if (typeof value === \"number\") {\n    if (!(Number.isFinite(value) && Number.isInteger(value))) {\n      return null;\n    }\n    return applyBounds(value, options);\n  }\n\n  if (typeof value === \"string\") {\n    const parsed = parseIntegerString(value);\n    if (parsed === null) {\n      return null;\n    }\n    return applyBounds(parsed, options);\n  }\n\n  if (typeof value === \"bigint\") {\n    if (\n      options?.strictBigInt &&\n      (value > BigInt(Number.MAX_SAFE_INTEGER) ||\n        value < BigInt(Number.MIN_SAFE_INTEGER))\n    ) {\n      return null;\n    }\n    const parsed = Number(value);\n    if (!(Number.isFinite(parsed) && Number.isInteger(parsed))) {\n      return null;\n    }\n    return applyBounds(parsed, options);\n  }\n\n  return null;\n}\n\n/**\n * Strict integer assertion wrapper around `coerceInt`.\n *\n * Throws a `TypeError` with the provided label when coercion fails.\n */\nexport function assertInt(\n  value: unknown,\n  label = \"value\",\n  options?: IntCoercionOptions\n): number {\n  const parsed = coerceInt(value, options);\n  if (parsed === null) {\n    throw new TypeError(`${label} must be a finite integer`);\n  }\n  return parsed;\n}\n\nfunction defaultShouldRetry(error: unknown): boolean {\n  const normalized = normalizeAthenaError(error);\n  return normalized.kind === \"transient\" || normalized.kind === \"rate_limit\";\n}\n\nfunction computeDelayMs(\n  attempt: number,\n  error: unknown,\n  config: Required<\n    Pick<RetryConfig, \"baseDelayMs\" | \"backoff\" | \"maxDelayMs\" | \"jitter\">\n  >\n): number {\n  const baseDelay = config.baseDelayMs;\n  const rawDelay =\n    typeof config.backoff === \"function\"\n      ? config.backoff(attempt, error)\n      : config.backoff === \"linear\"\n        ? baseDelay * attempt\n        : baseDelay * 2 ** (attempt - 1);\n\n  const safeDelay = Number.isFinite(rawDelay) ? Math.max(0, rawDelay) : 0;\n  const clamped = Math.min(config.maxDelayMs, safeDelay);\n  const jitterFactor =\n    typeof config.jitter === \"number\"\n      ? Math.max(0, Math.min(1, config.jitter))\n      : config.jitter\n        ? 0.2\n        : 0;\n\n  if (!jitterFactor) {\n    return clamped;\n  }\n  const deviation = clamped * jitterFactor;\n  const offset = (Math.random() * 2 - 1) * deviation;\n  return Math.max(0, clamped + offset);\n}\n\nfunction sleep(ms: number): Promise<void> {\n  if (ms <= 0) {\n    return Promise.resolve();\n  }\n  return new Promise((resolve) => {\n    setTimeout(resolve, ms);\n  });\n}\n\n/**\n * @deprecated Prefer `retryReads` for standard SDK-managed read\n * retries, or a call-site retry policy when you need custom write/replay\n * behavior. This helper is retained for compatibility.\n *\n * Retries an async operation with configurable backoff and retry policy.\n *\n * `retries` represents additional attempts after the first failure.\n * By default, transient and rate-limit errors are retried.\n */\nexport async function withRetry<T>(\n  config: RetryConfig,\n  fn: () => Promise<T>\n): Promise<T> {\n  const retries = Math.max(0, Math.trunc(config.retries));\n  const shouldRetry = config.shouldRetry ?? defaultShouldRetry;\n  const resolvedConfig = {\n    backoff: config.backoff ?? \"exponential\",\n    baseDelayMs: config.baseDelayMs ?? 100,\n    jitter: config.jitter ?? false,\n    maxDelayMs: config.maxDelayMs ?? 10_000,\n  } satisfies Required<\n    Pick<RetryConfig, \"baseDelayMs\" | \"backoff\" | \"maxDelayMs\" | \"jitter\">\n  >;\n\n  for (let attempts = 0; attempts <= retries; attempts += 1) {\n    try {\n      return await fn();\n    } catch (error) {\n      if (attempts >= retries) {\n        throw error;\n      }\n\n      const currentAttempt = attempts + 1;\n      const retry = await shouldRetry(error, currentAttempt);\n      if (!retry) {\n        throw error;\n      }\n\n      const delay = computeDelayMs(currentAttempt, error, resolvedConfig);\n      await sleep(delay);\n    }\n  }\n\n  throw new Error(\"withRetry reached an unexpected state\");\n}\n","/**\n * Canonical Athena environment resolution and createClient alias catalogs.\n *\n * Primary keys (default for {@link resolveAthenaEnv}):\n * - `ATHENA_URL`\n * - `ATHENA_API_KEY`\n * - `ATHENA_CLIENT`\n * - `ATHENA_AUTH_URL`\n *\n * Pass `legacyAliases: true` to also accept historical multi-key sets used by\n * older apps.\n *\n * **createClient / Workers / execution-mode** always consult the ordered\n * catalogs below (`ATHENA_ENV_URL_KEYS`, `ATHENA_ENV_DB_URL_KEYS`,\n * `ATHENA_ENV_API_KEY_KEYS`, `ATHENA_ENV_CLIENT_KEYS`,\n * `ATHENA_ENV_GATEWAY_URL_KEYS`). Those lists are the single source of truth —\n * do not re-copy them in v3-client or cloudflare façades.\n *\n * Service-specific keys (auth/chat/storage) and generator-only keys\n * (`ATHENA_GENERATOR_*`) stay in their owning modules.\n */\n\nimport type { EnvLike } from \"../utils/athena-auth-url.ts\";\n\n/** Recommended primary environment keys. */\nexport const ATHENA_ENV_PRIMARY_KEYS = {\n  apiKey: \"ATHENA_API_KEY\",\n  authUrl: \"ATHENA_AUTH_URL\",\n  client: \"ATHENA_CLIENT\",\n  url: \"ATHENA_URL\",\n} as const;\n\n// ---------------------------------------------------------------------------\n// createClient / Workers / execution-mode catalogs (order = priority)\n// ---------------------------------------------------------------------------\n\n/**\n * Unified root URL keys for createClient top-level `url` / env root.\n * Used before path derivation for service URLs.\n */\nexport const ATHENA_ENV_URL_KEYS = [\n  \"ATHENA_URL\",\n  \"NEXT_PUBLIC_ATHENA_URL\",\n] as const;\n\n/**\n * DB / gateway service URL keys for createClient `db.url`.\n * Consulted after root URL derivation when no explicit `db.url` is set.\n */\nexport const ATHENA_ENV_DB_URL_KEYS = [\n  \"ATHENA_DB_URL\",\n  \"ATHENA_GATEWAY_URL\",\n  \"NEXT_PUBLIC_ATHENA_DB_API_URL\",\n] as const;\n\n/**\n * Combined gateway/root URL keys for execution-mode resolution and Worker façades.\n * Order matches createClient: root URL keys first, then DB-specific aliases.\n */\nexport const ATHENA_ENV_GATEWAY_URL_KEYS = [\n  ...ATHENA_ENV_URL_KEYS,\n  ...ATHENA_ENV_DB_URL_KEYS,\n] as const;\n\n/** API key keys accepted by createClient resolveCore (and Worker key forwarding). */\nexport const ATHENA_ENV_API_KEY_KEYS = [\n  \"ATHENA_API_KEY\",\n  \"NEXT_PUBLIC_ATHENA_API_KEY\",\n  \"ATHENA_GATEWAY_API_KEY\",\n  \"X_API_KEY\",\n] as const;\n\n/** Client-name keys accepted by createClient resolveCore (`X-Athena-Client`). */\nexport const ATHENA_ENV_CLIENT_KEYS = [\n  \"ATHENA_CLIENT\",\n  \"ATHENA_GATEWAY_CLIENT\",\n  \"ATHENA_GENERATOR_CLIENT\",\n  \"NEXT_PUBLIC_ATHENA_CLIENT\",\n  \"NEXT_PUBLIC_ATHENA_GATEWAY_CLIENT\",\n] as const;\n\n// ---------------------------------------------------------------------------\n// resolveAthenaEnv legacy catalogs (gated by legacyAliases; membership differs\n// from createClient lists — do not merge without a product decision)\n// ---------------------------------------------------------------------------\n\n/** Legacy URL aliases for {@link resolveAthenaEnv} (order = priority). */\nexport const ATHENA_ENV_LEGACY_URL_KEYS = [\n  \"ATHENA_URL\",\n  \"NEXT_PUBLIC_ATHENA_URL\",\n  \"ATHENA_GATEWAY_URL\",\n  \"NEXT_PUBLIC_ATHENA_GATEWAY_URL\",\n] as const;\n\n/** Legacy API key aliases for {@link resolveAthenaEnv}. */\nexport const ATHENA_ENV_LEGACY_API_KEY_KEYS = [\n  \"ATHENA_API_KEY\",\n  \"ATHENA_KEY\",\n  \"ATHENA_PUBLISHABLE_KEY\",\n  \"NEXT_PUBLIC_ATHENA_API_KEY\",\n  \"NEXT_PUBLIC_ATHENA_PUBLISHABLE_KEY\",\n] as const;\n\n/** Legacy client-name aliases for {@link resolveAthenaEnv}. */\nexport const ATHENA_ENV_LEGACY_CLIENT_KEYS = [\n  \"ATHENA_CLIENT\",\n  \"NEXT_PUBLIC_ATHENA_CLIENT\",\n  \"ATHENA_CLIENT_NAME\",\n] as const;\n\n/** Legacy auth URL aliases for {@link resolveAthenaEnv}. */\nexport const ATHENA_ENV_LEGACY_AUTH_URL_KEYS = [\n  \"ATHENA_AUTH_URL\",\n  \"ATHENA_AUTH_UPSTREAM_URL\",\n  \"NEXT_PUBLIC_ATHENA_AUTH_URL\",\n  \"NEXT_PUBLIC_ATHENA_AUTH_UPSTREAM_URL\",\n] as const;\n\nexport type AthenaEnvField = \"url\" | \"apiKey\" | \"client\" | \"authUrl\";\n\nexport interface ResolveAthenaEnvOptions {\n  /** Log which keys resolved and which were ignored (non-production only unless forced). */\n  debug?: boolean;\n  /** Explicit env map. Defaults to `process.env` when available. */\n  env?: EnvLike;\n  /**\n   * When true, fall back to {@link ATHENA_ENV_LEGACY_*_KEYS} after primary keys.\n   * Default false so new apps only document one key set.\n   */\n  legacyAliases?: boolean;\n}\n\nexport interface AthenaEnvResolution {\n  apiKey?: string;\n  authUrl?: string;\n  client?: string;\n  /** Non-empty keys that were considered but not chosen (lower priority). */\n  ignored: Array<{ field: AthenaEnvField; key: string }>;\n  /** Key that supplied each field, when present. */\n  sources: Partial<Record<AthenaEnvField, string>>;\n  url?: string;\n}\n\nfunction readProcessEnv(): EnvLike {\n  try {\n    return (globalThis as { process?: { env?: EnvLike } }).process?.env ?? {};\n  } catch {\n    return {};\n  }\n}\n\nfunction candidatesFor(\n  field: AthenaEnvField,\n  legacyAliases: boolean\n): readonly string[] {\n  const primary = ATHENA_ENV_PRIMARY_KEYS[field];\n  if (!legacyAliases) {\n    return [primary];\n  }\n\n  switch (field) {\n    case \"url\":\n      return ATHENA_ENV_LEGACY_URL_KEYS;\n    case \"apiKey\":\n      return ATHENA_ENV_LEGACY_API_KEY_KEYS;\n    case \"client\":\n      return ATHENA_ENV_LEGACY_CLIENT_KEYS;\n    case \"authUrl\":\n      return ATHENA_ENV_LEGACY_AUTH_URL_KEYS;\n    default:\n      return [primary];\n  }\n}\n\nfunction pickField(\n  field: AthenaEnvField,\n  source: EnvLike,\n  legacyAliases: boolean,\n  ignored: AthenaEnvResolution[\"ignored\"]\n): { value?: string; key?: string } {\n  const keys = candidatesFor(field, legacyAliases);\n  let chosen: { value?: string; key?: string } = {};\n\n  for (const key of keys) {\n    const raw = source[key]?.trim();\n    if (!raw) {\n      continue;\n    }\n    if (chosen.value) {\n      ignored.push({ field, key });\n    } else {\n      chosen = { key, value: raw };\n    }\n  }\n\n  return chosen;\n}\n\n/**\n * Resolve Athena connection settings from an env map.\n *\n * Primary keys only unless `legacyAliases: true`.\n */\nexport function resolveAthenaEnv(\n  options: ResolveAthenaEnvOptions = {}\n): AthenaEnvResolution {\n  const source = options.env ?? readProcessEnv();\n  const legacyAliases = options.legacyAliases === true;\n  const ignored: AthenaEnvResolution[\"ignored\"] = [];\n\n  const url = pickField(\"url\", source, legacyAliases, ignored);\n  const apiKey = pickField(\"apiKey\", source, legacyAliases, ignored);\n  const client = pickField(\"client\", source, legacyAliases, ignored);\n  const authUrl = pickField(\"authUrl\", source, legacyAliases, ignored);\n\n  const result: AthenaEnvResolution = {\n    apiKey: apiKey.value,\n    authUrl: authUrl.value,\n    client: client.value,\n    ignored,\n    sources: {\n      ...(url.key ? { url: url.key } : {}),\n      ...(apiKey.key ? { apiKey: apiKey.key } : {}),\n      ...(client.key ? { client: client.key } : {}),\n      ...(authUrl.key ? { authUrl: authUrl.key } : {}),\n    },\n    url: url.value,\n  };\n\n  const shouldDebug =\n    options.debug === true ||\n    (options.debug !== false &&\n      (globalThis as { process?: { env?: { ATHENA_ENV_DEBUG?: string } } })\n        .process?.env?.ATHENA_ENV_DEBUG === \"1\");\n\n  if (shouldDebug) {\n    console.info(\"[athena/env] resolved\", {\n      hasApiKey: Boolean(result.apiKey),\n      hasAuthUrl: Boolean(result.authUrl),\n      hasClient: Boolean(result.client),\n      hasUrl: Boolean(result.url),\n      ignored: result.ignored,\n      sources: result.sources,\n    });\n  }\n\n  return result;\n}\n\n/**\n * Like {@link resolveAthenaEnv}, but throws when `url` or `apiKey` is missing.\n */\nexport function requireAthenaEnv(\n  options: ResolveAthenaEnvOptions = {}\n): AthenaEnvResolution & { url: string; apiKey: string } {\n  const resolved = resolveAthenaEnv(options);\n  if (!(resolved.url && resolved.apiKey)) {\n    const missing: string[] = [];\n    if (!resolved.url) {\n      missing.push(ATHENA_ENV_PRIMARY_KEYS.url);\n    }\n    if (!resolved.apiKey) {\n      missing.push(ATHENA_ENV_PRIMARY_KEYS.apiKey);\n    }\n    throw new Error(\n      `Missing required Athena env: ${missing.join(\", \")}. ` +\n        (options.legacyAliases\n          ? \"Legacy aliases were enabled but none resolved.\"\n          : \"Set primary keys, or pass legacyAliases: true for historical names.\")\n    );\n  }\n  return {\n    ...resolved,\n    apiKey: resolved.apiKey,\n    url: resolved.url,\n  };\n}\n","import type {\n  GeneratorProviderConfig,\n  GeneratorSchemaSelection,\n} from \"./types.ts\";\n\nexport const DEFAULT_POSTGRES_SCHEMAS = [\"public\"] as const;\n\nfunction collectSchemaNames(\n  input: GeneratorSchemaSelection | undefined\n): string[] {\n  if (!input) {\n    return [];\n  }\n\n  const values = typeof input === \"string\" ? [input] : input;\n  return values.flatMap((value) => String(value).split(\",\"));\n}\n\n/**\n * Normalizes schema selection from config or env-backed strings into a stable,\n * deduplicated list. Empty selections fall back to PostgreSQL's public schema.\n */\nexport function normalizeSchemaSelection(\n  input: GeneratorSchemaSelection | undefined\n): string[] {\n  const schemas: string[] = [];\n  const seen = new Set<string>();\n\n  for (const value of collectSchemaNames(input)) {\n    const schema = value.trim();\n    if (!schema || seen.has(schema)) {\n      continue;\n    }\n    seen.add(schema);\n    schemas.push(schema);\n  }\n\n  return schemas.length > 0 ? schemas : [...DEFAULT_POSTGRES_SCHEMAS];\n}\n\n/**\n * Resolves the effective schema list for provider-backed generator runs.\n */\nexport function resolveProviderSchemas(\n  providerConfig: GeneratorProviderConfig\n): string[] {\n  if (providerConfig.kind === \"postgres\") {\n    return normalizeSchemaSelection(providerConfig.schemas);\n  }\n\n  return [...DEFAULT_POSTGRES_SCHEMAS];\n}\n","import type {\n  IntrospectionSchema,\n  IntrospectionSnapshot,\n} from \"../schema/types.ts\";\nimport type {\n  GeneratorTableSelection,\n  NormalizedGeneratorFilterConfig,\n} from \"./types.ts\";\n\nfunction normalizeTableSelector(value: string): string | undefined {\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : undefined;\n}\n\nexport function normalizeTableSelection(\n  value: GeneratorTableSelection | undefined\n): string[] {\n  if (typeof value === \"string\") {\n    return Array.from(\n      new Set(\n        value\n          .split(\",\")\n          .map(normalizeTableSelector)\n          .filter((entry): entry is string => Boolean(entry))\n      )\n    );\n  }\n\n  if (Array.isArray(value)) {\n    return Array.from(\n      new Set(\n        value\n          .map((entry) =>\n            typeof entry === \"string\"\n              ? normalizeTableSelector(entry)\n              : undefined\n          )\n          .filter((entry): entry is string => Boolean(entry))\n      )\n    );\n  }\n\n  return [];\n}\n\nfunction matchesTableSelector(\n  schemaName: string,\n  tableName: string,\n  selector: string\n): boolean {\n  const separatorIndex = selector.indexOf(\".\");\n  if (separatorIndex < 0) {\n    return tableName === selector;\n  }\n\n  const selectorSchema = selector.slice(0, separatorIndex).trim();\n  const selectorTable = selector.slice(separatorIndex + 1).trim();\n  return selectorSchema === schemaName && selectorTable === tableName;\n}\n\nfunction shouldKeepTable(\n  schemaName: string,\n  tableName: string,\n  filter: NormalizedGeneratorFilterConfig\n): boolean {\n  const included =\n    filter.includeTables.length === 0 ||\n    filter.includeTables.some((selector) =>\n      matchesTableSelector(schemaName, tableName, selector)\n    );\n  if (!included) {\n    return false;\n  }\n\n  return !filter.excludeTables.some((selector) =>\n    matchesTableSelector(schemaName, tableName, selector)\n  );\n}\n\nfunction hasTableFilters(filter: NormalizedGeneratorFilterConfig): boolean {\n  return filter.includeTables.length > 0 || filter.excludeTables.length > 0;\n}\n\nexport function filterIntrospectionSnapshot(\n  snapshot: IntrospectionSnapshot,\n  filter: NormalizedGeneratorFilterConfig\n): IntrospectionSnapshot {\n  if (!hasTableFilters(filter)) {\n    return snapshot;\n  }\n\n  const schemas: Record<string, IntrospectionSchema> = {};\n\n  for (const [schemaName, schema] of Object.entries(snapshot.schemas)) {\n    const tables = Object.fromEntries(\n      Object.entries(schema.tables).filter(([tableName]) =>\n        shouldKeepTable(schemaName, tableName, filter)\n      )\n    );\n\n    if (Object.keys(tables).length === 0) {\n      continue;\n    }\n\n    schemas[schemaName] = {\n      ...schema,\n      tables,\n    };\n  }\n\n  if (Object.keys(schemas).length === 0) {\n    const includeLabel =\n      filter.includeTables.length > 0\n        ? ` includeTables=${filter.includeTables.join(\", \")}`\n        : \"\";\n    const excludeLabel =\n      filter.excludeTables.length > 0\n        ? ` excludeTables=${filter.excludeTables.join(\", \")}`\n        : \"\";\n    throw new Error(\n      `Generator table filters matched no tables after schema selection.${includeLabel}${excludeLabel}`\n    );\n  }\n\n  return {\n    ...snapshot,\n    schemas,\n  };\n}\n","/** Default application SQL migrations directory (project-relative). */\nexport const DEFAULT_MIGRATIONS_DIRECTORY = \"athena/migrations\";\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { parseBooleanFlag } from \"../auxiliaries.ts\";\nimport { ATHENA_ENV_CLIENT_KEYS } from \"../env/index.ts\";\nimport type { BackendType } from \"../gateway/types.ts\";\nimport { normalizeSchemaSelection } from \"./schema-selection.ts\";\nimport { normalizeTableSelection } from \"./table-selection.ts\";\nimport { DEFAULT_MIGRATIONS_DIRECTORY } from \"../migrations/constants.ts\";\nimport type {\n  AthenaGeneratorConfig,\n  AthenaMigrationsConfig,\n  GeneratorArtifactWriteConfig,\n  GeneratorArtifactWritePolicy,\n  GeneratorExperimentalFlags,\n  GeneratorFeatureFlags,\n  GeneratorFilterConfig,\n  GeneratorInternalConfig,\n  GeneratorNamingConfig,\n  GeneratorOutputConfig,\n  GeneratorOutputFormat,\n  GeneratorOutputPreset,\n  GeneratorOutputTargets,\n  GeneratorProviderConfig,\n  GeneratorProviderInputConfig,\n  LoadedGeneratorConfig,\n  LoadGeneratorConfigOptions,\n  NormalizedAthenaGeneratorConfig,\n  NormalizedAthenaMigrationsConfig,\n  NormalizedGeneratorOutputConfig,\n} from \"./types.ts\";\n\nexport { DEFAULT_MIGRATIONS_DIRECTORY };\n\nconst POSTGRES_PROTOCOLS = new Set([\"postgres:\", \"postgresql:\"]);\n\nconst DEFAULT_CONFIG_CANDIDATES = [\n  \"athena.config.ts\",\n  \"athena.config.js\",\n  \"athena-js.config.ts\",\n  \"athena-js.config.js\",\n  \".athena.config.ts\",\n  \".athena.config.js\",\n];\n\n/**\n * N-1 layout (Architecture 3 / early 4-RC root `athena/*`).\n * Generator still accepts this preset; doctor warns; migrate upgrades to N.\n */\nconst LEGACY_DEFAULT_TARGETS: GeneratorOutputTargets = {\n  database: \"athena/relations.ts\",\n  model: \"athena/models/{schema_kebab}/{model_kebab}.ts\",\n  registry: \"athena/registry.generated.ts\",\n  schema: \"athena/schemas/{schema_kebab}.ts\",\n};\n\n/**\n * Architecture 4.0 canonical (N) — only under `src/lib/athena/generated/`.\n * Model home is the `models/` directory (not a single long-term file).\n */\nconst ATHENA_DIRECT_TARGETS: GeneratorOutputTargets = {\n  database: \"src/lib/athena/generated/relations.ts\",\n  model: \"src/lib/athena/generated/models/{schema_kebab}/{model_kebab}.ts\",\n  registry: \"src/lib/athena/generated/registry.ts\",\n  schema: \"src/lib/athena/generated/schema/{schema_kebab}.ts\",\n};\n\n/** Canonical generated root (Invariant D). */\nexport const ATHENA_GENERATED_ROOT = \"src/lib/athena/generated\";\n\n/** Path of generator ownership manifest relative to project cwd. */\nexport const GENERATED_MANIFEST_REL = \".athena/generated-manifest.json\";\n\nconst DEFAULT_OUTPUT_FORMAT: GeneratorOutputFormat = \"table-builder\";\nconst DEFAULT_OUTPUT_PRESET: GeneratorOutputPreset = \"athena-direct\";\nconst DEFAULT_ARTIFACT_WRITE_POLICY: GeneratorArtifactWritePolicy = \"merge\";\nconst ARTIFACT_WRITE_POLICIES = new Set<GeneratorArtifactWritePolicy>([\n  \"merge\",\n  \"skip\",\n  \"overwrite\",\n]);\n\nconst DEFAULT_NAMING: GeneratorNamingConfig = {\n  databaseConst: \"camel\",\n  modelConst: \"camel\",\n  modelType: \"pascal\",\n  registryConst: \"camel\",\n  schemaConst: \"camel\",\n};\n\nconst DEFAULT_FEATURES: GeneratorFeatureFlags = {\n  emitRegistry: true,\n  emitRelations: true,\n};\n\nconst DEFAULT_EXPERIMENTAL_FLAGS: GeneratorExperimentalFlags = {\n  postgresGatewayIntrospection: false,\n  scyllaProviderContracts: true,\n};\n\nconst DEFAULT_INTERNAL_CONFIG: GeneratorInternalConfig = {\n  schemaVersion: 1,\n};\n\nconst DEFAULT_FILTER_CONFIG = {\n  excludeTables: [],\n  includeTables: [],\n} as const;\n\nconst PROJECT_ENV_FILENAMES = [\".env\", \".env.local\"] as const;\n\nconst DIRECT_CONNECTION_STRING_ENV_KEYS = [\n  \"ATHENA_GENERATOR_PG_URL\",\n  \"DATABASE_URL\",\n  \"PG_URL\",\n  \"POSTGRES_URL\",\n  \"POSTGRESQL_URL\",\n] as const;\n\nconst POSTGRES_DATABASE_ENV_KEYS = [\n  \"ATHENA_GENERATOR_DB\",\n  \"ATHENA_DATABASE\",\n  \"PGDATABASE\",\n] as const;\n\nconst POSTGRES_PASSWORD_ENV_KEYS = [\n  \"ATHENA_GENERATOR_PG_PASSWORD\",\n  \"PGPASSWORD\",\n] as const;\n\n/**\n * Generator gateway URL keys (server/CLI only — intentionally omits NEXT_PUBLIC_*).\n * Includes createClient primary + gateway alias, plus generator-only ATHENA_GENERATOR_URL.\n */\nconst GATEWAY_URL_ENV_KEYS = [\n  \"ATHENA_URL\",\n  \"ATHENA_GATEWAY_URL\",\n  \"ATHENA_GENERATOR_URL\",\n] as const;\n\n/**\n * Generator API key keys (server/CLI only — no NEXT_PUBLIC_*, adds ATHENA_GENERATOR_API_KEY).\n */\nconst GATEWAY_API_KEY_ENV_KEYS = [\n  \"ATHENA_API_KEY\",\n  \"ATHENA_GATEWAY_API_KEY\",\n  \"ATHENA_GENERATOR_API_KEY\",\n] as const;\n\n/**\n * Registry client name for gateway introspection (`X-Athena-Client`).\n * Shared with createClient via ATHENA_ENV_CLIENT_KEYS SSOT.\n */\nconst GATEWAY_CLIENT_ENV_KEYS = ATHENA_ENV_CLIENT_KEYS;\n\nconst GENERATOR_SCHEMA_ENV_KEYS = [\"ATHENA_GENERATOR_SCHEMAS\"] as const;\nconst OUTPUT_FORMAT_ENV_KEYS = [\"ATHENA_GENERATOR_OUTPUT_FORMAT\"] as const;\nconst OUTPUT_PRESET_ENV_KEYS = [\"ATHENA_GENERATOR_OUTPUT_PRESET\"] as const;\nconst MODEL_TARGET_ENV_KEYS = [\"ATHENA_GENERATOR_MODEL_TARGET\"] as const;\nconst SCHEMA_TARGET_ENV_KEYS = [\"ATHENA_GENERATOR_SCHEMA_TARGET\"] as const;\nconst DATABASE_TARGET_ENV_KEYS = [\"ATHENA_GENERATOR_DATABASE_TARGET\"] as const;\nconst REGISTRY_TARGET_ENV_KEYS = [\"ATHENA_GENERATOR_REGISTRY_TARGET\"] as const;\nconst TABLES_ENV_KEYS = [\"ATHENA_GENERATOR_TABLES\"] as const;\nconst EXCLUDE_TABLES_ENV_KEYS = [\"ATHENA_GENERATOR_EXCLUDE_TABLES\"] as const;\nconst PLACEHOLDER_MAP_ENV_KEYS = [\"ATHENA_GENERATOR_PLACEHOLDER_MAP\"] as const;\nconst MODEL_TYPE_ENV_KEYS = [\n  \"ATHENA_GENERATOR_MODEL_TYPE\",\n  \"ATHENA_GENERATOR_MODEL_STYLE\",\n] as const;\nconst MODEL_CONST_ENV_KEYS = [\"ATHENA_GENERATOR_MODEL_CONST\"] as const;\nconst SCHEMA_CONST_ENV_KEYS = [\"ATHENA_GENERATOR_SCHEMA_CONST\"] as const;\nconst DATABASE_CONST_ENV_KEYS = [\"ATHENA_GENERATOR_DATABASE_CONST\"] as const;\nconst REGISTRY_CONST_ENV_KEYS = [\"ATHENA_GENERATOR_REGISTRY_CONST\"] as const;\nconst EMIT_RELATIONS_ENV_KEYS = [\"ATHENA_GENERATOR_EMIT_RELATIONS\"] as const;\nconst EMIT_REGISTRY_ENV_KEYS = [\"ATHENA_GENERATOR_EMIT_REGISTRY\"] as const;\nconst GATEWAY_BACKEND_ENV_KEYS = [\"ATHENA_GENERATOR_BACKEND\"] as const;\nconst GATEWAY_EXPERIMENTAL_ENV_KEYS = [\n  \"ATHENA_GENERATOR_GATEWAY_EXPERIMENTAL\",\n] as const;\nconst SCYLLA_PROVIDER_CONTRACTS_ENV_KEYS = [\n  \"ATHENA_GENERATOR_SCYLLA_PROVIDER_CONTRACTS\",\n] as const;\nconst ENV_ONLY_CONFIG_PATH = \"[environment defaults]\";\n\nconst NAMING_STYLE_VALUES = [\n  \"preserve\",\n  \"camel\",\n  \"pascal\",\n  \"snake\",\n  \"kebab\",\n] as const;\nconst OUTPUT_FORMAT_VALUES = [\"define-model\", \"table-builder\"] as const;\nconst OUTPUT_PRESET_VALUES = [\"legacy\", \"athena-direct\"] as const;\nconst BACKEND_TYPE_VALUES = [\n  \"athena\",\n  \"postgrest\",\n  \"postgresql\",\n  \"scylladb\",\n] as const;\n\nconst OUTPUT_PRESET_TARGETS: Record<\n  GeneratorOutputPreset,\n  GeneratorOutputTargets\n> = {\n  \"athena-direct\": ATHENA_DIRECT_TARGETS,\n  legacy: LEGACY_DEFAULT_TARGETS,\n};\n\nfunction normalizeRawEnvValue(rawValue: string): string {\n  if (\n    rawValue.startsWith('\"') &&\n    rawValue.endsWith('\"') &&\n    rawValue.length >= 2\n  ) {\n    const inner = rawValue.slice(1, -1);\n    return inner\n      .replace(/\\\\n/g, \"\\n\")\n      .replace(/\\\\r/g, \"\\r\")\n      .replace(/\\\\t/g, \"\\t\")\n      .replace(/\\\\\"/g, '\"')\n      .replace(/\\\\\\\\/g, \"\\\\\");\n  }\n\n  if (\n    rawValue.startsWith(\"'\") &&\n    rawValue.endsWith(\"'\") &&\n    rawValue.length >= 2\n  ) {\n    return rawValue.slice(1, -1);\n  }\n\n  const commentIndex = rawValue.search(/\\s+#/);\n  const withoutComment =\n    commentIndex >= 0 ? rawValue.slice(0, commentIndex) : rawValue;\n  return withoutComment.trim();\n}\n\nfunction parseEnvLine(line: string): [key: string, value: string] | undefined {\n  const trimmed = line.trim();\n  if (!trimmed || trimmed.startsWith(\"#\")) {\n    return undefined;\n  }\n\n  const match = trimmed.match(\n    /^(?:export\\s+)?([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(.*)$/\n  );\n  if (!match) {\n    return undefined;\n  }\n\n  const [, key, rawValue] = match;\n  return [key, normalizeRawEnvValue(rawValue.trim())];\n}\n\nfunction readProjectEnvEntries(cwd: string): Map<string, string> {\n  const nodeEnv = process.env.NODE_ENV?.trim();\n  const filenames = [\n    ...PROJECT_ENV_FILENAMES,\n    ...(nodeEnv ? [`.env.${nodeEnv}`, `.env.${nodeEnv}.local`] : []),\n  ];\n\n  const entries = new Map<string, string>();\n\n  for (const filename of filenames) {\n    const absolutePath = resolve(cwd, filename);\n    if (!existsSync(absolutePath)) {\n      continue;\n    }\n\n    const content = readFileSync(absolutePath, \"utf8\");\n    const lines = content.split(/\\r?\\n/g);\n    for (const line of lines) {\n      const parsed = parseEnvLine(line);\n      if (!parsed) {\n        continue;\n      }\n      const [key, value] = parsed;\n      entries.set(key, value);\n    }\n  }\n\n  return entries;\n}\n\nfunction applyProjectEnv(cwd: string): () => void {\n  const envEntries = readProjectEnvEntries(cwd);\n  if (envEntries.size === 0) {\n    return () => {};\n  }\n\n  const initialKeys = new Set<string>(\n    Object.keys(process.env).filter((key) => process.env[key] !== undefined)\n  );\n  const staged = new Map<string, string>();\n\n  for (const [key, value] of envEntries.entries()) {\n    if (initialKeys.has(key)) {\n      continue;\n    }\n    staged.set(key, value);\n  }\n\n  for (const [key, value] of staged.entries()) {\n    process.env[key] = value;\n  }\n\n  return () => {\n    for (const key of staged.keys()) {\n      delete process.env[key];\n    }\n  };\n}\n\nfunction readEnvStringValue(key: string): string | undefined {\n  const value = process.env[key];\n  if (typeof value !== \"string\") {\n    return undefined;\n  }\n\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction resolveFallbackValue(\n  fallbackKeys: readonly string[]\n): string | undefined {\n  for (const key of fallbackKeys) {\n    const value = readEnvStringValue(key);\n    if (value) {\n      return value;\n    }\n  }\n  return undefined;\n}\n\nfunction normalizeOneOfValue<const T extends string>(\n  rawValue: string | undefined,\n  allowedValues: readonly T[],\n  envKeys: readonly string[]\n): T | undefined {\n  if (!rawValue) {\n    return undefined;\n  }\n  if (allowedValues.includes(rawValue as T)) {\n    return rawValue as T;\n  }\n  throw new Error(\n    `Generator config env vars ${envKeys.join(\", \")} must resolve to one of: ${allowedValues.join(\", \")}. Received: ${rawValue}.`\n  );\n}\n\nfunction resolveOptionalOneOf<const T extends string>(\n  envKeys: readonly string[],\n  allowedValues: readonly T[]\n): T | undefined {\n  return normalizeOneOfValue(\n    resolveFallbackValue(envKeys),\n    allowedValues,\n    envKeys\n  );\n}\n\nfunction resolveOptionalBoolean(\n  envKeys: readonly string[]\n): boolean | undefined {\n  const rawValue = resolveFallbackValue(envKeys);\n  return rawValue === undefined ? undefined : parseBooleanFlag(rawValue, false);\n}\n\nfunction resolveOptionalJson<T>(envKeys: readonly string[]): T | undefined {\n  const rawValue = resolveFallbackValue(envKeys);\n  if (rawValue === undefined) {\n    return undefined;\n  }\n  try {\n    return JSON.parse(rawValue) as T;\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    throw new Error(\n      `Generator config env vars ${envKeys.join(\", \")} must contain valid JSON. ${message}`,\n      { cause: error }\n    );\n  }\n}\n\nfunction deriveDatabaseNameFromConnectionString(\n  connectionString: string\n): string | undefined {\n  try {\n    const parsedUrl = new URL(connectionString);\n    if (!POSTGRES_PROTOCOLS.has(parsedUrl.protocol)) {\n      return undefined;\n    }\n    const pathname = parsedUrl.pathname.replace(/^\\/+/, \"\").trim();\n    return pathname.length > 0 ? decodeURIComponent(pathname) : undefined;\n  } catch {\n    // Invalid connection string — no database name.\n  }\n  return undefined;\n}\n\nfunction normalizeOptionalString(\n  value: unknown,\n  fallbackKeys: readonly string[]\n): string | undefined {\n  if (typeof value === \"string\") {\n    const trimmed = value.trim();\n    if (trimmed.length > 0) {\n      return trimmed;\n    }\n  }\n\n  return resolveFallbackValue(fallbackKeys);\n}\n\nfunction normalizeRequiredString(\n  value: unknown,\n  fieldLabel: string,\n  fallbackKeys: readonly string[]\n): string {\n  const resolved = normalizeOptionalString(value, fallbackKeys);\n  if (resolved) {\n    return resolved;\n  }\n\n  throw new Error(\n    `Generator config is missing ${fieldLabel}. Set ${fieldLabel} directly or provide one of: ${fallbackKeys.join(\", \")}.`\n  );\n}\n\nfunction applyPostgresPasswordFallback(connectionString: string): string {\n  let parsedUrl: URL;\n  try {\n    parsedUrl = new URL(connectionString);\n  } catch {\n    return connectionString;\n  }\n\n  if (!POSTGRES_PROTOCOLS.has(parsedUrl.protocol)) {\n    return connectionString;\n  }\n\n  if (!parsedUrl.username || parsedUrl.password) {\n    return connectionString;\n  }\n\n  const fallbackPassword = resolveFallbackValue(POSTGRES_PASSWORD_ENV_KEYS);\n  if (!fallbackPassword) {\n    return connectionString;\n  }\n\n  parsedUrl.password = fallbackPassword;\n  return parsedUrl.toString();\n}\n\nfunction normalizeBooleanFlag(rawValue: unknown, fallback: boolean): boolean {\n  if (typeof rawValue === \"boolean\") {\n    return rawValue;\n  }\n  if (typeof rawValue === \"string\") {\n    return parseBooleanFlag(rawValue, fallback);\n  }\n  return fallback;\n}\n\nfunction normalizeFeatureFlags(\n  input: Partial<GeneratorFeatureFlags> | undefined\n): GeneratorFeatureFlags {\n  return {\n    emitRegistry: normalizeBooleanFlag(\n      input?.emitRegistry,\n      DEFAULT_FEATURES.emitRegistry\n    ),\n    emitRelations: normalizeBooleanFlag(\n      input?.emitRelations,\n      DEFAULT_FEATURES.emitRelations\n    ),\n  };\n}\n\nfunction normalizeExperimentalFlags(\n  input: Partial<GeneratorExperimentalFlags> | undefined\n): GeneratorExperimentalFlags {\n  return {\n    postgresGatewayIntrospection: normalizeBooleanFlag(\n      input?.postgresGatewayIntrospection,\n      DEFAULT_EXPERIMENTAL_FLAGS.postgresGatewayIntrospection\n    ),\n    scyllaProviderContracts: normalizeBooleanFlag(\n      input?.scyllaProviderContracts,\n      DEFAULT_EXPERIMENTAL_FLAGS.scyllaProviderContracts\n    ),\n  };\n}\n\nfunction normalizeFilterConfig(input: GeneratorFilterConfig | undefined) {\n  return {\n    excludeTables: normalizeTableSelection(input?.excludeTables),\n    includeTables: normalizeTableSelection(input?.includeTables),\n  };\n}\n\nfunction normalizeArtifactWritePolicy(\n  value: unknown,\n  fieldName: string\n): GeneratorArtifactWritePolicy {\n  if (value === undefined || value === null || value === \"\") {\n    return DEFAULT_ARTIFACT_WRITE_POLICY;\n  }\n  if (\n    typeof value === \"string\" &&\n    ARTIFACT_WRITE_POLICIES.has(value as GeneratorArtifactWritePolicy)\n  ) {\n    return value as GeneratorArtifactWritePolicy;\n  }\n  throw new Error(\n    `Invalid output.artifactWrite.${fieldName}: expected one of merge | skip | overwrite, received ${JSON.stringify(value)}.`\n  );\n}\n\nfunction normalizeArtifactWriteConfig(\n  input: GeneratorArtifactWriteConfig | undefined\n): NormalizedGeneratorOutputConfig[\"artifactWrite\"] {\n  return {\n    database: normalizeArtifactWritePolicy(input?.database, \"database\"),\n    registry: normalizeArtifactWritePolicy(input?.registry, \"registry\"),\n  };\n}\n\nfunction normalizeOutputConfig(\n  output: GeneratorOutputConfig | undefined\n): NormalizedGeneratorOutputConfig {\n  const preset = output?.preset ?? DEFAULT_OUTPUT_PRESET;\n  return {\n    artifactWrite: normalizeArtifactWriteConfig(output?.artifactWrite),\n    format: output?.format ?? DEFAULT_OUTPUT_FORMAT,\n    placeholderMap: {\n      ...(output?.placeholderMap ?? {}),\n    },\n    preset,\n    targets: {\n      ...OUTPUT_PRESET_TARGETS[preset],\n      ...(output?.targets ?? {}),\n    },\n  };\n}\n\nfunction normalizeProviderConfig(\n  provider: GeneratorProviderInputConfig\n): GeneratorProviderConfig {\n  if (provider.kind === \"postgres\" && provider.mode === \"direct\") {\n    const connectionString = normalizeRequiredString(\n      provider.connectionString,\n      \"provider.connectionString\",\n      DIRECT_CONNECTION_STRING_ENV_KEYS\n    );\n    const database =\n      normalizeOptionalString(provider.database, POSTGRES_DATABASE_ENV_KEYS) ??\n      deriveDatabaseNameFromConnectionString(connectionString);\n\n    return {\n      ...provider,\n      connectionString: applyPostgresPasswordFallback(connectionString),\n      database,\n      schemas: normalizeSchemaSelection(provider.schemas),\n    };\n  }\n\n  if (provider.kind === \"postgres\" && provider.mode === \"gateway\") {\n    const gatewayUrl = normalizeRequiredString(\n      provider.gatewayUrl,\n      \"provider.gatewayUrl\",\n      GATEWAY_URL_ENV_KEYS\n    );\n    const apiKey = normalizeRequiredString(\n      provider.apiKey,\n      \"provider.apiKey\",\n      GATEWAY_API_KEY_ENV_KEYS\n    );\n    const database =\n      normalizeOptionalString(provider.database, POSTGRES_DATABASE_ENV_KEYS) ??\n      \"postgres\";\n    const client = normalizeOptionalString(\n      provider.client,\n      GATEWAY_CLIENT_ENV_KEYS\n    );\n\n    return {\n      ...provider,\n      apiKey,\n      database,\n      gatewayUrl,\n      ...(client ? { client } : {}),\n      schemas: normalizeSchemaSelection(provider.schemas),\n    };\n  }\n\n  if (provider.kind === \"scylla\" && provider.mode === \"direct\") {\n    if (!provider.contactPoints?.length) {\n      throw new Error(\n        \"Generator config is missing provider.contactPoints for scylla direct mode.\"\n      );\n    }\n    const keyspace = normalizeOptionalString(provider.keyspace, []);\n    if (!keyspace) {\n      throw new Error(\n        \"Generator config is missing provider.keyspace for scylla direct mode.\"\n      );\n    }\n\n    return {\n      contactPoints: provider.contactPoints.slice(),\n      datacenter: normalizeOptionalString(provider.datacenter, []),\n      keyspace,\n      kind: \"scylla\",\n      mode: \"direct\",\n    };\n  }\n\n  return provider;\n}\n\nfunction isAthenaGeneratorConfig(\n  value: unknown\n): value is AthenaGeneratorConfig {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n  const record = value as Record<string, unknown>;\n  return (\n    Boolean(record.provider && typeof record.provider === \"object\") &&\n    (record.output === undefined || typeof record.output === \"object\")\n  );\n}\n\nfunction normalizeMigrationsConfig(\n  input: AthenaMigrationsConfig | undefined\n): NormalizedAthenaMigrationsConfig {\n  const directory =\n    typeof input?.directory === \"string\" && input.directory.trim().length > 0\n      ? input.directory.trim()\n      : DEFAULT_MIGRATIONS_DIRECTORY;\n  return { directory };\n}\n\nexport function normalizeGeneratorConfig(\n  input: AthenaGeneratorConfig\n): NormalizedAthenaGeneratorConfig {\n  return {\n    experimental: normalizeExperimentalFlags(input.experimental),\n    features: normalizeFeatureFlags(input.features),\n    filter: {\n      ...DEFAULT_FILTER_CONFIG,\n      ...normalizeFilterConfig(input.filter),\n    },\n    internal: {\n      ...DEFAULT_INTERNAL_CONFIG,\n    },\n    migrations: normalizeMigrationsConfig(input.migrations),\n    naming: {\n      ...DEFAULT_NAMING,\n      ...(input.naming ?? {}),\n    },\n    output: normalizeOutputConfig(input.output),\n    provider: normalizeProviderConfig(input.provider),\n  };\n}\n\n/**\n * Typed identity helper for authoring Athena project / generator configs.\n * Preferred name for Architecture 4.0 (`defineGeneratorConfig` remains an alias).\n */\nexport function defineAthenaConfig<TConfig extends AthenaGeneratorConfig>(\n  config: TConfig\n): TConfig {\n  return config;\n}\n\n/**\n * @deprecated Prefer {@link defineAthenaConfig}. Alias retained through 5.0 (AD-003).\n */\nexport const defineGeneratorConfig = defineAthenaConfig;\n\n/**\n * Finds a supported generator config filename in the provided directory.\n */\nexport function findGeneratorConfigPath(\n  cwd: string = process.cwd()\n): string | undefined {\n  for (const candidate of DEFAULT_CONFIG_CANDIDATES) {\n    const absolutePath = resolve(cwd, candidate);\n    if (existsSync(absolutePath)) {\n      return absolutePath;\n    }\n  }\n  return undefined;\n}\n\nfunction extractConfigExport(module: unknown): AthenaGeneratorConfig {\n  const visited = new Set<unknown>();\n  const queue: unknown[] = [module];\n\n  while (queue.length > 0) {\n    const current = queue.shift();\n    if (!current || typeof current !== \"object\" || visited.has(current)) {\n      continue;\n    }\n    visited.add(current);\n\n    const record = current as Record<string, unknown>;\n    if (isAthenaGeneratorConfig(record)) {\n      return record;\n    }\n\n    const defaultExport = record.default;\n    if (defaultExport && typeof defaultExport === \"object\") {\n      queue.push(defaultExport);\n    }\n\n    const namedConfigExport = record.config;\n    if (namedConfigExport && typeof namedConfigExport === \"object\") {\n      queue.push(namedConfigExport);\n    }\n\n    const moduleExports = record[\"module.exports\"];\n    if (moduleExports && typeof moduleExports === \"object\") {\n      queue.push(moduleExports);\n    }\n\n    for (const value of Object.values(record)) {\n      if (value && typeof value === \"object\") {\n        queue.push(value);\n      }\n    }\n  }\n\n  throw new Error(\n    \"Generator config file must export a config object as default export or `config`.\"\n  );\n}\n\nfunction importConfigModule(moduleSpecifier: string): Promise<unknown> {\n  // Keep this as an indirect import so bundlers do not try to statically resolve\n  // runtime file-system config paths when athena-js is consumed in Next.js.\n  const runtimeImport = new Function(\n    \"moduleSpecifier\",\n    \"return import(moduleSpecifier)\"\n  ) as (moduleSpecifier: string) => Promise<unknown>;\n  return runtimeImport(moduleSpecifier);\n}\n\nfunction buildEnvironmentOutputConfig(): GeneratorOutputConfig | undefined {\n  const format = resolveOptionalOneOf(\n    OUTPUT_FORMAT_ENV_KEYS,\n    OUTPUT_FORMAT_VALUES\n  );\n  const preset = resolveOptionalOneOf(\n    OUTPUT_PRESET_ENV_KEYS,\n    OUTPUT_PRESET_VALUES\n  );\n  const modelTarget = resolveFallbackValue(MODEL_TARGET_ENV_KEYS);\n  const schemaTarget = resolveFallbackValue(SCHEMA_TARGET_ENV_KEYS);\n  const databaseTarget = resolveFallbackValue(DATABASE_TARGET_ENV_KEYS);\n  const registryTarget = resolveFallbackValue(REGISTRY_TARGET_ENV_KEYS);\n  const placeholderMap = resolveOptionalJson<Record<string, string>>(\n    PLACEHOLDER_MAP_ENV_KEYS\n  );\n\n  if (\n    format === undefined &&\n    preset === undefined &&\n    modelTarget === undefined &&\n    schemaTarget === undefined &&\n    databaseTarget === undefined &&\n    registryTarget === undefined &&\n    placeholderMap === undefined\n  ) {\n    return undefined;\n  }\n\n  return {\n    format,\n    placeholderMap,\n    preset,\n    targets: {\n      ...(modelTarget ? { model: modelTarget } : {}),\n      ...(schemaTarget ? { schema: schemaTarget } : {}),\n      ...(databaseTarget ? { database: databaseTarget } : {}),\n      ...(registryTarget ? { registry: registryTarget } : {}),\n    },\n  };\n}\n\nfunction buildEnvironmentFilterConfig(): GeneratorFilterConfig | undefined {\n  const includeTables = resolveFallbackValue(TABLES_ENV_KEYS);\n  const excludeTables = resolveFallbackValue(EXCLUDE_TABLES_ENV_KEYS);\n\n  if (includeTables === undefined && excludeTables === undefined) {\n    return undefined;\n  }\n\n  return {\n    ...(includeTables === undefined ? {} : { includeTables }),\n    ...(excludeTables === undefined ? {} : { excludeTables }),\n  };\n}\n\nfunction buildEnvironmentNamingConfig():\n  | Partial<GeneratorNamingConfig>\n  | undefined {\n  const modelType = resolveOptionalOneOf(\n    MODEL_TYPE_ENV_KEYS,\n    NAMING_STYLE_VALUES\n  );\n  const modelConst = resolveOptionalOneOf(\n    MODEL_CONST_ENV_KEYS,\n    NAMING_STYLE_VALUES\n  );\n  const schemaConst = resolveOptionalOneOf(\n    SCHEMA_CONST_ENV_KEYS,\n    NAMING_STYLE_VALUES\n  );\n  const databaseConst = resolveOptionalOneOf(\n    DATABASE_CONST_ENV_KEYS,\n    NAMING_STYLE_VALUES\n  );\n  const registryConst = resolveOptionalOneOf(\n    REGISTRY_CONST_ENV_KEYS,\n    NAMING_STYLE_VALUES\n  );\n\n  if (\n    modelType === undefined &&\n    modelConst === undefined &&\n    schemaConst === undefined &&\n    databaseConst === undefined &&\n    registryConst === undefined\n  ) {\n    return undefined;\n  }\n\n  return {\n    ...(modelType ? { modelType } : {}),\n    ...(modelConst ? { modelConst } : {}),\n    ...(schemaConst ? { schemaConst } : {}),\n    ...(databaseConst ? { databaseConst } : {}),\n    ...(registryConst ? { registryConst } : {}),\n  };\n}\n\nfunction buildEnvironmentFeatureFlags():\n  | Partial<GeneratorFeatureFlags>\n  | undefined {\n  const emitRelations = resolveOptionalBoolean(EMIT_RELATIONS_ENV_KEYS);\n  const emitRegistry = resolveOptionalBoolean(EMIT_REGISTRY_ENV_KEYS);\n\n  if (emitRelations === undefined && emitRegistry === undefined) {\n    return undefined;\n  }\n\n  return {\n    ...(emitRelations === undefined ? {} : { emitRelations }),\n    ...(emitRegistry === undefined ? {} : { emitRegistry }),\n  };\n}\n\nfunction buildEnvironmentExperimentalFlags():\n  | Partial<GeneratorExperimentalFlags>\n  | undefined {\n  const postgresGatewayIntrospection = resolveOptionalBoolean(\n    GATEWAY_EXPERIMENTAL_ENV_KEYS\n  );\n  const scyllaProviderContracts = resolveOptionalBoolean(\n    SCYLLA_PROVIDER_CONTRACTS_ENV_KEYS\n  );\n\n  if (\n    postgresGatewayIntrospection === undefined &&\n    scyllaProviderContracts === undefined\n  ) {\n    return undefined;\n  }\n\n  return {\n    ...(postgresGatewayIntrospection === undefined\n      ? {}\n      : { postgresGatewayIntrospection }),\n    ...(scyllaProviderContracts === undefined\n      ? {}\n      : { scyllaProviderContracts }),\n  };\n}\n\nfunction buildEnvironmentProviderConfig():\n  | GeneratorProviderInputConfig\n  | undefined {\n  const directConnectionString = resolveFallbackValue(\n    DIRECT_CONNECTION_STRING_ENV_KEYS\n  );\n  if (directConnectionString) {\n    return {\n      connectionString: directConnectionString,\n      database: normalizeOptionalString(undefined, POSTGRES_DATABASE_ENV_KEYS),\n      kind: \"postgres\",\n      mode: \"direct\",\n      schemas: normalizeSchemaSelection(\n        resolveFallbackValue(GENERATOR_SCHEMA_ENV_KEYS)\n      ),\n    };\n  }\n\n  const gatewayUrl = resolveFallbackValue(GATEWAY_URL_ENV_KEYS);\n  const apiKey = resolveFallbackValue(GATEWAY_API_KEY_ENV_KEYS);\n  if (gatewayUrl && apiKey) {\n    const backend = resolveOptionalOneOf(\n      GATEWAY_BACKEND_ENV_KEYS,\n      BACKEND_TYPE_VALUES\n    ) as BackendType | undefined;\n    const client = resolveFallbackValue(GATEWAY_CLIENT_ENV_KEYS);\n    return {\n      apiKey,\n      backend,\n      database: normalizeOptionalString(undefined, POSTGRES_DATABASE_ENV_KEYS),\n      gatewayUrl,\n      kind: \"postgres\",\n      mode: \"gateway\",\n      schemas: normalizeSchemaSelection(\n        resolveFallbackValue(GENERATOR_SCHEMA_ENV_KEYS)\n      ),\n      ...(client ? { client } : {}),\n    };\n  }\n  return undefined;\n}\n\nfunction createEnvironmentGeneratorConfig(): AthenaGeneratorConfig | undefined {\n  const provider = buildEnvironmentProviderConfig();\n  if (!provider) {\n    return undefined;\n  }\n\n  return {\n    experimental: buildEnvironmentExperimentalFlags(),\n    features: buildEnvironmentFeatureFlags(),\n    filter: buildEnvironmentFilterConfig(),\n    naming: buildEnvironmentNamingConfig(),\n    output: buildEnvironmentOutputConfig(),\n    provider,\n  };\n}\n\n/**\n * Loads and normalizes `athena.config.*` from disk.\n */\nexport async function loadGeneratorConfig(\n  options: LoadGeneratorConfigOptions = {}\n): Promise<LoadedGeneratorConfig> {\n  const cwd = options.cwd ?? process.cwd();\n  const restoreProjectEnv = applyProjectEnv(cwd);\n  try {\n    const resolvedPath = options.configPath\n      ? resolve(cwd, options.configPath)\n      : findGeneratorConfigPath(cwd);\n\n    if (!resolvedPath) {\n      const environmentConfig = createEnvironmentGeneratorConfig();\n      if (environmentConfig) {\n        return {\n          config: normalizeGeneratorConfig(environmentConfig),\n          configPath: ENV_ONLY_CONFIG_PATH,\n        };\n      }\n      throw new Error(\n        `No generator config found in ${cwd}. Expected one of: ${DEFAULT_CONFIG_CANDIDATES.join(\", \")}. To run without a config file, set DATABASE_URL (direct mode) or ATHENA_URL + ATHENA_API_KEY (gateway mode).`\n      );\n    }\n\n    const moduleUrl = pathToFileURL(resolvedPath);\n    const module = await importConfigModule(\n      `${moduleUrl.href}?cacheBust=${Date.now()}`\n    );\n    const rawConfig = extractConfigExport(module);\n\n    return {\n      config: normalizeGeneratorConfig(rawConfig),\n      configPath: resolvedPath,\n    };\n  } finally {\n    restoreProjectEnv();\n  }\n}\n","import { AthenaGatewayError } from \"./errors.ts\";\n\nexport const ATHENA_DEFAULT_BASE_URL = \"https://mirror2.athena-cluster.com\";\n\nfunction describeReceivedValue(value: unknown): string {\n  if (value === undefined) {\n    return \"undefined\";\n  }\n  if (value === null) {\n    return \"null\";\n  }\n  if (typeof value === \"string\") {\n    return value.trim().length > 0 ? JSON.stringify(value) : \"an empty string\";\n  }\n  return `${typeof value} ${JSON.stringify(value)}`;\n}\n\nfunction invalidBaseUrlError(\n  message: string,\n  hint: string,\n  cause?: unknown\n): AthenaGatewayError {\n  return new AthenaGatewayError({\n    cause:\n      cause instanceof Error\n        ? cause.message\n        : cause === undefined || cause === null\n          ? undefined\n          : String(cause),\n    code: \"INVALID_URL\",\n    errorCause: cause,\n    hint,\n    message,\n    status: 0,\n  });\n}\n\nexport interface NormalizeAthenaGatewayBaseUrlOptions {\n  defaultBaseUrl?: string;\n  label?: string;\n}\n\nexport function normalizeAthenaGatewayBaseUrl(\n  input: string | null | undefined,\n  options: NormalizeAthenaGatewayBaseUrlOptions = {}\n): string {\n  const label = options.label ?? \"Athena gateway base URL\";\n  const candidate = input ?? options.defaultBaseUrl;\n\n  if (candidate === undefined || candidate === null) {\n    throw invalidBaseUrlError(\n      `${label} must be a non-empty absolute http(s) URL. Received ${describeReceivedValue(input)}.`,\n      'Set ATHENA_URL in the explicit env object (or pass createClient({ url, key })) to a full URL such as \"https://mirror2.athena-cluster.com\".'\n    );\n  }\n\n  const trimmed = candidate.trim();\n  if (!trimmed) {\n    throw invalidBaseUrlError(\n      `${label} must be a non-empty absolute http(s) URL. Received ${describeReceivedValue(candidate)}.`,\n      'Set ATHENA_URL in the explicit env object (or pass createClient({ url, key })) to a full URL such as \"https://mirror2.athena-cluster.com\".'\n    );\n  }\n\n  let parsed: URL;\n  try {\n    parsed = new URL(trimmed);\n  } catch (error) {\n    throw invalidBaseUrlError(\n      `${label} must be a valid absolute http(s) URL. Received ${describeReceivedValue(candidate)}.`,\n      'Use a full URL including the protocol, for example \"https://mirror2.athena-cluster.com\".',\n      error\n    );\n  }\n\n  if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n    throw invalidBaseUrlError(\n      `${label} must use http or https. Received ${JSON.stringify(trimmed)}.`,\n      'Use an Athena gateway URL such as \"https://mirror2.athena-cluster.com\".'\n    );\n  }\n\n  if (parsed.search || parsed.hash) {\n    throw invalidBaseUrlError(\n      `${label} must not include query parameters or hash fragments. Received ${JSON.stringify(trimmed)}.`,\n      'Pass only the base URL. Endpoint paths such as \"/gateway/fetch\" are appended by the SDK.'\n    );\n  }\n\n  return parsed.toString().replace(/\\/+$/, \"\");\n}\n\nexport function buildAthenaGatewayUrl(baseUrl: string, path: string): string {\n  if (!path.startsWith(\"/\")) {\n    throw invalidBaseUrlError(\n      `Athena gateway path must start with \"/\". Received ${JSON.stringify(path)}.`,\n      'Use a leading slash such as \"/gateway/fetch\" or \"/\".'\n    );\n  }\n\n  return `${baseUrl}${path}`;\n}\n","{\n  \"author\": \"floris@xylex.group\",\n  \"bin\": {\n    \"athena-js\": \"bin/athena-js.js\"\n  },\n  \"dependencies\": {\n    \"blessed\": \"^0.1.81\",\n    \"chalk\": \"^4.1.2\",\n    \"cron-parser\": \"^4.9.0\",\n    \"jose\": \"^6.2.3\",\n    \"pg\": \"^8.16.0\",\n    \"server-only\": \"^0.0.1\",\n    \"use-sync-external-store\": \"^1.5.0\",\n    \"zod\": \"^4.0.1\"\n  },\n  \"description\": \"Athena JS SDK\",\n  \"devDependencies\": {\n    \"@biomejs/biome\": \"^2.5.4\",\n    \"@react-email/components\": \"^1.0.12\",\n    \"@react-email/render\": \"^2.0.8\",\n    \"@types/blessed\": \"^0.1.25\",\n    \"@types/node\": \"^20.19.43\",\n    \"@types/pg\": \"^8.15.1\",\n    \"@types/react\": \"^18.3.12\",\n    \"@types/react-test-renderer\": \"^18.3.1\",\n    \"@typescript-eslint/eslint-plugin\": \"^8.57.0\",\n    \"@typescript-eslint/parser\": \"^8.57.0\",\n    \"eslint\": \"^8.57.1\",\n    \"express\": \"^4.22.2\",\n    \"react\": \"^18.3.1\",\n    \"react-dom\": \"^18.3.1\",\n    \"react-test-renderer\": \"^18.3.1\",\n    \"tsup\": \"^8.5.1\",\n    \"tsx\": \"^4.7.0\",\n    \"typescript\": \"^5.3.3\",\n    \"ultracite\": \"^7.9.4\"\n  },\n  \"engines\": {\n    \"node\": \">=18.0.0\"\n  },\n  \"exports\": {\n    \".\": {\n      \"browser\": {\n        \"types\": \"./dist/browser.d.ts\",\n        \"import\": \"./dist/browser.js\",\n        \"require\": \"./dist/browser.cjs\",\n        \"default\": \"./dist/browser.js\"\n      },\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.js\",\n      \"require\": \"./dist/index.cjs\",\n      \"default\": \"./dist/index.js\"\n    },\n    \"./admin\": {\n      \"types\": \"./dist/admin.d.ts\",\n      \"import\": \"./dist/admin.js\",\n      \"require\": \"./dist/admin.cjs\",\n      \"default\": \"./dist/admin.js\"\n    },\n    \"./billing\": {\n      \"types\": \"./dist/billing.d.ts\",\n      \"import\": \"./dist/billing.js\",\n      \"require\": \"./dist/billing.cjs\",\n      \"default\": \"./dist/billing.js\"\n    },\n    \"./browser\": {\n      \"types\": \"./dist/browser.d.ts\",\n      \"import\": \"./dist/browser.js\",\n      \"require\": \"./dist/browser.cjs\",\n      \"default\": \"./dist/browser.js\"\n    },\n    \"./cloudflare\": {\n      \"types\": \"./dist/cloudflare.d.ts\",\n      \"import\": \"./dist/cloudflare.js\",\n      \"require\": \"./dist/cloudflare.cjs\",\n      \"default\": \"./dist/cloudflare.js\"\n    },\n    \"./contracts\": {\n      \"types\": \"./dist/contracts.d.ts\",\n      \"import\": \"./dist/contracts.js\",\n      \"require\": \"./dist/contracts.cjs\",\n      \"default\": \"./dist/contracts.js\"\n    },\n    \"./contracts/v1\": {\n      \"types\": \"./dist/contracts/v1.d.ts\",\n      \"import\": \"./dist/contracts/v1.js\",\n      \"require\": \"./dist/contracts/v1.cjs\",\n      \"default\": \"./dist/contracts/v1.js\"\n    },\n    \"./cookies\": {\n      \"types\": \"./dist/cookies.d.ts\",\n      \"import\": \"./dist/cookies.js\",\n      \"require\": \"./dist/cookies.cjs\",\n      \"default\": \"./dist/cookies.js\"\n    },\n    \"./env\": {\n      \"types\": \"./dist/env.d.ts\",\n      \"import\": \"./dist/env.js\",\n      \"require\": \"./dist/env.cjs\",\n      \"default\": \"./dist/env.js\"\n    },\n    \"./next/client\": {\n      \"types\": \"./dist/next/client.d.ts\",\n      \"import\": \"./dist/next/client.js\",\n      \"require\": \"./dist/next/client.cjs\",\n      \"default\": \"./dist/next/client.js\"\n    },\n    \"./next/server\": {\n      \"types\": \"./dist/next/server.d.ts\",\n      \"import\": \"./dist/next/server.js\",\n      \"require\": \"./dist/next/server.cjs\",\n      \"default\": \"./dist/next/server.js\"\n    },\n    \"./organization\": {\n      \"types\": \"./dist/organization.d.ts\",\n      \"import\": \"./dist/organization.js\",\n      \"require\": \"./dist/organization.cjs\",\n      \"default\": \"./dist/organization.js\"\n    },\n    \"./package.json\": \"./package.json\",\n    \"./react\": {\n      \"types\": \"./dist/react.d.ts\",\n      \"import\": \"./dist/react.js\",\n      \"require\": \"./dist/react.cjs\",\n      \"default\": \"./dist/react.js\"\n    },\n    \"./react-native\": {\n      \"types\": \"./dist/react-native.d.ts\",\n      \"import\": \"./dist/react-native.js\",\n      \"require\": \"./dist/react-native.cjs\",\n      \"default\": \"./dist/react-native.js\"\n    },\n    \"./social-providers\": {\n      \"types\": \"./dist/social-providers.d.ts\",\n      \"import\": \"./dist/social-providers.js\",\n      \"require\": \"./dist/social-providers.cjs\",\n      \"default\": \"./dist/social-providers.js\"\n    },\n    \"./utils\": {\n      \"types\": \"./dist/utils.d.ts\",\n      \"import\": \"./dist/utils.js\",\n      \"require\": \"./dist/utils.cjs\",\n      \"default\": \"./dist/utils.js\"\n    },\n    \"./migrations\": {\n      \"types\": \"./dist/migrations.d.ts\",\n      \"import\": \"./dist/migrations.js\",\n      \"require\": \"./dist/migrations.cjs\",\n      \"default\": \"./dist/migrations.js\"\n    }\n  },\n  \"files\": [\n    \"dist\",\n    \"bin\",\n    \"README.md\",\n    \"LICENSE\"\n  ],\n  \"keywords\": [\n    \"database\",\n    \"driver\",\n    \"api-gateway\",\n    \"sdk\",\n    \"react\",\n    \"hooks\",\n    \"http\",\n    \"postgres\",\n    \"query-builder\"\n  ],\n  \"license\": \"MIT\",\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.js\",\n  \"name\": \"@xylex-group/athena\",\n  \"peerDependencies\": {\n    \"@react-email/components\": \">=1.0.0\",\n    \"@react-email/render\": \">=2.0.0\",\n    \"react\": \">=17.0.0\"\n  },\n  \"peerDependenciesMeta\": {\n    \"@react-email/components\": {\n      \"optional\": true\n    },\n    \"@react-email/render\": {\n      \"optional\": true\n    },\n    \"react\": {\n      \"optional\": true\n    }\n  },\n  \"publisher\": \"XYLEX Group\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/xylex-group/athena-js.git\"\n  },\n  \"scripts\": {\n    \"build\": \"tsup\",\n    \"check\": \"ultracite check\",\n    \"check:all\": \"pnpm lint && pnpm typecheck && pnpm test && pnpm build\",\n    \"dev\": \"tsup --watch\",\n    \"docs:methods\": \"node scripts/generate-sdk-method-reference.mjs\",\n    \"docs:site:check\": \"pnpm --dir ../../apps/docs docs:sync-athena-js:check\",\n    \"docs:site:sync\": \"pnpm --dir ../../apps/docs docs:sync-athena-js\",\n    \"example:admin\": \"tsx examples/node/admin-permission.ts\",\n    \"example:auth-session\": \"tsx examples/node/auth-session.ts\",\n    \"example:billing\": \"tsx examples/node/billing.ts\",\n    \"example:cloudflare\": \"pnpm typecheck:examples\",\n    \"example:env\": \"tsx examples/node/env.ts\",\n    \"example:node\": \"tsx examples/node/create-client.ts\",\n    \"example:session\": \"tsc -p examples/session/tsconfig.json\",\n    \"example:storage\": \"tsx examples/node/storage.ts\",\n    \"fix\": \"ultracite fix\",\n    \"format\": \"ultracite fix\",\n    \"lint\": \"eslint \\\"src/**/*.ts\\\" \\\"test/**/*.ts\\\"\",\n    \"lint:fix\": \"pnpm lint -- --fix\",\n    \"prepublishOnly\": \"pnpm typecheck && pnpm build\",\n    \"publish:token\": \"node scripts/publish.js\",\n    \"test\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/*.test.ts test/sdd/**/*.test.ts\",\n    \"test:react-native\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/react-native-adapter.test.ts\",\n    \"audit:rn\": \"node scripts/audit-rn-bundle-safety.mjs\",\n    \"test:integration:postgres\": \"node scripts/run-postgres-introspection-test.mjs\",\n    \"test:sdd\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/sdd/**/*.test.ts\",\n    \"test:watch\": \"node --import ./test/register-server-only.mjs --import tsx --test --watch test/*.test.ts test/sdd/**/*.test.ts\",\n    \"typecheck\": \"tsc -p tsconfig.typecheck.json\",\n    \"typecheck:examples\": \"tsc -p examples/cloudflare/tsconfig.json && tsc -p examples/node/tsconfig.json && tsc -p examples/session/tsconfig.json\",\n    \"typecheck:tests\": \"tsc -p tsconfig.full.json --noEmit\",\n    \"typecheck:all\": \"pnpm typecheck && pnpm typecheck:examples && pnpm typecheck:tests\",\n    \"test:migrations\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/migrations*.test.ts test/cli-migrate.test.ts\"\n  },\n  \"sideEffects\": false,\n  \"type\": \"module\",\n  \"types\": \"./dist/index.d.ts\",\n  \"typesVersions\": {\n    \"*\": {\n      \"*\": [\n        \"dist/index.d.ts\"\n      ],\n      \"admin\": [\n        \"dist/admin.d.ts\"\n      ],\n      \"billing\": [\n        \"dist/billing.d.ts\"\n      ],\n      \"browser\": [\n        \"dist/browser.d.ts\"\n      ],\n      \"cloudflare\": [\n        \"dist/cloudflare.d.ts\"\n      ],\n      \"contracts\": [\n        \"dist/contracts.d.ts\"\n      ],\n      \"contracts/v1\": [\n        \"dist/contracts/v1.d.ts\"\n      ],\n      \"cookies\": [\n        \"dist/cookies.d.ts\"\n      ],\n      \"env\": [\n        \"dist/env.d.ts\"\n      ],\n      \"next/client\": [\n        \"dist/next/client.d.ts\"\n      ],\n      \"next/server\": [\n        \"dist/next/server.d.ts\"\n      ],\n      \"organization\": [\n        \"dist/organization.d.ts\"\n      ],\n      \"react\": [\n        \"dist/react.d.ts\"\n      ],\n      \"react-native\": [\n        \"dist/react-native.d.ts\"\n      ],\n      \"social-providers\": [\n        \"dist/social-providers.d.ts\"\n      ],\n      \"utils\": [\n        \"dist/utils.d.ts\"\n      ],\n      \"migrations\": [\n        \"dist/migrations.d.ts\"\n      ]\n    }\n  },\n  \"version\": \"4.2.0\",\n  \"packageManager\": \"pnpm@9.15.0\"\n}","import packageJson from \"../package.json\" with { type: \"json\" };\n\nexport const PACKAGE_VERSION = packageJson.version;\n\nexport function buildSdkHeaderValue(sdkName: string): string {\n  return `${sdkName} ${PACKAGE_VERSION}`;\n}\n","import type { AthenaCookieOptions } from \"./types.ts\";\n\nfunction tryDecode(str: string): string {\n  if (str.indexOf(\"%\") === -1) {\n    return str;\n  }\n  try {\n    return decodeURIComponent(str);\n  } catch {\n    return str;\n  }\n}\n\nexport interface CookieAttributes {\n  domain?: string;\n  expires?: Date;\n  httponly?: boolean;\n  \"max-age\"?: number;\n  partitioned?: boolean;\n  path?: string;\n  samesite?: \"strict\" | \"lax\" | \"none\";\n  secure?: boolean;\n  value: string;\n  [key: string]: unknown;\n}\n\nexport const SECURE_COOKIE_PREFIX = \"__Secure-\";\nexport const HOST_COOKIE_PREFIX = \"__Host-\";\n\n/**\n * Remove __Secure- or __Host- prefix from cookie name.\n */\nexport function stripSecureCookiePrefix(cookieName: string): string {\n  if (cookieName.startsWith(SECURE_COOKIE_PREFIX)) {\n    return cookieName.slice(SECURE_COOKIE_PREFIX.length);\n  }\n  if (cookieName.startsWith(HOST_COOKIE_PREFIX)) {\n    return cookieName.slice(HOST_COOKIE_PREFIX.length);\n  }\n  return cookieName;\n}\n\n/**\n * Split a comma-joined `Set-Cookie` header string into individual cookies.\n */\nexport function splitSetCookieHeader(setCookie: string): string[] {\n  if (!setCookie) {\n    return [];\n  }\n\n  const result: string[] = [];\n  let start = 0;\n  let i = 0;\n\n  while (i < setCookie.length) {\n    if (setCookie[i] === \",\") {\n      let j = i + 1;\n      while (j < setCookie.length && setCookie[j] === \" \") {\n        j++;\n      }\n      while (\n        j < setCookie.length &&\n        setCookie[j] !== \"=\" &&\n        setCookie[j] !== \";\" &&\n        setCookie[j] !== \",\"\n      ) {\n        j++;\n      }\n\n      if (j < setCookie.length && setCookie[j] === \"=\") {\n        const part = setCookie.slice(start, i).trim();\n        if (part) {\n          result.push(part);\n        }\n        start = i + 1;\n        while (start < setCookie.length && setCookie[start] === \" \") {\n          start++;\n        }\n        i = start;\n        continue;\n      }\n    }\n    i++;\n  }\n\n  const last = setCookie.slice(start).trim();\n  if (last) {\n    result.push(last);\n  }\n\n  return result;\n}\n\nexport function parseSetCookieHeader(\n  setCookie: string\n): Map<string, CookieAttributes> {\n  const cookies = new Map<string, CookieAttributes>();\n  const cookieArray = splitSetCookieHeader(setCookie);\n\n  for (const cookieString of cookieArray) {\n    const parts = cookieString.split(\";\").map((part) => part.trim());\n    const [nameValue, ...attributes] = parts;\n    const [name, ...valueParts] = (nameValue || \"\").split(\"=\");\n    if (!name) {\n      continue;\n    }\n\n    const value = unquoteCookieValue(valueParts.join(\"=\"));\n    const decodedValue = tryDecode(value);\n    const attrObj: CookieAttributes = { value: decodedValue };\n\n    for (const attribute of attributes) {\n      const [attrName, ...attrValueParts] = attribute.split(\"=\");\n      const attrValue = attrValueParts.join(\"=\");\n      const normalizedAttrName = attrName.trim().toLowerCase();\n      switch (normalizedAttrName) {\n        case \"max-age\":\n          attrObj[\"max-age\"] = attrValue\n            ? Number.parseInt(attrValue.trim(), 10)\n            : undefined;\n          break;\n        case \"expires\":\n          attrObj.expires = attrValue ? new Date(attrValue.trim()) : undefined;\n          break;\n        case \"domain\":\n          attrObj.domain = attrValue ? attrValue.trim() : undefined;\n          break;\n        case \"path\":\n          attrObj.path = attrValue ? attrValue.trim() : undefined;\n          break;\n        case \"secure\":\n          attrObj.secure = true;\n          break;\n        case \"httponly\":\n          attrObj.httponly = true;\n          break;\n        case \"samesite\":\n          attrObj.samesite = attrValue\n            ? (attrValue.trim().toLowerCase() as \"strict\" | \"lax\" | \"none\")\n            : undefined;\n          break;\n        case \"partitioned\":\n          attrObj.partitioned = true;\n          break;\n        default:\n          attrObj[normalizedAttrName] = attrValue ? attrValue.trim() : true;\n          break;\n      }\n    }\n\n    cookies.set(name, attrObj);\n  }\n\n  return cookies;\n}\n\nexport function toCookieOptions(\n  attributes: CookieAttributes\n): AthenaCookieOptions {\n  return {\n    domain: attributes.domain,\n    expires: attributes.expires,\n    httpOnly: attributes.httponly,\n    maxAge: attributes[\"max-age\"],\n    partitioned: attributes.partitioned,\n    path: attributes.path,\n    sameSite: attributes.samesite,\n    secure: attributes.secure,\n  };\n}\n\n/**\n * Cookie-name token char set per RFC 7230 §3.2.6.\n */\nexport const cookieNameRegex = /^[\\w!#$%&'*.^`|~+-]+$/;\n\nfunction unquoteCookieValue(value: string): string {\n  if (value.length < 2 || !value.startsWith('\"') || !value.endsWith('\"')) {\n    return value;\n  }\n  return value.slice(1, -1);\n}\n\n/**\n * Parse a `Cookie` header into a key/value map.\n */\nexport function parseCookies(cookieHeader: string): Map<string, string> {\n  const cookies = cookieHeader.split(\"; \");\n  const cookieMap = new Map<string, string>();\n  cookies.forEach((cookie) => {\n    const [name, value] = cookie.split(/[=](.*)/s);\n    cookieMap.set(name as string, value as string);\n  });\n  return cookieMap;\n}\n\n/**\n * Add or replace a cookie in the request `Cookie` header.\n */\nexport function setRequestCookie(\n  headers: Headers,\n  name: string,\n  value: string\n): void {\n  const cookieMap = parseCookies(headers.get(\"cookie\") || \"\");\n  if (cookieNameRegex.test(name)) {\n    cookieMap.set(name, value);\n  }\n  headers.set(\n    \"cookie\",\n    Array.from(\n      cookieMap,\n      ([key, currentValue]) => `${key}=${encodeURIComponent(currentValue)}`\n    ).join(\"; \")\n  );\n}\n\n/**\n * Merge `Set-Cookie` values into a `Cookie` header.\n */\nexport function applySetCookies(\n  target: Headers,\n  setCookieValues: Iterable<string>\n): void {\n  const cookieMap = parseCookies(target.get(\"cookie\") || \"\");\n  for (const setCookie of setCookieValues) {\n    for (const [name, attr] of parseSetCookieHeader(setCookie)) {\n      if (cookieNameRegex.test(name)) {\n        cookieMap.set(name, attr.value);\n      }\n    }\n  }\n  target.set(\n    \"cookie\",\n    Array.from(\n      cookieMap,\n      ([key, currentValue]) => `${key}=${encodeURIComponent(currentValue)}`\n    ).join(\"; \")\n  );\n}\n\nexport function setCookieToHeader(headers: Headers) {\n  return (context: { response: Response }) => {\n    const setCookieHeader = context.response.headers.get(\"set-cookie\");\n    if (!setCookieHeader) {\n      return;\n    }\n    applySetCookies(headers, [setCookieHeader]);\n  };\n}\n","import { decodeBase64UrlToString, encodeStringToBase64Url } from \"./base64.ts\";\nimport {\n  HOST_COOKIE_PREFIX,\n  parseCookies,\n  parseSetCookieHeader,\n  SECURE_COOKIE_PREFIX,\n  setCookieToHeader,\n  setRequestCookie,\n  splitSetCookieHeader,\n  stripSecureCookiePrefix,\n  toCookieOptions,\n} from \"./cookie-utils.ts\";\nimport { signHmacBase64Url, signJwtHS256, verifyJwtHS256 } from \"./crypto.ts\";\nimport {\n  createAccountStore,\n  createSessionStore,\n  getAccountCookie,\n  getChunkedCookie,\n} from \"./session-store.ts\";\nimport type {\n  AthenaAuthCookie,\n  AthenaAuthCookies,\n  AthenaCookieContextRuntime,\n  AthenaCookieOptions,\n  AthenaCookiesOptions,\n  AthenaCookieVersionResolver,\n  AthenaGetCookieCacheConfig,\n  AthenaSessionPair,\n} from \"./types.ts\";\n\nconst DEFAULT_COOKIE_PREFIX = \"athena-auth\";\nconst LEGACY_COOKIE_PREFIX = \"better-auth\";\nconst DEFAULT_SESSION_MAX_AGE = 7 * 24 * 60 * 60;\nconst DEFAULT_CACHE_MAX_AGE = 60 * 5;\n\nfunction isProductionRuntime(): boolean {\n  return (\n    (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env\n      ?.NODE_ENV === \"production\"\n  );\n}\n\nfunction getEnvironmentSecret(): string | undefined {\n  const env = (\n    globalThis as {\n      process?: {\n        env?: {\n          ATHENA_AUTH_SECRET?: string;\n          BETTER_AUTH_SECRET?: string;\n          AUTH_SECRET?: string;\n        };\n      };\n    }\n  ).process?.env;\n  if (!env) {\n    return;\n  }\n  return env.ATHENA_AUTH_SECRET || env.BETTER_AUTH_SECRET || env.AUTH_SECRET;\n}\n\nfunction isDynamicBaseURLConfig(\n  baseURL: AthenaCookiesOptions[\"baseURL\"]\n): boolean {\n  return (\n    typeof baseURL === \"object\" &&\n    baseURL !== null &&\n    \"allowedHosts\" in baseURL &&\n    Array.isArray((baseURL as { allowedHosts?: unknown }).allowedHosts)\n  );\n}\n\nfunction resolveCookiePrefixes(primaryPrefix: string): string[] {\n  const prefixes = [primaryPrefix];\n  if (!prefixes.includes(DEFAULT_COOKIE_PREFIX)) {\n    prefixes.push(DEFAULT_COOKIE_PREFIX);\n  }\n  if (!prefixes.includes(LEGACY_COOKIE_PREFIX)) {\n    prefixes.push(LEGACY_COOKIE_PREFIX);\n  }\n  return prefixes;\n}\n\nfunction createError(message: string): Error {\n  return new Error(`@xylex-group/athena/cookies: ${message}`);\n}\n\nfunction getSecretOrThrow(secret?: string): string {\n  const resolved = secret || getEnvironmentSecret();\n  if (!resolved) {\n    throw createError(\n      \"getCookieCache requires a secret. Pass `secret` or set ATHENA_AUTH_SECRET/BETTER_AUTH_SECRET/AUTH_SECRET.\"\n    );\n  }\n  return resolved;\n}\n\nfunction asObject(value: unknown): Record<string, unknown> | null {\n  if (!value || typeof value !== \"object\") {\n    return null;\n  }\n  return value as Record<string, unknown>;\n}\n\nfunction getSessionTokenFromPair(session: AthenaSessionPair): string {\n  const token = session.session?.token;\n  if (typeof token !== \"string\" || token.length === 0) {\n    throw createError(\n      \"setSessionCookie requires `session.session.token` to be a non-empty string.\"\n    );\n  }\n  return token;\n}\n\nasync function resolveCookieVersion(\n  versionConfig: AthenaCookieVersionResolver | undefined,\n  session: Record<string, unknown>,\n  user: Record<string, unknown>\n): Promise<string> {\n  if (!versionConfig) {\n    return \"1\";\n  }\n  if (typeof versionConfig === \"string\") {\n    return versionConfig;\n  }\n  return versionConfig(session, user);\n}\n\nfunction getSessionCookieCacheName(\n  cookiePrefix: string,\n  cookieName: string,\n  isSecure: boolean\n): string {\n  return isSecure\n    ? `${SECURE_COOKIE_PREFIX}${cookiePrefix}.${cookieName}`\n    : `${cookiePrefix}.${cookieName}`;\n}\n\nasync function setCookieValue(\n  ctx: AthenaCookieContextRuntime,\n  name: string,\n  value: string,\n  attributes: AthenaCookieOptions\n): Promise<void> {\n  const secret = ctx.context.secret;\n  if (secret && typeof ctx.setSignedCookie === \"function\") {\n    await ctx.setSignedCookie(name, value, secret, attributes);\n    return;\n  }\n  ctx.setCookie(name, value, attributes);\n}\n\nfunction parseJsonSafely<T>(value: string): T | null {\n  try {\n    return JSON.parse(value) as T;\n  } catch {\n    return null;\n  }\n}\n\nfunction getIsSecureCookie(\n  config: { isSecure?: boolean } | undefined\n): boolean {\n  if (config?.isSecure !== undefined) {\n    return config.isSecure;\n  }\n  return isProductionRuntime();\n}\n\nexport function createCookieGetter(options: AthenaCookiesOptions) {\n  const baseURLString =\n    typeof options.baseURL === \"string\" ? options.baseURL : undefined;\n  const dynamicProtocol =\n    typeof options.baseURL === \"object\" && options.baseURL !== null\n      ? options.baseURL.protocol\n      : undefined;\n\n  const secure =\n    options.advanced?.useSecureCookies === undefined\n      ? dynamicProtocol === \"https\"\n        ? true\n        : dynamicProtocol === \"http\"\n          ? false\n          : baseURLString\n            ? baseURLString.startsWith(\"https://\")\n            : isProductionRuntime()\n      : options.advanced.useSecureCookies;\n\n  const secureCookiePrefix = secure ? SECURE_COOKIE_PREFIX : \"\";\n  const crossSubdomainEnabled =\n    !!options.advanced?.crossSubDomainCookies?.enabled;\n  const domain = crossSubdomainEnabled\n    ? options.advanced?.crossSubDomainCookies?.domain ||\n      (baseURLString ? new URL(baseURLString).hostname : undefined)\n    : undefined;\n\n  if (\n    crossSubdomainEnabled &&\n    !domain &&\n    !isDynamicBaseURLConfig(options.baseURL)\n  ) {\n    throw createError(\n      \"baseURL is required when `crossSubDomainCookies.enabled` is true.\"\n    );\n  }\n\n  function createCookie(\n    cookieName: string,\n    overrideAttributes: Partial<AthenaCookieOptions> = {}\n  ): AthenaAuthCookie {\n    const prefix = options.advanced?.cookiePrefix || DEFAULT_COOKIE_PREFIX;\n    const name =\n      options.advanced?.cookies?.[cookieName]?.name ||\n      `${prefix}.${cookieName}`;\n    const attributes =\n      options.advanced?.cookies?.[cookieName]?.attributes || {};\n\n    return {\n      attributes: {\n        httpOnly: true,\n        path: \"/\",\n        sameSite: \"lax\",\n        secure: !!secureCookiePrefix,\n        ...(crossSubdomainEnabled ? { domain } : {}),\n        ...options.advanced?.defaultCookieAttributes,\n        ...overrideAttributes,\n        ...attributes,\n      },\n      name: `${secureCookiePrefix}${name}`,\n    };\n  }\n\n  return createCookie;\n}\n\nexport function getCookies(options: AthenaCookiesOptions): AthenaAuthCookies {\n  const createCookie = createCookieGetter(options);\n  const sessionToken = createCookie(\"session_token\", {\n    maxAge: options.session?.expiresIn || DEFAULT_SESSION_MAX_AGE,\n  });\n  const sessionData = createCookie(\"session_data\", {\n    maxAge: options.session?.cookieCache?.maxAge || DEFAULT_CACHE_MAX_AGE,\n  });\n  const accountData = createCookie(\"account_data\", {\n    maxAge: options.session?.cookieCache?.maxAge || DEFAULT_CACHE_MAX_AGE,\n  });\n  const dontRememberToken = createCookie(\"dont_remember\");\n\n  return {\n    accountData: {\n      attributes: accountData.attributes,\n      name: accountData.name,\n    },\n    dontRememberToken: {\n      attributes: dontRememberToken.attributes,\n      name: dontRememberToken.name,\n    },\n    sessionData: {\n      attributes: sessionData.attributes,\n      name: sessionData.name,\n    },\n    sessionToken: {\n      attributes: sessionToken.attributes,\n      name: sessionToken.name,\n    },\n  };\n}\n\nexport async function setCookieCache(\n  ctx: AthenaCookieContextRuntime,\n  session: AthenaSessionPair,\n  dontRememberMe: boolean\n): Promise<void> {\n  const cookieCacheConfig = ctx.context.options?.session?.cookieCache;\n  if (!cookieCacheConfig?.enabled) {\n    return;\n  }\n\n  const version = await resolveCookieVersion(\n    cookieCacheConfig.version,\n    session.session as Record<string, unknown>,\n    session.user as Record<string, unknown>\n  );\n\n  const sessionData = {\n    session: session.session,\n    updatedAt: Date.now(),\n    user: session.user,\n    version,\n  };\n\n  const baseAttributes = ctx.context.authCookies.sessionData.attributes;\n  const maxAge = dontRememberMe ? undefined : baseAttributes.maxAge;\n  const options: AthenaCookieOptions = {\n    ...baseAttributes,\n    maxAge,\n  };\n  const expiresAt = Date.now() + (options.maxAge || 60) * 1000;\n  const strategy = cookieCacheConfig.strategy || \"compact\";\n  const secret = getSecretOrThrow(ctx.context.secret);\n\n  let encoded: string;\n  if (strategy === \"jwt\") {\n    encoded = await signJwtHS256(\n      sessionData,\n      secret,\n      options.maxAge || DEFAULT_CACHE_MAX_AGE\n    );\n  } else if (strategy === \"jwe\") {\n    throw createError(\n      \"`jwe` strategy is not supported by the SDK cookie helper.\"\n    );\n  } else {\n    const signature = await signHmacBase64Url(\n      secret,\n      JSON.stringify({\n        ...sessionData,\n        expiresAt,\n      })\n    );\n    encoded = encodeStringToBase64Url(\n      JSON.stringify({\n        expiresAt,\n        session: sessionData,\n        signature,\n      })\n    );\n  }\n\n  if (encoded.length > 4093) {\n    const store = createSessionStore(\n      ctx.context.authCookies.sessionData.name,\n      options,\n      ctx\n    );\n    const cookies = store.chunk(encoded, options);\n    store.setCookies(cookies);\n  } else {\n    const store = createSessionStore(\n      ctx.context.authCookies.sessionData.name,\n      options,\n      ctx\n    );\n    if (store.hasChunks()) {\n      store.setCookies(store.clean());\n    }\n    ctx.setCookie(ctx.context.authCookies.sessionData.name, encoded, options);\n  }\n}\n\nexport async function setSessionCookie(\n  ctx: AthenaCookieContextRuntime,\n  session: AthenaSessionPair,\n  dontRememberMe?: boolean,\n  overrides?: Partial<AthenaCookieOptions>\n): Promise<void> {\n  let resolvedDontRememberMe = dontRememberMe ?? false;\n  if (\n    dontRememberMe === undefined &&\n    typeof ctx.getSignedCookie === \"function\" &&\n    ctx.context.secret\n  ) {\n    const existingFlag = await ctx.getSignedCookie(\n      ctx.context.authCookies.dontRememberToken.name,\n      ctx.context.secret\n    );\n    resolvedDontRememberMe = Boolean(existingFlag);\n  }\n  const token = getSessionTokenFromPair(session);\n  const options = ctx.context.authCookies.sessionToken.attributes;\n  const maxAge = resolvedDontRememberMe\n    ? undefined\n    : ctx.context.sessionConfig?.expiresIn;\n  await setCookieValue(ctx, ctx.context.authCookies.sessionToken.name, token, {\n    ...options,\n    maxAge,\n    ...overrides,\n  });\n\n  if (resolvedDontRememberMe) {\n    await setCookieValue(\n      ctx,\n      ctx.context.authCookies.dontRememberToken.name,\n      \"true\",\n      ctx.context.authCookies.dontRememberToken.attributes\n    );\n  }\n\n  await setCookieCache(ctx, session, resolvedDontRememberMe);\n  ctx.context.setNewSession?.(session);\n}\n\n/**\n * Expires a cookie by setting `maxAge: 0` while preserving attributes.\n */\nexport function expireCookie(\n  ctx: AthenaCookieContextRuntime,\n  cookie: AthenaAuthCookie\n): void {\n  ctx.setCookie(cookie.name, \"\", {\n    ...cookie.attributes,\n    maxAge: 0,\n  });\n}\n\nexport function deleteSessionCookie(\n  ctx: AthenaCookieContextRuntime,\n  skipDontRememberMe?: boolean\n): void {\n  expireCookie(ctx, ctx.context.authCookies.sessionToken);\n  expireCookie(ctx, ctx.context.authCookies.sessionData);\n\n  if (ctx.context.options?.account?.storeAccountCookie) {\n    expireCookie(ctx, ctx.context.authCookies.accountData);\n    const accountStore = createAccountStore(\n      ctx.context.authCookies.accountData.name,\n      ctx.context.authCookies.accountData.attributes,\n      ctx\n    );\n    accountStore.setCookies(accountStore.clean());\n  }\n\n  const sessionStore = createSessionStore(\n    ctx.context.authCookies.sessionData.name,\n    ctx.context.authCookies.sessionData.attributes,\n    ctx\n  );\n  sessionStore.setCookies(sessionStore.clean());\n\n  if (!skipDontRememberMe) {\n    expireCookie(ctx, ctx.context.authCookies.dontRememberToken);\n  }\n}\n\nexport const getSessionCookie = (\n  request: Request | Headers,\n  config?:\n    | {\n        cookiePrefix?: string;\n        cookieName?: string;\n        path?: string;\n      }\n    | undefined\n): string | null => {\n  const cookies = (\n    request instanceof Headers || !(\"headers\" in request)\n      ? request\n      : request.headers\n  ).get(\"cookie\");\n  if (!cookies) {\n    return null;\n  }\n\n  const { cookieName = \"session_token\", cookiePrefix = \"athena-auth\" } =\n    config || {};\n  const parsedCookie = parseCookies(cookies);\n  const getCookie = (name: string): string | undefined =>\n    parsedCookie.get(name) ||\n    parsedCookie.get(`${SECURE_COOKIE_PREFIX}${name}`);\n  const candidateCookieNames = Array.from(\n    new Set([\n      cookieName,\n      cookieName.replace(/_/g, \"-\"),\n      cookieName.replace(/-/g, \"_\"),\n    ])\n  ).filter(Boolean);\n  for (const candidateName of candidateCookieNames) {\n    const sessionToken =\n      getCookie(`${cookiePrefix}.${candidateName}`) ||\n      getCookie(`${cookiePrefix}-${candidateName}`);\n    if (sessionToken) {\n      return sessionToken;\n    }\n  }\n  return null;\n};\n\nexport const getCookieCache = async <\n  SessionShape extends Record<string, unknown> = Record<string, unknown>,\n  UserShape extends Record<string, unknown> = Record<string, unknown>,\n>(\n  request: Request | Headers,\n  config?: AthenaGetCookieCacheConfig<SessionShape, UserShape>\n): Promise<{\n  session: SessionShape;\n  user: UserShape;\n  updatedAt: number;\n  version?: string;\n} | null> => {\n  const headers =\n    request instanceof Headers || !(\"headers\" in request)\n      ? request\n      : request.headers;\n  const cookieHeader = headers.get(\"cookie\");\n  if (!cookieHeader) {\n    return null;\n  }\n\n  const parsedCookie = parseCookies(cookieHeader);\n  const cookieName = config?.cookieName || \"session_data\";\n  const requestedPrefix = config?.cookiePrefix || DEFAULT_COOKIE_PREFIX;\n  const strategy = config?.strategy || \"compact\";\n  const cookiePrefixes = resolveCookiePrefixes(requestedPrefix);\n  const isSecure = getIsSecureCookie(config);\n  const secret = getSecretOrThrow(config?.secret);\n\n  let sessionData: string | undefined;\n\n  for (const prefix of cookiePrefixes) {\n    const candidate = getSessionCookieCacheName(prefix, cookieName, isSecure);\n    const cookieValue = parsedCookie.get(candidate);\n    if (cookieValue) {\n      sessionData = cookieValue;\n      break;\n    }\n  }\n\n  if (!sessionData) {\n    const reconstructedChunks: Array<{ index: number; value: string }> = [];\n    for (const prefix of cookiePrefixes) {\n      const candidate = getSessionCookieCacheName(prefix, cookieName, isSecure);\n      for (const [name, value] of parsedCookie.entries()) {\n        if (!name.startsWith(`${candidate}.`)) {\n          continue;\n        }\n        const parts = name.split(\".\");\n        const indexStr = parts.at(-1);\n        const index = Number.parseInt(indexStr || \"0\", 10);\n        if (!Number.isNaN(index)) {\n          reconstructedChunks.push({ index, value });\n        }\n      }\n      if (reconstructedChunks.length > 0) {\n        break;\n      }\n    }\n\n    if (reconstructedChunks.length > 0) {\n      reconstructedChunks.sort((left, right) => left.index - right.index);\n      sessionData = reconstructedChunks.map((chunk) => chunk.value).join(\"\");\n    }\n  }\n\n  if (!sessionData) {\n    return null;\n  }\n\n  if (strategy === \"jwe\") {\n    throw createError(\n      \"`jwe` strategy is not supported by the SDK cookie helper. Use compact/jwt or pass cookie data through the auth server.\"\n    );\n  }\n\n  if (strategy === \"jwt\") {\n    const payload = await verifyJwtHS256<Record<string, unknown>>(\n      sessionData,\n      secret\n    );\n    if (!payload) {\n      return null;\n    }\n    const sessionRecord = asObject(payload.session);\n    const userRecord = asObject(payload.user);\n    const updatedAt = payload.updatedAt;\n    if (!(sessionRecord && userRecord) || typeof updatedAt !== \"number\") {\n      return null;\n    }\n\n    if (config?.version) {\n      const cookieVersion =\n        typeof payload.version === \"string\" ? payload.version : \"1\";\n      const expectedVersion =\n        typeof config.version === \"string\"\n          ? config.version\n          : await config.version(\n              sessionRecord as SessionShape,\n              userRecord as UserShape\n            );\n      if (cookieVersion !== expectedVersion) {\n        return null;\n      }\n    }\n\n    return {\n      session: sessionRecord as SessionShape,\n      updatedAt,\n      user: userRecord as UserShape,\n      version:\n        typeof payload.version === \"string\" ? payload.version : undefined,\n    };\n  }\n\n  const compactPayload = parseJsonSafely<{\n    session: {\n      session: SessionShape;\n      user: UserShape;\n      updatedAt: number;\n      version?: string;\n    };\n    expiresAt: number;\n    signature: string;\n  }>(decodeBase64UrlToString(sessionData));\n\n  if (!compactPayload) {\n    return null;\n  }\n\n  const expectedSignature = await signHmacBase64Url(\n    secret,\n    JSON.stringify({\n      ...compactPayload.session,\n      expiresAt: compactPayload.expiresAt,\n    })\n  );\n\n  if (expectedSignature !== compactPayload.signature) {\n    return null;\n  }\n\n  if (compactPayload.expiresAt <= Date.now()) {\n    return null;\n  }\n\n  const resolvedSession = compactPayload.session;\n  if (config?.version) {\n    const cookieVersion = resolvedSession.version || \"1\";\n    const expectedVersion =\n      typeof config.version === \"string\"\n        ? config.version\n        : await config.version(resolvedSession.session, resolvedSession.user);\n    if (cookieVersion !== expectedVersion) {\n      return null;\n    }\n  }\n\n  const sessionObject = asObject(resolvedSession.session);\n  const userObject = asObject(resolvedSession.user);\n  if (!(sessionObject && userObject)) {\n    return null;\n  }\n\n  return {\n    session: sessionObject as SessionShape,\n    updatedAt: resolvedSession.updatedAt,\n    user: userObject as UserShape,\n    version: resolvedSession.version,\n  };\n};\n\nexport {\n  hasAuthSessionCookie,\n  SESSION_COOKIE_PATTERNS,\n} from \"./session-cookie-detection.ts\";\nexport type {\n  AthenaAuthCookie,\n  AthenaAuthCookies,\n  AthenaCookieContextRuntime,\n  AthenaCookieOptions,\n  AthenaCookiesOptions,\n  AthenaGetCookieCacheConfig,\n};\nexport {\n  createSessionStore,\n  getAccountCookie,\n  getChunkedCookie,\n  HOST_COOKIE_PREFIX,\n  parseCookies,\n  parseSetCookieHeader,\n  SECURE_COOKIE_PREFIX,\n  setCookieToHeader,\n  setRequestCookie,\n  splitSetCookieHeader,\n  stripSecureCookiePrefix,\n  toCookieOptions,\n};\n","import { getSessionCookie } from \"../cookies/index.ts\";\nimport type { BackendOption } from \"../gateway/types.ts\";\n\nexport type AthenaRequestHeaderProfile =\n  | \"gateway\"\n  | \"auth\"\n  | \"chat\"\n  | \"storage\"\n  | \"minimal\";\n\nconst NO_CACHE_HEADER_VALUE = \"no-cache\";\n\nconst API_KEY_HEADER_CANDIDATES = [\n  \"X-Athena-Key\",\n  \"x-athena-key\",\n  \"X-Api-Key\",\n  \"x-api-key\",\n  \"apikey\",\n] as const;\nconst ATHENA_KEY_HEADER_CANDIDATES = [\"X-Athena-Key\", \"x-athena-key\"] as const;\nconst SESSION_TOKEN_HEADER_CANDIDATES = [\n  \"X-Athena-Auth-Session-Token\",\n] as const;\nconst BEARER_MIRROR_HEADER_CANDIDATES = [\"X-Athena-Auth-Bearer-Token\"] as const;\nconst CLIENT_HEADER_CANDIDATES = [\n  \"X-Athena-Client\",\n  \"x-athena-client\",\n] as const;\nconst PG_URI_HEADER_CANDIDATES = [\"x-pg-uri\"] as const;\nconst JDBC_URI_HEADER_CANDIDATES = [\"x-athena-jdbc-url\", \"x-jdbc-url\"] as const;\n\ninterface AthenaRequestHeaderProfileRules {\n  accept?: boolean;\n  apiKeys: boolean;\n  authBearer: boolean;\n  authMirror: boolean;\n  contentType?: boolean;\n  routing: boolean;\n  stripNullsDefault?: boolean;\n}\n\nconst PROFILE_RULES: Record<\n  AthenaRequestHeaderProfile,\n  AthenaRequestHeaderProfileRules\n> = {\n  auth: {\n    apiKeys: true,\n    authBearer: true,\n    authMirror: false,\n    contentType: true,\n    routing: true,\n  },\n  chat: {\n    accept: true,\n    apiKeys: true,\n    authBearer: true,\n    authMirror: true,\n    routing: true,\n  },\n  gateway: {\n    apiKeys: true,\n    authBearer: false,\n    authMirror: true,\n    contentType: true,\n    routing: true,\n    stripNullsDefault: true,\n  },\n  minimal: {\n    apiKeys: false,\n    authBearer: false,\n    authMirror: false,\n    routing: false,\n  },\n  storage: {\n    apiKeys: true,\n    authBearer: false,\n    authMirror: true,\n    contentType: true,\n    routing: true,\n  },\n};\n\nexport interface BuildAthenaRequestHeadersInput {\n  accept?: string | null;\n  apiKey?: string | null;\n  backend?: BackendOption;\n  bearerToken?: string | null;\n  callHeaders?: Record<string, string>;\n  client?: string | null;\n  configHeaders?: Record<string, string>;\n  contentType?: string | null;\n  cookie?: string | null;\n  forceNoCache?: boolean;\n  jdbcUrl?: string | null;\n  organizationId?: string | null;\n  pgUri?: string | null;\n  profile: AthenaRequestHeaderProfile;\n  publishEvent?: string | null;\n  sdkHeaderValue: string;\n  sessionToken?: string | null;\n  stripNulls?: boolean;\n  userId?: string | null;\n}\n\n/** Shared config/call fields consumed by gateway, chat, auth, and `client.request(...)`. */\nexport interface AthenaRequestHeaderOverrideFields {\n  apiKey?: string | null;\n  backend?: BackendOption;\n  bearerToken?: string | null;\n  client?: string | null;\n  cookie?: string | null;\n  forceNoCache?: boolean;\n  headers?: Record<string, string>;\n  jdbcUrl?: string | null;\n  organizationId?: string | null;\n  pgUri?: string | null;\n  publishEvent?: string | null;\n  sessionToken?: string | null;\n  stripNulls?: boolean;\n  userId?: string | null;\n}\n\nexport type ResolvedRequestHeaderOverrides = Omit<\n  BuildAthenaRequestHeadersInput,\n  \"profile\" | \"sdkHeaderValue\" | \"contentType\" | \"accept\"\n>;\n\nfunction normalizeHeaderValue(value?: string | null): string | undefined {\n  return value ? value : undefined;\n}\n\nfunction mergeExtraHeaders(\n  configHeaders?: Record<string, string>,\n  callHeaders?: Record<string, string>\n): Record<string, string> {\n  return { ...(configHeaders ?? {}), ...(callHeaders ?? {}) };\n}\n\nexport function hasHeaderIgnoreCase(\n  headers: Record<string, string>,\n  targetKey: string\n): boolean {\n  const normalizedTargetKey = targetKey.toLowerCase();\n  return Object.keys(headers).some(\n    (key) => key.toLowerCase() === normalizedTargetKey\n  );\n}\n\nexport function resolveHeaderValue(\n  headers: Record<string, string>,\n  candidates: readonly string[]\n): string | undefined {\n  for (const candidate of candidates) {\n    const direct = normalizeHeaderValue(headers[candidate]);\n    if (direct) {\n      return direct;\n    }\n  }\n\n  const loweredCandidates = new Set(\n    candidates.map((candidate) => candidate.toLowerCase())\n  );\n  for (const [key, value] of Object.entries(headers)) {\n    if (!loweredCandidates.has(key.toLowerCase())) {\n      continue;\n    }\n    const normalized = normalizeHeaderValue(value);\n    if (normalized) {\n      return normalized;\n    }\n  }\n  return undefined;\n}\n\nfunction isCacheControlHeaderName(name: string): boolean {\n  return name.toLowerCase() === \"cache-control\";\n}\n\nfunction normalizeBearerToken(value: string): string {\n  const trimmed = value.trim();\n  const match = trimmed.match(/^Bearer\\s+(.+)$/i);\n  return match?.[1]?.trim() ?? trimmed;\n}\n\nfunction resolveBearerTokenFromAuthorizationHeader(\n  headers: Record<string, string>\n): string | undefined {\n  const authorization = resolveHeaderValue(headers, [\"Authorization\"]);\n  if (!authorization) {\n    return undefined;\n  }\n\n  const token = normalizeBearerToken(authorization);\n  return token ? token : undefined;\n}\n\nfunction resolveSessionTokenFromCookieHeader(\n  headers: Record<string, string>\n): string | undefined {\n  const cookie = resolveHeaderValue(headers, [\"Cookie\"]);\n  if (!cookie) {\n    return undefined;\n  }\n\n  return getSessionCookie(new Headers({ cookie })) ?? undefined;\n}\n\nfunction resolveBackendType(backend?: BackendOption): string | undefined {\n  if (!backend) {\n    return undefined;\n  }\n  return typeof backend === \"string\" ? backend : backend.type;\n}\n\nexport function resolveRequestHeaderOverrides(\n  config: AthenaRequestHeaderOverrideFields,\n  options?: AthenaRequestHeaderOverrideFields,\n  defaults?: Pick<AthenaRequestHeaderOverrideFields, \"client\" | \"stripNulls\">\n): ResolvedRequestHeaderOverrides {\n  return {\n    apiKey: options?.apiKey ?? config.apiKey,\n    backend: options?.backend ?? config.backend,\n    bearerToken: options?.bearerToken ?? config.bearerToken,\n    callHeaders: options?.headers,\n    client: options?.client ?? config.client ?? defaults?.client,\n    configHeaders: config.headers,\n    cookie: options?.cookie ?? config.cookie,\n    forceNoCache: Boolean(config.forceNoCache || options?.forceNoCache),\n    jdbcUrl: options?.jdbcUrl ?? config.jdbcUrl,\n    organizationId: options?.organizationId ?? config.organizationId,\n    pgUri: options?.pgUri ?? config.pgUri,\n    publishEvent: options?.publishEvent ?? config.publishEvent,\n    sessionToken: options?.sessionToken ?? config.sessionToken,\n    stripNulls:\n      options?.stripNulls ?? config.stripNulls ?? defaults?.stripNulls,\n    userId: options?.userId ?? config.userId,\n  };\n}\n\nexport function buildServiceRequestHeaders(\n  profile: Exclude<AthenaRequestHeaderProfile, \"minimal\">,\n  sdkHeaderValue: string,\n  config: AthenaRequestHeaderOverrideFields,\n  options?: AthenaRequestHeaderOverrideFields,\n  extras?: Pick<BuildAthenaRequestHeadersInput, \"contentType\" | \"accept\"> & {\n    client?: string | null;\n    stripNulls?: boolean;\n  }\n): Record<string, string> {\n  const rules = PROFILE_RULES[profile];\n  return buildAthenaRequestHeaders({\n    profile,\n    sdkHeaderValue,\n    ...resolveRequestHeaderOverrides(config, options, {\n      client: extras?.client ?? undefined,\n      stripNulls:\n        extras?.stripNulls ?? (rules.stripNullsDefault ? true : undefined),\n    }),\n    accept: extras?.accept ?? (rules.accept ? \"application/json\" : undefined),\n    contentType:\n      extras?.contentType ??\n      (rules.contentType ? \"application/json\" : undefined),\n  });\n}\n\nexport function applyAthenaApiKeyHeaders(\n  headers: Record<string, string>,\n  apiKey?: string | null\n): void {\n  const resolvedApiKey = normalizeHeaderValue(apiKey);\n  if (resolvedApiKey && !hasHeaderIgnoreCase(headers, \"X-Athena-Key\")) {\n    headers[\"X-Athena-Key\"] = resolvedApiKey;\n  }\n}\n\nexport function applyAthenaAuthContextHeaders(\n  headers: Record<string, string>,\n  input: Pick<\n    BuildAthenaRequestHeadersInput,\n    | \"bearerToken\"\n    | \"cookie\"\n    | \"sessionToken\"\n    | \"profile\"\n    | \"configHeaders\"\n    | \"callHeaders\"\n  >\n): void {\n  const mergedExtraHeaders = mergeExtraHeaders(\n    input.configHeaders,\n    input.callHeaders\n  );\n  const rules = PROFILE_RULES[input.profile];\n  const explicitCookie = normalizeHeaderValue(input.cookie);\n  if (explicitCookie) {\n    mergedExtraHeaders.Cookie = explicitCookie;\n  }\n\n  const explicitSessionToken =\n    normalizeHeaderValue(input.sessionToken) ??\n    resolveHeaderValue(mergedExtraHeaders, SESSION_TOKEN_HEADER_CANDIDATES);\n  const derivedSessionToken =\n    explicitSessionToken ??\n    resolveSessionTokenFromCookieHeader(mergedExtraHeaders);\n  const cookieFromHeaders = resolveHeaderValue(mergedExtraHeaders, [\"Cookie\"]);\n\n  if (explicitCookie && !hasHeaderIgnoreCase(headers, \"Cookie\")) {\n    headers.Cookie = explicitCookie;\n  } else if (cookieFromHeaders && !hasHeaderIgnoreCase(headers, \"Cookie\")) {\n    headers.Cookie = cookieFromHeaders;\n  }\n\n  const explicitBearerToken = (() => {\n    const configured = normalizeHeaderValue(input.bearerToken);\n    if (configured) {\n      return normalizeBearerToken(configured);\n    }\n    const mirrored = resolveHeaderValue(\n      mergedExtraHeaders,\n      BEARER_MIRROR_HEADER_CANDIDATES\n    );\n    return mirrored ? normalizeBearerToken(mirrored) : undefined;\n  })();\n  const derivedBearerToken =\n    explicitBearerToken ??\n    resolveBearerTokenFromAuthorizationHeader(mergedExtraHeaders);\n\n  if (\n    rules.authBearer &&\n    derivedBearerToken &&\n    !hasHeaderIgnoreCase(headers, \"Authorization\")\n  ) {\n    headers.Authorization = `Bearer ${derivedBearerToken}`;\n  }\n\n  if (rules.authMirror) {\n    if (\n      derivedSessionToken &&\n      !hasHeaderIgnoreCase(headers, \"X-Athena-Auth-Session-Token\")\n    ) {\n      headers[\"X-Athena-Auth-Session-Token\"] = derivedSessionToken;\n    }\n    if (\n      derivedBearerToken &&\n      !hasHeaderIgnoreCase(headers, \"X-Athena-Auth-Bearer-Token\")\n    ) {\n      headers[\"X-Athena-Auth-Bearer-Token\"] = derivedBearerToken;\n    }\n  } else if (\n    derivedSessionToken &&\n    !hasHeaderIgnoreCase(headers, \"X-Athena-Auth-Session-Token\")\n  ) {\n    headers[\"X-Athena-Auth-Session-Token\"] = derivedSessionToken;\n  }\n}\n\nexport function applyAthenaPgUriHeaders(\n  headers: Record<string, string>,\n  input: Pick<\n    BuildAthenaRequestHeadersInput,\n    \"pgUri\" | \"jdbcUrl\" | \"configHeaders\" | \"callHeaders\"\n  >\n): void {\n  const mergedExtraHeaders = mergeExtraHeaders(\n    input.configHeaders,\n    input.callHeaders\n  );\n\n  const pgUri =\n    normalizeHeaderValue(input.pgUri) ??\n    resolveHeaderValue(mergedExtraHeaders, PG_URI_HEADER_CANDIDATES);\n  if (pgUri && !hasHeaderIgnoreCase(headers, \"x-pg-uri\")) {\n    headers[\"x-pg-uri\"] = pgUri;\n  }\n\n  const jdbcUrl =\n    normalizeHeaderValue(input.jdbcUrl) ??\n    resolveHeaderValue(mergedExtraHeaders, JDBC_URI_HEADER_CANDIDATES);\n  if (jdbcUrl) {\n    if (!hasHeaderIgnoreCase(headers, \"x-athena-jdbc-url\")) {\n      headers[\"x-athena-jdbc-url\"] = jdbcUrl;\n    }\n    if (!hasHeaderIgnoreCase(headers, \"x-jdbc-url\")) {\n      headers[\"x-jdbc-url\"] = jdbcUrl;\n    }\n  }\n}\n\n/**\n * Minimal gateway/data request headers used by many apps before they adopt\n * the full {@link buildAthenaRequestHeaders} profile model.\n *\n * Additive convenience — does not replace client-built headers. Prefer\n * `createClient({ client, key })` so the SDK sets these on every call.\n */\nexport function buildAthenaGatewayHeaders(input: {\n  clientName?: string | null;\n  gatewayKey?: string | null;\n  headers?: Record<string, string | null | undefined>;\n}): Record<string, string> {\n  const trimmedClientName = input.clientName?.trim();\n  const trimmedGatewayKey = input.gatewayKey?.trim();\n  const merged: Record<string, string | null | undefined> = {\n    ...(trimmedClientName\n      ? {\n          \"X-Athena-Client\": trimmedClientName,\n        }\n      : {}),\n    ...(trimmedGatewayKey\n      ? {\n          \"X-Api-Key\": trimmedGatewayKey,\n          \"X-Athena-Key\": trimmedGatewayKey,\n        }\n      : {}),\n    ...input.headers,\n  };\n\n  return Object.fromEntries(\n    Object.entries(merged).flatMap(([key, value]) =>\n      typeof value === \"string\" && value.trim()\n        ? ([[key, value.trim()]] as const)\n        : []\n    )\n  );\n}\n\nexport function buildAthenaRequestHeaders(\n  input: BuildAthenaRequestHeadersInput\n): Record<string, string> {\n  const forceNoCache = Boolean(input.forceNoCache);\n  const mergedExtraHeaders = mergeExtraHeaders(\n    input.configHeaders,\n    input.callHeaders\n  );\n  const rules = PROFILE_RULES[input.profile];\n\n  const headerClient = resolveHeaderValue(\n    mergedExtraHeaders,\n    CLIENT_HEADER_CANDIDATES\n  );\n  const finalClient = normalizeHeaderValue(input.client) ?? headerClient;\n  const finalApiKey =\n    normalizeHeaderValue(input.apiKey) ??\n    resolveHeaderValue(mergedExtraHeaders, API_KEY_HEADER_CANDIDATES);\n  const finalAthenaKey =\n    resolveHeaderValue(mergedExtraHeaders, ATHENA_KEY_HEADER_CANDIDATES) ??\n    finalApiKey;\n\n  const headers: Record<string, string> = {\n    \"X-Athena-Sdk\": input.sdkHeaderValue,\n  };\n\n  if (rules.contentType) {\n    headers[\"Content-Type\"] = input.contentType ?? \"application/json\";\n  }\n\n  if (input.accept ?? rules.accept) {\n    headers.Accept = input.accept ?? \"application/json\";\n  }\n\n  if (rules.routing) {\n    if (normalizeHeaderValue(input.userId)) {\n      headers[\"X-User-Id\"] = input.userId ?? \"\";\n    }\n    if (normalizeHeaderValue(input.organizationId)) {\n      headers[\"X-Organization-Id\"] = input.organizationId ?? \"\";\n    }\n    if (finalClient) {\n      headers[\"X-Athena-Client\"] = finalClient;\n    }\n\n    const backendType = resolveBackendType(input.backend);\n    if (backendType) {\n      headers[\"X-Backend-Type\"] = backendType;\n    }\n\n    if (typeof input.stripNulls === \"boolean\") {\n      headers[\"X-Strip-Nulls\"] = input.stripNulls ? \"true\" : \"false\";\n    } else if (rules.stripNullsDefault) {\n      headers[\"X-Strip-Nulls\"] = \"true\";\n    }\n\n    if (normalizeHeaderValue(input.publishEvent)) {\n      headers[\"X-Publish-Event\"] = input.publishEvent ?? \"\";\n    }\n  }\n\n  if (rules.apiKeys && (finalApiKey || finalAthenaKey)) {\n    applyAthenaApiKeyHeaders(headers, finalAthenaKey);\n  }\n\n  applyAthenaAuthContextHeaders(headers, input);\n  applyAthenaPgUriHeaders(headers, input);\n\n  const reservedClientHeaderKeys = new Set(\n    CLIENT_HEADER_CANDIDATES.map((key) => key.toLowerCase())\n  );\n  Object.entries(mergedExtraHeaders).forEach(([key, value]) => {\n    if (reservedClientHeaderKeys.has(key.toLowerCase())) {\n      return undefined;\n    }\n    if (forceNoCache && isCacheControlHeaderName(key)) {\n      return undefined;\n    }\n    const normalized = normalizeHeaderValue(value);\n    if (normalized) {\n      headers[key] = normalized;\n    }\n  });\n\n  if (forceNoCache) {\n    headers[\"Cache-Control\"] = NO_CACHE_HEADER_VALUE;\n  }\n\n  return headers;\n}\n","/**\n * Athena billing HTTP client for live `/billing/v1/*`, `/admin/billing/*`,\n * provider webhook, and `/debug/billing` routes.\n *\n * Methods map 1:1 onto the registered Actix handlers. Auth uses the static\n * Athena admin key (`X-Athena-Key` / configured API key) matching the server\n * `authorize_static_admin_key` gate.\n *\n * Contract spine: `billingSdkManifest` METHOD+path entries must match the\n * permanent Rust inventory `athena_billing::LIVE_HTTP_ROUTES`\n * (exported as `./live-http-routes.json`). Export with\n * `cargo run -p athena-billing --bin billing-contract-spine -- --write`.\n */\n\nimport { normalizeAthenaGatewayBaseUrl } from \"../gateway/url.ts\";\nimport { buildSdkHeaderValue } from \"../sdk-version.ts\";\nimport {\n  buildAthenaRequestHeaders,\n  hasHeaderIgnoreCase,\n} from \"../utils/athena-request-headers.ts\";\n\nconst SDK_NAME = \"xylex-group/athena-billing\";\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME);\n\nexport type AthenaBillingHttpMethod = \"GET\" | \"POST\" | \"PATCH\" | \"DELETE\";\n\nexport type AthenaBillingJson =\n  | null\n  | boolean\n  | number\n  | string\n  | AthenaBillingJson[]\n  | { [key: string]: AthenaBillingJson };\n\nexport interface AthenaBillingCallOptions {\n  apiKey?: string | null;\n  headers?: Record<string, string>;\n  signal?: AbortSignal;\n}\n\nexport interface AthenaBillingClientConfig {\n  apiKey: string;\n  baseUrl: string;\n  client?: string | null;\n  fetchImpl?: typeof fetch;\n  headers?: Record<string, string>;\n}\n\nexport interface AthenaBillingEnvelope<T = unknown> {\n  data: T;\n  message?: string;\n  status?: string;\n}\n\nexport class AthenaBillingError extends Error {\n  status: number;\n  endpoint: string;\n  method: string;\n  body: unknown;\n\n  constructor(input: {\n    message: string;\n    status: number;\n    endpoint: string;\n    method: string;\n    body: unknown;\n  }) {\n    super(input.message);\n    this.name = \"AthenaBillingError\";\n    this.status = input.status;\n    this.endpoint = input.endpoint;\n    this.method = input.method;\n    this.body = input.body;\n  }\n}\n\nexport interface BillingConnectionRefInput {\n  clientName?: string;\n  connectionId: string;\n}\n\nexport interface BillingListQuery extends BillingConnectionRefInput {\n  cursor?: string;\n  limit?: number;\n  offset?: number;\n  source?: \"provider\" | \"persistence\" | string;\n}\n\nexport interface BillingEnsureCustomerInput extends BillingConnectionRefInput {\n  email?: string | null;\n  idempotencyKey: string;\n  metadata?: Record<string, AthenaBillingJson>;\n  name?: string | null;\n}\n\nexport interface BillingUpdateCustomerInput extends BillingConnectionRefInput {\n  email?: string | null;\n  name?: string | null;\n}\n\nexport interface BillingCreateConnectionInput {\n  config?: Record<string, AthenaBillingJson>;\n  credentialKind?: string;\n  metadata?: Record<string, AthenaBillingJson>;\n  mode?: string;\n  ownerId: string;\n  ownerKind: string;\n  provider: string;\n  providerAccountId: string;\n  providerProfileId?: string | null;\n  scopes?: string[];\n  status?: string;\n}\n\nexport interface BillingUpdateConnectionInput {\n  config?: Record<string, AthenaBillingJson>;\n  credentialKind?: string;\n  metadata?: Record<string, AthenaBillingJson>;\n  mode?: string;\n  providerAccountId?: string;\n  providerProfileId?: string | null;\n  scopes?: string[];\n  status?: string;\n}\n\nexport interface BillingReconcileInput {\n  customerId?: string | null;\n  resourceId: string;\n  resourceKind: string;\n}\n\nexport interface BillingProvisionSinksInput {\n  instance?: string;\n  targetSchema?: string;\n}\n\nexport const billingSdkManifest = {\n  envelopeKind: \"athena\",\n  methods: [\n    {\n      method: \"GET\",\n      name: \"getCapabilities\",\n      path: \"/billing/v1/capabilities\",\n    },\n    { method: \"POST\", name: \"createCheckout\", path: \"/billing/v1/checkouts\" },\n    { method: \"GET\", name: \"listProducts\", path: \"/billing/v1/products\" },\n    { method: \"GET\", name: \"listPrices\", path: \"/billing/v1/prices\" },\n    { method: \"GET\", name: \"listCustomers\", path: \"/billing/v1/customers\" },\n    { method: \"POST\", name: \"createCustomer\", path: \"/billing/v1/customers\" },\n    { method: \"GET\", name: \"getCustomer\", path: \"/billing/v1/customers/{id}\" },\n    {\n      method: \"PATCH\",\n      name: \"updateCustomer\",\n      path: \"/billing/v1/customers/{id}\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteCustomer\",\n      path: \"/billing/v1/customers/{id}\",\n    },\n    { method: \"GET\", name: \"listPayments\", path: \"/billing/v1/payments\" },\n    { method: \"POST\", name: \"createPayment\", path: \"/billing/v1/payments\" },\n    { method: \"GET\", name: \"getPayment\", path: \"/billing/v1/payments/{id}\" },\n    {\n      method: \"POST\",\n      name: \"cancelPayment\",\n      path: \"/billing/v1/payments/{id}/cancel\",\n    },\n    {\n      method: \"GET\",\n      name: \"listPaymentLinks\",\n      path: \"/billing/v1/payment-links\",\n    },\n    {\n      method: \"POST\",\n      name: \"createPaymentLink\",\n      path: \"/billing/v1/payment-links\",\n    },\n    {\n      method: \"GET\",\n      name: \"getPaymentLink\",\n      path: \"/billing/v1/payment-links/{id}\",\n    },\n    {\n      method: \"PATCH\",\n      name: \"updatePaymentLink\",\n      path: \"/billing/v1/payment-links/{id}\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deletePaymentLink\",\n      path: \"/billing/v1/payment-links/{id}\",\n    },\n    { method: \"GET\", name: \"listRefunds\", path: \"/billing/v1/refunds\" },\n    { method: \"POST\", name: \"createRefund\", path: \"/billing/v1/refunds\" },\n    { method: \"GET\", name: \"getRefund\", path: \"/billing/v1/refunds/{id}\" },\n    {\n      method: \"POST\",\n      name: \"cancelRefund\",\n      path: \"/billing/v1/refunds/{id}/cancel\",\n    },\n    {\n      method: \"GET\",\n      name: \"listSubscriptions\",\n      path: \"/billing/v1/subscriptions\",\n    },\n    {\n      method: \"POST\",\n      name: \"createSubscription\",\n      path: \"/billing/v1/subscriptions\",\n    },\n    {\n      method: \"GET\",\n      name: \"getSubscription\",\n      path: \"/billing/v1/subscriptions/{id}\",\n    },\n    {\n      method: \"PATCH\",\n      name: \"updateSubscription\",\n      path: \"/billing/v1/subscriptions/{id}\",\n    },\n    {\n      method: \"POST\",\n      name: \"cancelSubscription\",\n      path: \"/billing/v1/subscriptions/{id}/cancel\",\n    },\n    { method: \"GET\", name: \"listInvoices\", path: \"/billing/v1/invoices\" },\n    { method: \"GET\", name: \"getInvoice\", path: \"/billing/v1/invoices/{id}\" },\n    { method: \"GET\", name: \"listWebhooks\", path: \"/billing/v1/webhooks\" },\n    { method: \"POST\", name: \"createWebhook\", path: \"/billing/v1/webhooks\" },\n    { method: \"GET\", name: \"getWebhook\", path: \"/billing/v1/webhooks/{id}\" },\n    {\n      method: \"PATCH\",\n      name: \"updateWebhook\",\n      path: \"/billing/v1/webhooks/{id}\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteWebhook\",\n      path: \"/billing/v1/webhooks/{id}\",\n    },\n    {\n      method: \"POST\",\n      name: \"testWebhook\",\n      path: \"/billing/v1/webhooks/{id}/test\",\n    },\n    {\n      method: \"GET\",\n      name: \"listConnections\",\n      path: \"/admin/billing/clients/{client_name}/connections\",\n    },\n    {\n      method: \"POST\",\n      name: \"createConnection\",\n      path: \"/admin/billing/clients/{client_name}/connections\",\n    },\n    {\n      method: \"GET\",\n      name: \"getConnection\",\n      path: \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n    },\n    {\n      method: \"PATCH\",\n      name: \"updateConnection\",\n      path: \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteConnection\",\n      path: \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n    },\n    {\n      method: \"POST\",\n      name: \"reconcileDocument\",\n      path: \"/admin/billing/clients/{client_name}/connections/{connection_id}/reconcile\",\n    },\n    {\n      method: \"GET\",\n      name: \"listWebhookEvents\",\n      path: \"/admin/billing/clients/{client_name}/webhook-events\",\n    },\n    {\n      method: \"POST\",\n      name: \"provisionWebhookSinks\",\n      path: \"/admin/billing/clients/{client_name}/webhook-sinks/provision\",\n    },\n    { method: \"GET\", name: \"listGrants\", path: \"/admin/billing/grants\" },\n    { method: \"GET\", name: \"listProviders\", path: \"/admin/billing/providers\" },\n    {\n      method: \"GET\",\n      name: \"listSinkHelpers\",\n      path: \"/admin/webhook-sinks/helpers/billing\",\n    },\n    {\n      method: \"POST\",\n      name: \"ingestProviderWebhook\",\n      path: \"/billing/providers/{provider}/clients/{client_name}/connections/{connection_id}/webhook\",\n    },\n    { method: \"GET\", name: \"getDebugBilling\", path: \"/debug/billing\" },\n  ],\n  namespace: \"billing\",\n} as const;\n\nfunction withPathParam(path: string, name: string, value: string): string {\n  return path.replace(`{${name}}`, encodeURIComponent(value));\n}\n\nfunction appendQuery(\n  path: string,\n  query?: Record<string, string | number | boolean | null | undefined>\n): string {\n  if (!query) {\n    return path;\n  }\n  const params = new URLSearchParams();\n  for (const [key, value] of Object.entries(query)) {\n    if (value === undefined || value === null) {\n      continue;\n    }\n    params.set(key, String(value));\n  }\n  const serialized = params.toString();\n  return serialized ? `${path}?${serialized}` : path;\n}\n\nfunction connectionQuery(\n  input: BillingListQuery | BillingConnectionRefInput\n): Record<string, string> {\n  const query: Record<string, string> = {\n    connectionId: input.connectionId,\n  };\n  if (input.clientName) {\n    query.clientName = input.clientName;\n  }\n  if (\"cursor\" in input && input.cursor) {\n    query.cursor = input.cursor;\n  }\n  if (\"source\" in input && input.source) {\n    query.source = input.source;\n  }\n  if (\"limit\" in input && input.limit !== undefined) {\n    query.limit = String(input.limit);\n  }\n  if (\"offset\" in input && input.offset !== undefined) {\n    query.offset = String(input.offset);\n  }\n  return query;\n}\n\nfunction parseEnvelopeData<T>(body: unknown): T {\n  if (body && typeof body === \"object\" && \"data\" in body) {\n    return (body as AthenaBillingEnvelope<T>).data;\n  }\n  return body as T;\n}\n\nexport interface AthenaBillingModule {\n  cancelPayment: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  cancelRefund: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  cancelSubscription: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  createCheckout: (\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  createConnection: (\n    clientName: string,\n    input: BillingCreateConnectionInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  createCustomer: (\n    input: BillingEnsureCustomerInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  createPayment: (\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  createPaymentLink: (\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  createRefund: (\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  createSubscription: (\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  createWebhook: (\n    input: BillingConnectionRefInput,\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  deleteConnection: (\n    clientName: string,\n    connectionId: string,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  deleteCustomer: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  deletePaymentLink: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  deleteWebhook: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  getCapabilities: (\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  getConnection: (\n    clientName: string,\n    connectionId: string,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  getCustomer: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  getDebugBilling: (\n    jwtSecret: string,\n    options?: AthenaBillingCallOptions\n  ) => Promise<string>;\n  getInvoice: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  getPayment: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  getPaymentLink: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  getRefund: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  getSubscription: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  getWebhook: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  ingestProviderWebhook: (\n    input: {\n      provider: string;\n      clientName: string;\n      connectionId: string;\n      body: BodyInit | Record<string, unknown> | string;\n      signatureHeaders?: Record<string, string>;\n    },\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listConnections: (\n    clientName: string,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listCustomers: (\n    input: BillingListQuery,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listGrants: (options?: AthenaBillingCallOptions) => Promise<unknown>;\n  listInvoices: (\n    input: BillingListQuery,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listPaymentLinks: (\n    input: BillingListQuery,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listPayments: (\n    input: BillingListQuery,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listPrices: (\n    input: BillingConnectionRefInput & { productId?: string },\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listProducts: (\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listProviders: (options?: AthenaBillingCallOptions) => Promise<unknown>;\n  listRefunds: (\n    input: BillingListQuery,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listSinkHelpers: (\n    query?: { targetSchema?: string; instance?: string },\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listSubscriptions: (\n    input: BillingListQuery,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listWebhookEvents: (\n    clientName: string,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  listWebhooks: (\n    input: BillingListQuery,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  provisionWebhookSinks: (\n    clientName: string,\n    input?: BillingProvisionSinksInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  reconcileDocument: (\n    clientName: string,\n    connectionId: string,\n    input: BillingReconcileInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  testWebhook: (\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  updateConnection: (\n    clientName: string,\n    connectionId: string,\n    input: BillingUpdateConnectionInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  updateCustomer: (\n    id: string,\n    input: BillingUpdateCustomerInput,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  updatePaymentLink: (\n    id: string,\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  updateSubscription: (\n    id: string,\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n  updateWebhook: (\n    id: string,\n    input: BillingConnectionRefInput,\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions\n  ) => Promise<unknown>;\n}\n\nexport function createBillingModule(\n  config: AthenaBillingClientConfig\n): AthenaBillingModule {\n  const baseUrl = normalizeAthenaGatewayBaseUrl(config.baseUrl, {\n    label: \"Athena billing base URL\",\n  });\n  const fetchImpl = config.fetchImpl ?? globalThis.fetch.bind(globalThis);\n\n  async function call<T>(\n    method: AthenaBillingHttpMethod,\n    path: string,\n    body?: unknown,\n    options?: AthenaBillingCallOptions,\n    responseType: \"json\" | \"text\" = \"json\"\n  ): Promise<T> {\n    const headers = buildAthenaRequestHeaders({\n      apiKey: options?.apiKey ?? config.apiKey,\n      callHeaders: options?.headers,\n      client: config.client,\n      configHeaders: {\n        ...(config.headers ?? {}),\n      },\n      contentType: \"application/json\",\n      profile: \"gateway\",\n      sdkHeaderValue: SDK_HEADER_VALUE,\n    });\n\n    let requestBody: BodyInit | undefined;\n    if (body !== undefined && body !== null) {\n      if (\n        typeof body === \"string\" ||\n        body instanceof Blob ||\n        body instanceof ArrayBuffer ||\n        ArrayBuffer.isView(body) ||\n        body instanceof FormData ||\n        body instanceof URLSearchParams\n      ) {\n        requestBody = body as BodyInit;\n      } else {\n        requestBody = JSON.stringify(body);\n        if (!hasHeaderIgnoreCase(headers, \"Content-Type\")) {\n          headers[\"Content-Type\"] = \"application/json\";\n        }\n      }\n    }\n\n    const targetUrl = `${baseUrl}${path.startsWith(\"/\") ? path : `/${path}`}`;\n    const response = await fetchImpl(targetUrl, {\n      body: requestBody,\n      headers,\n      method,\n      signal: options?.signal,\n    });\n\n    if (responseType === \"text\") {\n      const text = await response.text();\n      if (!response.ok) {\n        throw new AthenaBillingError({\n          body: text,\n          endpoint: path,\n          message: `Billing request failed (${response.status})`,\n          method,\n          status: response.status,\n        });\n      }\n      return text as T;\n    }\n\n    const rawText = await response.text();\n    let parsed: unknown = rawText;\n    if (rawText) {\n      try {\n        parsed = JSON.parse(rawText);\n      } catch {\n        parsed = rawText;\n      }\n    } else {\n      parsed = null;\n    }\n\n    if (!response.ok) {\n      const message =\n        parsed &&\n        typeof parsed === \"object\" &&\n        \"message\" in parsed &&\n        typeof (parsed as { message: unknown }).message === \"string\"\n          ? (parsed as { message: string }).message\n          : `Billing request failed (${response.status})`;\n      throw new AthenaBillingError({\n        body: parsed,\n        endpoint: path,\n        message,\n        method,\n        status: response.status,\n      });\n    }\n\n    return parseEnvelopeData<T>(parsed);\n  }\n\n  return {\n    cancelPayment(id, input, options) {\n      return call(\n        \"POST\",\n        appendQuery(\n          withPathParam(\"/billing/v1/payments/{id}/cancel\", \"id\", id),\n          connectionQuery(input)\n        ),\n        {},\n        options\n      );\n    },\n    cancelRefund(id, input, options) {\n      return call(\n        \"POST\",\n        appendQuery(\n          withPathParam(\"/billing/v1/refunds/{id}/cancel\", \"id\", id),\n          connectionQuery(input)\n        ),\n        {},\n        options\n      );\n    },\n    cancelSubscription(id, input, options) {\n      return call(\n        \"POST\",\n        appendQuery(\n          withPathParam(\"/billing/v1/subscriptions/{id}/cancel\", \"id\", id),\n          connectionQuery(input)\n        ),\n        {},\n        options\n      );\n    },\n    createCheckout(body, options) {\n      return call(\"POST\", \"/billing/v1/checkouts\", body, options);\n    },\n    createConnection(clientName, input, options) {\n      return call(\n        \"POST\",\n        withPathParam(\n          \"/admin/billing/clients/{client_name}/connections\",\n          \"client_name\",\n          clientName\n        ),\n        {\n          config: input.config,\n          credentialKind: input.credentialKind,\n          metadata: input.metadata,\n          mode: input.mode,\n          ownerId: input.ownerId,\n          ownerKind: input.ownerKind,\n          provider: input.provider,\n          providerAccountId: input.providerAccountId,\n          providerProfileId: input.providerProfileId,\n          scopes: input.scopes,\n          status: input.status,\n        },\n        options\n      );\n    },\n    createCustomer(input, options) {\n      return call(\n        \"POST\",\n        \"/billing/v1/customers\",\n        {\n          clientName: input.clientName,\n          connectionId: input.connectionId,\n          email: input.email,\n          idempotencyKey: input.idempotencyKey,\n          metadata: input.metadata ?? {},\n          name: input.name,\n        },\n        options\n      );\n    },\n    createPayment(body, options) {\n      return call(\"POST\", \"/billing/v1/payments\", body, options);\n    },\n    createPaymentLink(body, options) {\n      return call(\"POST\", \"/billing/v1/payment-links\", body, options);\n    },\n    createRefund(body, options) {\n      return call(\"POST\", \"/billing/v1/refunds\", body, options);\n    },\n    createSubscription(body, options) {\n      return call(\"POST\", \"/billing/v1/subscriptions\", body, options);\n    },\n    createWebhook(input, body, options) {\n      return call(\n        \"POST\",\n        appendQuery(\"/billing/v1/webhooks\", connectionQuery(input)),\n        body,\n        options\n      );\n    },\n    deleteConnection(clientName, connectionId, options) {\n      return call(\n        \"DELETE\",\n        withPathParam(\n          withPathParam(\n            \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n            \"client_name\",\n            clientName\n          ),\n          \"connection_id\",\n          connectionId\n        ),\n        undefined,\n        options\n      );\n    },\n    deleteCustomer(id, input, options) {\n      return call(\n        \"DELETE\",\n        appendQuery(\n          withPathParam(\"/billing/v1/customers/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    deletePaymentLink(id, input, options) {\n      return call(\n        \"DELETE\",\n        appendQuery(\n          withPathParam(\"/billing/v1/payment-links/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    deleteWebhook(id, input, options) {\n      return call(\n        \"DELETE\",\n        appendQuery(\n          withPathParam(\"/billing/v1/webhooks/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    getCapabilities(input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/billing/v1/capabilities\", connectionQuery(input)),\n        undefined,\n        options\n      );\n    },\n    getConnection(clientName, connectionId, options) {\n      return call(\n        \"GET\",\n        withPathParam(\n          withPathParam(\n            \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n            \"client_name\",\n            clientName\n          ),\n          \"connection_id\",\n          connectionId\n        ),\n        undefined,\n        options\n      );\n    },\n    getCustomer(id, input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\n          withPathParam(\"/billing/v1/customers/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    getDebugBilling(jwtSecret, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/debug/billing\", { jwt_secret: jwtSecret }),\n        undefined,\n        options,\n        \"text\"\n      );\n    },\n    getInvoice(id, input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\n          withPathParam(\"/billing/v1/invoices/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    getPayment(id, input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\n          withPathParam(\"/billing/v1/payments/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    getPaymentLink(id, input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\n          withPathParam(\"/billing/v1/payment-links/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    getRefund(id, input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\n          withPathParam(\"/billing/v1/refunds/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    getSubscription(id, input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\n          withPathParam(\"/billing/v1/subscriptions/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    getWebhook(id, input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\n          withPathParam(\"/billing/v1/webhooks/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        undefined,\n        options\n      );\n    },\n    ingestProviderWebhook(input, options) {\n      const path = withPathParam(\n        withPathParam(\n          withPathParam(\n            \"/billing/providers/{provider}/clients/{client_name}/connections/{connection_id}/webhook\",\n            \"provider\",\n            input.provider\n          ),\n          \"client_name\",\n          input.clientName\n        ),\n        \"connection_id\",\n        input.connectionId\n      );\n      return call(\"POST\", path, input.body, {\n        ...options,\n        headers: {\n          ...(options?.headers ?? {}),\n          ...(input.signatureHeaders ?? {}),\n        },\n      });\n    },\n    listConnections(clientName, options) {\n      return call(\n        \"GET\",\n        withPathParam(\n          \"/admin/billing/clients/{client_name}/connections\",\n          \"client_name\",\n          clientName\n        ),\n        undefined,\n        options\n      );\n    },\n    listCustomers(input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/billing/v1/customers\", connectionQuery(input)),\n        undefined,\n        options\n      );\n    },\n    listGrants(options) {\n      return call(\"GET\", \"/admin/billing/grants\", undefined, options);\n    },\n    listInvoices(input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/billing/v1/invoices\", connectionQuery(input)),\n        undefined,\n        options\n      );\n    },\n    listPaymentLinks(input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/billing/v1/payment-links\", connectionQuery(input)),\n        undefined,\n        options\n      );\n    },\n    listPayments(input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/billing/v1/payments\", connectionQuery(input)),\n        undefined,\n        options\n      );\n    },\n    listPrices(input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/billing/v1/prices\", {\n          ...connectionQuery(input),\n          ...(input.productId ? { productId: input.productId } : {}),\n        }),\n        undefined,\n        options\n      );\n    },\n    listProducts(input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/billing/v1/products\", connectionQuery(input)),\n        undefined,\n        options\n      );\n    },\n    listProviders(options) {\n      return call(\"GET\", \"/admin/billing/providers\", undefined, options);\n    },\n    listRefunds(input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/billing/v1/refunds\", connectionQuery(input)),\n        undefined,\n        options\n      );\n    },\n    listSinkHelpers(query, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/admin/webhook-sinks/helpers/billing\", {\n          instance: query?.instance,\n          targetSchema: query?.targetSchema,\n        }),\n        undefined,\n        options\n      );\n    },\n    listSubscriptions(input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/billing/v1/subscriptions\", connectionQuery(input)),\n        undefined,\n        options\n      );\n    },\n    listWebhookEvents(clientName, options) {\n      return call(\n        \"GET\",\n        withPathParam(\n          \"/admin/billing/clients/{client_name}/webhook-events\",\n          \"client_name\",\n          clientName\n        ),\n        undefined,\n        options\n      );\n    },\n    listWebhooks(input, options) {\n      return call(\n        \"GET\",\n        appendQuery(\"/billing/v1/webhooks\", connectionQuery(input)),\n        undefined,\n        options\n      );\n    },\n    provisionWebhookSinks(clientName, input, options) {\n      return call(\n        \"POST\",\n        appendQuery(\n          withPathParam(\n            \"/admin/billing/clients/{client_name}/webhook-sinks/provision\",\n            \"client_name\",\n            clientName\n          ),\n          {\n            instance: input?.instance,\n            targetSchema: input?.targetSchema,\n          }\n        ),\n        {},\n        options\n      );\n    },\n    reconcileDocument(clientName, connectionId, input, options) {\n      return call(\n        \"POST\",\n        withPathParam(\n          withPathParam(\n            \"/admin/billing/clients/{client_name}/connections/{connection_id}/reconcile\",\n            \"client_name\",\n            clientName\n          ),\n          \"connection_id\",\n          connectionId\n        ),\n        {\n          customerId: input.customerId,\n          resourceId: input.resourceId,\n          resourceKind: input.resourceKind,\n        },\n        options\n      );\n    },\n    testWebhook(id, input, options) {\n      return call(\n        \"POST\",\n        appendQuery(\n          withPathParam(\"/billing/v1/webhooks/{id}/test\", \"id\", id),\n          connectionQuery(input)\n        ),\n        {},\n        options\n      );\n    },\n    updateConnection(clientName, connectionId, input, options) {\n      return call(\n        \"PATCH\",\n        withPathParam(\n          withPathParam(\n            \"/admin/billing/clients/{client_name}/connections/{connection_id}\",\n            \"client_name\",\n            clientName\n          ),\n          \"connection_id\",\n          connectionId\n        ),\n        input,\n        options\n      );\n    },\n    updateCustomer(id, input, options) {\n      return call(\n        \"PATCH\",\n        withPathParam(\"/billing/v1/customers/{id}\", \"id\", id),\n        {\n          clientName: input.clientName,\n          connectionId: input.connectionId,\n          email: input.email,\n          name: input.name,\n        },\n        options\n      );\n    },\n    updatePaymentLink(id, body, options) {\n      return call(\n        \"PATCH\",\n        withPathParam(\"/billing/v1/payment-links/{id}\", \"id\", id),\n        body,\n        options\n      );\n    },\n    updateSubscription(id, body, options) {\n      return call(\n        \"PATCH\",\n        withPathParam(\"/billing/v1/subscriptions/{id}\", \"id\", id),\n        body,\n        options\n      );\n    },\n    updateWebhook(id, input, body, options) {\n      return call(\n        \"PATCH\",\n        appendQuery(\n          withPathParam(\"/billing/v1/webhooks/{id}\", \"id\", id),\n          connectionQuery(input)\n        ),\n        body,\n        options\n      );\n    },\n  };\n}\n","import type {\n  AthenaOperationContext,\n  NormalizedAthenaError,\n  RetryConfig,\n} from \"./auxiliaries.ts\";\nimport { normalizeAthenaError, withRetry } from \"./auxiliaries.ts\";\nimport type {\n  AthenaGatewayErrorDetails,\n  AthenaGatewayResponse,\n} from \"./gateway/types.ts\";\n\nconst ATHENA_NORMALIZED_ERROR_KEY = \"__athenaNormalizedError\" as const;\n\nconst READ_RETRY_CONFIG: RetryConfig = {\n  backoff: \"exponential\",\n  baseDelayMs: 100,\n  jitter: true,\n  maxDelayMs: 1000,\n  retries: 2,\n};\n\nexport interface AthenaResult<T> {\n  count?: number | null;\n  data: T | null;\n  error: AthenaResultError | null;\n  /**\n   * @deprecated Prefer `error?.gatewayCode`, `error?.hint`, and related fields on `error`.\n   */\n  errorDetails?: AthenaGatewayErrorDetails | null;\n  raw: unknown;\n  status: number;\n  statusText?: string | null;\n}\n\nexport interface AthenaResultError {\n  athenaCode: NormalizedAthenaError[\"code\"];\n  category: NormalizedAthenaError[\"category\"];\n  cause?: string;\n  code: string | null;\n  constraint?: string;\n  details: unknown | null;\n  endpoint?: AthenaGatewayErrorDetails[\"endpoint\"];\n  gatewayCode?: AthenaGatewayErrorDetails[\"code\"] | null;\n  hint: string | null;\n  kind: NormalizedAthenaError[\"kind\"];\n  message: string;\n  method?: AthenaGatewayErrorDetails[\"method\"];\n  operation?: string;\n  raw: unknown;\n  requestId?: string;\n  retryable: boolean;\n  status: number;\n  statusText: string | null;\n  table?: string;\n}\n\nexport type AthenaResultFormatter = <T>(\n  response: AthenaGatewayResponse<T>,\n  context?: AthenaOperationContext\n) => AthenaResult<T>;\n\nfunction formatResult<T>(response: AthenaGatewayResponse<T>): AthenaResult<T> {\n  const result: AthenaResult<T> = {\n    data: response.data ?? null,\n    error: null,\n    errorDetails: response.errorDetails ?? null,\n    raw: response.raw,\n    status: response.status,\n    statusText: response.statusText ?? null,\n  };\n  if (response.count !== undefined) {\n    result.count = response.count;\n  }\n  return result;\n}\n\nfunction attachNormalizedError<T>(\n  result: AthenaResult<T>,\n  normalizedError: NormalizedAthenaError\n): void {\n  Object.defineProperty(result, ATHENA_NORMALIZED_ERROR_KEY, {\n    configurable: true,\n    enumerable: false,\n    value: normalizedError,\n    writable: false,\n  });\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\n  for (const value of values) {\n    if (typeof value === \"string\" && value.trim().length > 0) {\n      return value.trim();\n    }\n  }\n  return undefined;\n}\n\nfunction resolveStructuredErrorPayload(\n  raw: unknown\n): Record<string, unknown> | null {\n  if (!isRecord(raw)) {\n    return null;\n  }\n  return isRecord(raw.error) ? raw.error : raw;\n}\n\nfunction resolveStructuredErrorDetails(\n  payload: Record<string, unknown> | null,\n  message: string\n): unknown | null {\n  if (!(payload && \"details\" in payload)) {\n    return null;\n  }\n  const details = payload.details;\n  if (details === null) {\n    return null;\n  }\n  if (typeof details === \"string\" && details.trim() === message.trim()) {\n    return null;\n  }\n  return details;\n}\n\nfunction createResultError<T>(\n  response: AthenaGatewayResponse<T>,\n  result: AthenaResult<T>,\n  normalized: NormalizedAthenaError\n): AthenaResultError {\n  const rawRecord = isRecord(response.raw) ? response.raw : null;\n  const payload = resolveStructuredErrorPayload(response.raw);\n  const message =\n    firstNonEmptyString(\n      response.error,\n      payload?.message,\n      payload?.error,\n      payload?.details,\n      response.errorDetails?.message,\n      normalized.message\n    ) ?? normalized.message;\n  const statusText =\n    firstNonEmptyString(response.statusText, rawRecord?.statusText) ?? null;\n  const hint =\n    firstNonEmptyString(payload?.hint, response.errorDetails?.hint) ?? null;\n  const code = firstNonEmptyString(payload?.code) ?? normalized.code;\n  const details =\n    resolveStructuredErrorDetails(payload, message) ??\n    response.errorDetails?.cause ??\n    null;\n\n  return {\n    athenaCode: normalized.code,\n    category: normalized.category,\n    cause: response.errorDetails?.cause,\n    code,\n    constraint: normalized.constraint,\n    details,\n    endpoint: response.errorDetails?.endpoint,\n    gatewayCode: response.errorDetails?.code ?? null,\n    hint,\n    kind: normalized.kind,\n    message,\n    method: response.errorDetails?.method,\n    operation: normalized.operation,\n    raw: result.raw,\n    requestId: response.errorDetails?.requestId,\n    retryable: normalized.retryable,\n    status: result.status,\n    statusText,\n    table: normalized.table,\n  };\n}\n\nexport function createResultFormatter(): AthenaResultFormatter {\n  return <T>(\n    response: AthenaGatewayResponse<T>,\n    context?: AthenaOperationContext\n  ): AthenaResult<T> => {\n    const result = formatResult(response);\n    // D1 and some transports use `error: undefined` on success; only treat\n    // non-nullish error / errorDetails as failures.\n    if (response.error == null && response.errorDetails == null) {\n      return result;\n    }\n    const normalizedError = normalizeAthenaError(\n      {\n        ...result,\n        error: response.error ?? response.errorDetails?.message ?? null,\n      },\n      context\n    );\n    result.error = createResultError(response, result, normalizedError);\n    attachNormalizedError(result, normalizedError);\n    return result;\n  };\n}\n\nexport async function executeRead<T>(\n  behavior: { retryReads?: boolean } | undefined,\n  runner: () => Promise<AthenaResult<T>>\n): Promise<AthenaResult<T>> {\n  if (!behavior?.retryReads) {\n    return runner();\n  }\n\n  let lastRetryableResult: AthenaResult<T> | undefined;\n  let lastRetrySignal: AthenaResultError | null = null;\n  try {\n    return await withRetry(\n      {\n        ...READ_RETRY_CONFIG,\n        shouldRetry: (error) =>\n          error === lastRetrySignal || normalizeAthenaError(error).retryable,\n      },\n      async () => {\n        const result = await runner();\n        if (result.error?.retryable) {\n          lastRetryableResult = result;\n          lastRetrySignal = result.error;\n          throw lastRetrySignal;\n        }\n        return result;\n      }\n    );\n  } catch (error) {\n    if (lastRetryableResult && error === lastRetrySignal) {\n      return lastRetryableResult;\n    }\n    throw error;\n  }\n}\n\nexport function toSingleResult<Result>(\n  response: AthenaResult<Result>\n): AthenaResult<\n  Result extends Array<infer Item> ? Item | null : Result | null\n> {\n  const payload = response.data;\n  const singleData = Array.isArray(payload)\n    ? payload.length\n      ? payload[0]\n      : null\n    : (payload ?? null);\n  return {\n    ...response,\n    data: singleData as Result extends Array<infer Item>\n      ? Item | null\n      : Result | null,\n  };\n}\n","import type {\n  AthenaFetchPayload,\n  AthenaGatewayCondition,\n  AthenaJsonArray,\n  AthenaJsonObject,\n  AthenaJsonValue,\n  AthenaSortBy,\n} from \"./types.ts\";\n\nconst IDENTIFIER_SEGMENT_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\nfunction isIdentifierPath(value: string): boolean {\n  const segments = value.split(\".\").map((segment) => segment.trim());\n  return (\n    segments.length > 1 &&\n    segments.every((segment) => IDENTIFIER_SEGMENT_PATTERN.test(segment))\n  );\n}\n\nfunction extractRelationHead(raw: string): string {\n  const trimmed = raw.trim();\n  if (!trimmed) {\n    return \"\";\n  }\n\n  const aliasIndex = trimmed.indexOf(\":\");\n  const withoutAlias =\n    aliasIndex >= 0 ? trimmed.slice(aliasIndex + 1).trim() : trimmed;\n  const modifierIndex = withoutAlias.indexOf(\"!\");\n  return (\n    modifierIndex >= 0 ? withoutAlias.slice(0, modifierIndex) : withoutAlias\n  ).trim();\n}\n\nfunction hasSchemaQualifiedRelationToken(select: string): boolean {\n  let singleQuoted = false;\n  let doubleQuoted = false;\n  let tokenStart = 0;\n\n  for (let index = 0; index < select.length; index += 1) {\n    const char = select[index];\n    const next = index + 1 < select.length ? select[index + 1] : \"\";\n\n    if (singleQuoted) {\n      if (char === \"'\" && next === \"'\") {\n        index += 1;\n        continue;\n      }\n      if (char === \"'\") {\n        singleQuoted = false;\n      }\n      continue;\n    }\n\n    if (doubleQuoted) {\n      if (char === '\"' && next === '\"') {\n        index += 1;\n        continue;\n      }\n      if (char === '\"') {\n        doubleQuoted = false;\n      }\n      continue;\n    }\n\n    if (char === \"'\") {\n      singleQuoted = true;\n      continue;\n    }\n\n    if (char === '\"') {\n      doubleQuoted = true;\n      continue;\n    }\n\n    if (char === \"(\") {\n      const relationHead = extractRelationHead(select.slice(tokenStart, index));\n      if (isIdentifierPath(relationHead)) {\n        return true;\n      }\n      tokenStart = index + 1;\n      continue;\n    }\n\n    if (char === \",\" || char === \")\") {\n      tokenStart = index + 1;\n    }\n  }\n\n  return false;\n}\n\nfunction toStructuredSelectString(columns: string | string[]): string {\n  return Array.isArray(columns) ? columns.join(\",\") : columns;\n}\n\ntype StructuredWhereOperand =\n  | AthenaJsonValue\n  | AthenaJsonArray\n  | AthenaJsonObject;\n\nfunction buildStructuredWhere(\n  conditions: AthenaGatewayCondition[] | undefined\n): AthenaJsonObject | null | undefined {\n  if (!conditions?.length) {\n    return;\n  }\n\n  const where: AthenaJsonObject = {};\n\n  for (const condition of conditions) {\n    if (!condition.column) {\n      return null;\n    }\n    if (condition.value_cast !== undefined) {\n      return null;\n    }\n\n    const operand = condition.value as StructuredWhereOperand | undefined;\n    const operator = condition.operator;\n    if (operator === \"eq\") {\n      if (operand === undefined) {\n        return null;\n      }\n    } else if (operator === \"neq\" || operator === \"gt\" || operator === \"lt\") {\n      if (operand === undefined) {\n        return null;\n      }\n    } else if (operator === \"in\") {\n      if (!Array.isArray(operand)) {\n        return null;\n      }\n    } else {\n      return null;\n    }\n\n    const existing = where[condition.column];\n    if (\n      existing !== undefined &&\n      (typeof existing !== \"object\" ||\n        existing === null ||\n        Array.isArray(existing))\n    ) {\n      return null;\n    }\n\n    const next = (existing as AthenaJsonObject | undefined) ?? {};\n    if (Object.hasOwn(next, operator)) {\n      return null;\n    }\n    next[operator] = operand as AthenaJsonValue | AthenaJsonArray;\n    where[condition.column] = next;\n  }\n\n  return where;\n}\n\nfunction buildStructuredOrderBy(\n  order: AthenaSortBy | undefined\n): AthenaJsonObject | undefined {\n  if (!order?.field) {\n    return;\n  }\n  return {\n    [order.field]: order.direction === \"descending\" ? \"desc\" : \"asc\",\n  };\n}\n\nexport interface StructuredSelectTransportInput {\n  columns: string | string[];\n  conditions?: AthenaGatewayCondition[];\n  count?: \"exact\" | \"planned\" | \"estimated\";\n  head?: boolean;\n  limit?: number;\n  offset?: number;\n  order?: AthenaSortBy;\n  stripNulls: boolean;\n  tableName: string;\n}\n\nexport interface StructuredSelectTransportResult {\n  payload: AthenaFetchPayload;\n  select: string;\n}\n\nexport function buildStructuredSelectTransport(\n  input: StructuredSelectTransportInput\n): StructuredSelectTransportResult | null | { error: string } {\n  const select = toStructuredSelectString(input.columns).trim();\n  if (!select || select === \"*\") {\n    return null;\n  }\n\n  if (!hasSchemaQualifiedRelationToken(select)) {\n    return null;\n  }\n\n  if (input.count !== undefined || input.head !== undefined) {\n    return {\n      error:\n        \"Schema-qualified nested select strings require structured select transport, which does not support count/head options in athena-js yet.\",\n    };\n  }\n\n  const where = buildStructuredWhere(input.conditions);\n  if (where === null) {\n    return {\n      error:\n        \"Schema-qualified nested select strings only support eq, neq, gt, lt, and in filters in athena-js structured select transport.\",\n    };\n  }\n\n  return {\n    payload: {\n      limit: input.limit,\n      offset: input.offset,\n      orderBy: buildStructuredOrderBy(input.order),\n      select,\n      strip_nulls: input.stripNulls,\n      table_name: input.tableName,\n      where,\n    },\n    select,\n  };\n}\n","import type {\n  AthenaConditionArrayValue,\n  AthenaConditionOperator,\n  AthenaConditionValue,\n  AthenaGatewayCondition,\n  AthenaJsonValue,\n  AthenaSortBy,\n} from \"./gateway/types.ts\";\nimport type {\n  AnyModelDef,\n  DatabaseDef,\n  ModelDef,\n  ModelRelationMetadata,\n  RegistryDef,\n  RowOf,\n  SchemaDef,\n} from \"./schema/types.ts\";\nimport type {\n  AthenaColumnKey,\n  HasKnownSelectColumns,\n} from \"./select-column-types.ts\";\n\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>;\ntype FilterColumnKey<Row> = Extract<keyof NonNullable<Row>, string>;\ntype ResolvedFilterColumnKey<Row> = [FilterColumnKey<Row>] extends [never]\n  ? string\n  : FilterColumnKey<Row>;\ntype KnownSelectColumnKey<Row> = AthenaColumnKey<Row>;\n\nconst UUID_PATTERN =\n  /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\ntype AthenaFilterOperator =\n  | \"eq\"\n  | \"neq\"\n  | \"gt\"\n  | \"gte\"\n  | \"lt\"\n  | \"lte\"\n  | \"like\"\n  | \"ilike\"\n  | \"is\"\n  | \"in\"\n  | \"contains\"\n  | \"containedBy\";\n\ntype AthenaWherePrimitive = AthenaConditionValue;\n\nexport interface AthenaWhereOperatorInput {\n  containedBy?: AthenaConditionArrayValue;\n  contains?: AthenaConditionArrayValue;\n  eq?: AthenaConditionValue;\n  gt?: AthenaConditionValue;\n  gte?: AthenaConditionValue;\n  ilike?: AthenaConditionValue;\n  in?: AthenaConditionArrayValue;\n  is?: AthenaConditionValue;\n  like?: AthenaConditionValue;\n  lt?: AthenaConditionValue;\n  lte?: AthenaConditionValue;\n  neq?: AthenaConditionValue;\n}\n\ntype AthenaWhereColumnInput<Row = AthenaRowShape> = Partial<\n  Record<\n    ResolvedFilterColumnKey<Row>,\n    AthenaWherePrimitive | AthenaWhereOperatorInput\n  >\n>;\n\ntype AthenaBooleanSafeOperator = Exclude<\n  AthenaFilterOperator,\n  \"in\" | \"contains\" | \"containedBy\"\n>;\n\ntype AthenaWhereBooleanSafeOperatorInput = Partial<\n  Record<AthenaBooleanSafeOperator, AthenaConditionValue>\n>;\n\ntype AthenaWhereBooleanNotOperatorInput = {\n  [K in AthenaBooleanSafeOperator]: {\n    [P in K]: AthenaConditionValue;\n  } & Partial<Record<Exclude<AthenaBooleanSafeOperator, K>, never>>;\n}[AthenaBooleanSafeOperator];\n\ntype AthenaStrictBooleanOperand<Keys extends string, Value> = {\n  [K in Keys]: {\n    [P in K]: Value;\n  } & Partial<Record<Exclude<Keys, K>, never>>;\n}[Keys];\n\ntype AthenaNonEmptyArray<T> = [T, ...T[]];\n\nexport type AthenaWhereBooleanOperand<Row = AthenaRowShape> =\n  string extends ResolvedFilterColumnKey<Row>\n    ? AthenaWhereColumnInput<Row>\n    : AthenaStrictBooleanOperand<\n        ResolvedFilterColumnKey<Row>,\n        AthenaWherePrimitive | AthenaWhereBooleanSafeOperatorInput\n      >;\n\ntype AthenaWhereNotOperand<Row = AthenaRowShape> =\n  string extends ResolvedFilterColumnKey<Row>\n    ? AthenaWhereColumnInput<Row>\n    : AthenaStrictBooleanOperand<\n        ResolvedFilterColumnKey<Row>,\n        AthenaWherePrimitive | AthenaWhereBooleanNotOperatorInput\n      >;\n\nexport type AthenaWhere<Row = AthenaRowShape> = AthenaWhereColumnInput<Row> & {\n  or?: string extends ResolvedFilterColumnKey<Row>\n    ? AthenaWhereColumnInput<Row>[]\n    : AthenaNonEmptyArray<AthenaWhereBooleanOperand<Row>>;\n  not?: AthenaWhereNotOperand<Row>;\n};\n\nexport interface AthenaRelationSelectNode<\n  TSelect extends AthenaSelectShape = AthenaSelectShape,\n> {\n  as?: string;\n  schema?: string;\n  select: TSelect;\n  via?: string;\n}\n\nexport type AthenaSelectShape = Record<\n  string,\n  true | AthenaRelationSelectNode<AthenaSelectShape>\n>;\n\ntype AthenaAllowedRelationSelectNodeKey = \"select\" | \"as\" | \"via\" | \"schema\";\n\n/**\n * Structural validation only (relation node shape). Nested relation target rows\n * are not model-checked here unless a richer context path is wired later.\n */\ntype AthenaStructuralValidatedSelectShape<TSelect> = {\n  [K in keyof TSelect]: TSelect[K] extends true\n    ? true\n    : AthenaValidatedRelationSelectNode<TSelect[K]>;\n};\n\ntype AthenaValidatedRelationSelectNode<TNode> = TNode extends {\n  select: infer TChild;\n}\n  ? Exclude<keyof TNode, AthenaAllowedRelationSelectNodeKey> extends never\n    ? TNode extends { schema: string; via: string }\n      ? never\n      : TChild extends Record<string, unknown>\n        ? {\n            [K in keyof TNode]: K extends \"select\"\n              ? AthenaStructuralValidatedSelectShape<TChild>\n              : K extends AthenaAllowedRelationSelectNodeKey\n                ? TNode[K]\n                : never;\n          }\n        : never\n    : never\n  : never;\n\n/**\n * Compile-time validation for `findMany({ select })`.\n *\n * - When `Row` has known model keys: scalar `true` entries must use those keys.\n * - Relation nodes (`{ select: ... }`) keep structural validation and may use\n *   non-row keys (relation names are not row columns).\n * - When `Row` is untyped: free-form keys (same as pre-model behavior).\n */\nexport type AthenaValidatedSelectShape<Row, TSelect> =\n  HasKnownSelectColumns<Row> extends true\n    ? {\n        [K in keyof TSelect]: TSelect[K] extends true\n          ? K extends KnownSelectColumnKey<Row>\n            ? true\n            : never\n          : AthenaValidatedRelationSelectNode<TSelect[K]>;\n      }\n    : AthenaStructuralValidatedSelectShape<TSelect>;\n\ntype GenericRegistryDef = RegistryDef<\n  Record<\n    string,\n    DatabaseDef<Record<string, SchemaDef<Record<string, AnyModelDef>>>>\n  >\n>;\n\ntype AthenaOrderByDirectionInput =\n  | \"asc\"\n  | \"desc\"\n  | \"ascending\"\n  | \"descending\"\n  | boolean\n  | {\n      ascending?: boolean;\n    };\n\nexport type AthenaOrderBy<Row = AthenaRowShape> =\n  | {\n      column: ResolvedFilterColumnKey<Row>;\n      ascending?: boolean;\n    }\n  | Partial<Record<ResolvedFilterColumnKey<Row>, AthenaOrderByDirectionInput>>;\n\nexport interface AthenaFindManyOptions<\n  Row = AthenaRowShape,\n  TSelect extends AthenaSelectShape = AthenaSelectShape,\n> {\n  limit?: number;\n  orderBy?: AthenaOrderBy<Row>;\n  /**\n   * Object select tree. Callers should pass through `findMany(...)`, which\n   * intersects this with `AthenaValidatedSelectShape<Row, TSelect>` so model\n   * column keys are checked after `TSelect` is inferred from the literal.\n   */\n  select: TSelect;\n  where?: AthenaWhere<Row>;\n}\n\ninterface AthenaModelContext<\n  TRegistry extends GenericRegistryDef = GenericRegistryDef,\n  TDatabase extends string = string,\n  TSchema extends string = string,\n  TModel extends AnyModelDef = AnyModelDef,\n> {\n  database: TDatabase;\n  model: TModel;\n  registry: TRegistry;\n  schema: TSchema;\n}\n\ntype Simplify<T> = {\n  [K in keyof T]: T[K];\n} & {};\n\ntype ContextRegistry<TContext> =\n  TContext extends AthenaModelContext<\n    infer TRegistry,\n    string,\n    string,\n    AnyModelDef\n  >\n    ? TRegistry\n    : never;\n\ntype ContextDatabase<TContext> =\n  TContext extends AthenaModelContext<\n    GenericRegistryDef,\n    infer TDatabase,\n    string,\n    AnyModelDef\n  >\n    ? TDatabase\n    : never;\n\ntype ContextModel<TContext> =\n  TContext extends AthenaModelContext<\n    GenericRegistryDef,\n    string,\n    string,\n    infer TModel\n  >\n    ? TModel\n    : never;\n\ntype ModelMetaOf<TContext> =\n  ContextModel<TContext> extends ModelDef<\n    unknown,\n    unknown,\n    unknown,\n    infer TMeta\n  >\n    ? TMeta\n    : never;\n\ntype ModelRelationsOf<TContext> = NonNullable<\n  ModelMetaOf<TContext>[\"relations\"]\n>;\n\ntype SelectedResultKey<TKey extends string, TValue> = TValue extends {\n  as: infer TAlias extends string;\n}\n  ? TAlias\n  : TKey;\n\ntype ScalarSelectionResult<Row, TSelect extends AthenaSelectShape> = {\n  [TKey in Extract<keyof TSelect, string> as TSelect[TKey] extends true\n    ? TKey\n    : never]-?: TKey extends keyof NonNullable<Row>\n    ? NonNullable<Row>[TKey]\n    : unknown;\n};\n\ntype RelationByKey<\n  TContext,\n  TKey extends string,\n> = TKey extends keyof ModelRelationsOf<TContext>\n  ? ModelRelationsOf<TContext>[TKey]\n  : never;\n\ntype RelationByVia<TContext, TVia extends string> = {\n  [TKey in keyof ModelRelationsOf<TContext>]: ModelRelationsOf<TContext>[TKey] extends infer TRelation\n    ? TRelation extends ModelRelationMetadata\n      ? TVia extends TRelation[\"sourceColumns\"][number]\n        ? TRelation\n        : never\n      : never\n    : never;\n}[keyof ModelRelationsOf<TContext>];\n\ntype ResolvedRelation<TContext, TKey extends string, TValue> =\n  RelationByKey<TContext, TKey> extends never\n    ? TValue extends { via: infer TVia extends string }\n      ? RelationByVia<TContext, TVia>\n      : never\n    : RelationByKey<TContext, TKey>;\n\ntype TargetDatabaseName<\n  TContext,\n  TRelation extends ModelRelationMetadata,\n> = TRelation[\"targetDatabase\"] extends string\n  ? TRelation[\"targetDatabase\"]\n  : ContextDatabase<TContext>;\n\ntype ResolveTargetModel<TContext, TRelation extends ModelRelationMetadata> =\n  ContextRegistry<TContext> extends infer TRegistry\n    ? TRegistry extends GenericRegistryDef\n      ? TargetDatabaseName<TContext, TRelation> extends keyof TRegistry & string\n        ? TRelation[\"targetSchema\"] extends keyof TRegistry[TargetDatabaseName<\n            TContext,\n            TRelation\n          >][\"schemas\"] &\n            string\n          ? TRelation[\"targetModel\"] extends keyof TRegistry[TargetDatabaseName<\n              TContext,\n              TRelation\n            >][\"schemas\"][TRelation[\"targetSchema\"]][\"models\"] &\n              string\n            ? TRegistry[TargetDatabaseName<\n                TContext,\n                TRelation\n              >][\"schemas\"][TRelation[\"targetSchema\"]][\"models\"][TRelation[\"targetModel\"]]\n            : never\n          : never\n        : never\n      : never\n    : never;\n\ntype RelationResultValue<\n  TRelation extends ModelRelationMetadata,\n  TValue,\n  TContext,\n> =\n  TValue extends AthenaRelationSelectNode<infer TChildSelect>\n    ? ResolveTargetModel<TContext, TRelation> extends infer TTargetModel\n      ? TTargetModel extends AnyModelDef\n        ? TRelation[\"kind\"] extends \"one-to-many\" | \"many-to-many\"\n          ? AthenaFindManyResult<\n              RowOf<TTargetModel>,\n              TChildSelect,\n              AthenaModelContext<\n                ContextRegistry<TContext>,\n                TargetDatabaseName<TContext, TRelation>,\n                TRelation[\"targetSchema\"],\n                TTargetModel\n              >\n            >[]\n          : AthenaFindManyResult<\n              RowOf<TTargetModel>,\n              TChildSelect,\n              AthenaModelContext<\n                ContextRegistry<TContext>,\n                TargetDatabaseName<TContext, TRelation>,\n                TRelation[\"targetSchema\"],\n                TTargetModel\n              >\n            > | null\n        : unknown\n      : unknown\n    : never;\n\ntype RelationSelectionResult<TContext, TSelect extends AthenaSelectShape> = {\n  [TKey in Extract<\n    keyof TSelect,\n    string\n  > as TSelect[TKey] extends AthenaRelationSelectNode<AthenaSelectShape>\n    ? SelectedResultKey<TKey, TSelect[TKey]>\n    : never]-?: ResolvedRelation<\n    TContext,\n    TKey,\n    TSelect[TKey]\n  > extends infer TRelation\n    ? TRelation extends ModelRelationMetadata\n      ? RelationResultValue<TRelation, TSelect[TKey], TContext>\n      : unknown\n    : unknown;\n};\n\nexport type AthenaFindManyResult<\n  Row,\n  TSelect extends AthenaSelectShape,\n  TContext = unknown,\n> = Simplify<\n  ScalarSelectionResult<Row, TSelect> &\n    RelationSelectionResult<TContext, TSelect>\n>;\n\nconst FILTER_OPERATORS = new Set<AthenaFilterOperator>([\n  \"eq\",\n  \"neq\",\n  \"gt\",\n  \"gte\",\n  \"lt\",\n  \"lte\",\n  \"like\",\n  \"ilike\",\n  \"is\",\n  \"in\",\n  \"contains\",\n  \"containedBy\",\n]);\n\nconst BOOLEAN_SAFE_OPERATORS = new Set<AthenaBooleanSafeOperator>([\n  \"eq\",\n  \"neq\",\n  \"gt\",\n  \"gte\",\n  \"lt\",\n  \"lte\",\n  \"like\",\n  \"ilike\",\n  \"is\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isUuidString(value: string): boolean {\n  return UUID_PATTERN.test(value.trim());\n}\n\nfunction isUuidIdentifierColumn(column: string): boolean {\n  return (\n    column === \"id\" ||\n    /(?:^|_)uuid(?:_|$)/i.test(column) ||\n    /_id$/i.test(column)\n  );\n}\n\nexport function shouldUseUuidTextComparison(\n  column: string,\n  value: AthenaConditionValue\n): boolean {\n  return (\n    typeof value === \"string\" &&\n    isUuidString(value) &&\n    isUuidIdentifierColumn(column)\n  );\n}\n\nfunction isRelationSelectNode(\n  value: unknown\n): value is AthenaRelationSelectNode {\n  return isRecord(value) && isRecord(value.select);\n}\n\nfunction normalizeIdentifier(value: string, label: string): string {\n  const normalized = value.trim();\n  if (!normalized) {\n    throw new Error(`${label} must be a non-empty string`);\n  }\n  return normalized;\n}\n\nfunction stringifyFilterValue(\n  value: AthenaConditionValue | AthenaConditionArrayValue | string\n): string {\n  if (Array.isArray(value)) {\n    return value.join(\",\");\n  }\n  return String(value);\n}\n\nfunction buildGatewayCondition(\n  operator: AthenaConditionOperator,\n  column?: string,\n  value?: AthenaConditionValue | AthenaConditionArrayValue | string\n): AthenaGatewayCondition {\n  const condition: AthenaGatewayCondition = { operator };\n  if (column) {\n    condition.column = column;\n    if (operator === \"eq\") {\n      condition.eq_column = column;\n    }\n  }\n  if (value !== undefined) {\n    condition.value = value;\n    if (operator === \"eq\") {\n      condition.eq_value = value;\n    }\n  }\n  if (\n    operator === \"eq\" &&\n    column &&\n    value !== undefined &&\n    shouldUseUuidTextComparison(column, value as AthenaConditionValue)\n  ) {\n    condition.column_cast = \"text\";\n    condition.eq_column_cast = \"text\";\n  }\n  return condition;\n}\n\nfunction compileRelationToken(\n  key: string,\n  node: AthenaRelationSelectNode\n): string {\n  const nested = compileSelectShape(node.select);\n  const propertyKey = normalizeIdentifier(key, \"select relation key\");\n  if (node.schema && node.via) {\n    throw new Error(\n      `findMany relation \"${propertyKey}\" cannot combine schema and via yet; use schema with the relation key, or use via without schema`\n    );\n  }\n\n  const relationTokenBase = normalizeIdentifier(\n    node.via ?? propertyKey,\n    \"select relation token\"\n  );\n  if (node.schema && relationTokenBase.includes(\".\")) {\n    throw new Error(\n      `findMany relation \"${propertyKey}\" already resolves to a qualified relation token; do not also set schema`\n    );\n  }\n\n  const relationSchema = node.schema?.trim();\n  const relationToken = relationSchema\n    ? `${normalizeIdentifier(relationSchema, \"select relation schema\")}.${relationTokenBase}`\n    : relationTokenBase;\n  const alias =\n    node.as?.trim() || (relationToken === propertyKey ? \"\" : propertyKey);\n  const prefix = alias ? `${alias}:` : \"\";\n  return `${prefix}${relationToken}(${nested})`;\n}\n\nexport function compileSelectShape(select: AthenaSelectShape): string {\n  if (!isRecord(select)) {\n    throw new Error(\"findMany select must be an object\");\n  }\n\n  // Emit scalar columns before relation tokens so gateway select lists stay\n  // stable regardless of object key insertion order (relations often declared first).\n  const columns: string[] = [];\n  const relations: string[] = [];\n  for (const [rawKey, rawValue] of Object.entries(select)) {\n    if (rawValue === undefined) {\n      continue;\n    }\n\n    if (rawValue === true) {\n      columns.push(normalizeIdentifier(rawKey, \"select column\"));\n      continue;\n    }\n\n    if (isRelationSelectNode(rawValue)) {\n      relations.push(compileRelationToken(rawKey, rawValue));\n      continue;\n    }\n\n    throw new Error(`Unsupported select node for \"${rawKey}\"`);\n  }\n\n  const tokens = [...columns, ...relations];\n  if (tokens.length === 0) {\n    throw new Error(\"findMany select requires at least one field\");\n  }\n\n  return tokens.join(\",\");\n}\n\nexport function selectShapeUsesRelationSchema(\n  select: AthenaSelectShape\n): boolean {\n  if (!isRecord(select)) {\n    return false;\n  }\n\n  for (const rawValue of Object.values(select)) {\n    if (!isRelationSelectNode(rawValue)) {\n      continue;\n    }\n    if (\n      typeof rawValue.schema === \"string\" &&\n      rawValue.schema.trim().length > 0\n    ) {\n      return true;\n    }\n    if (selectShapeUsesRelationSchema(rawValue.select)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction compileColumnWhere(\n  column: string,\n  input: AthenaWherePrimitive | AthenaWhereOperatorInput\n): AthenaGatewayCondition[] {\n  const normalizedColumn = normalizeIdentifier(column, \"where column\");\n  if (!isRecord(input)) {\n    return [\n      buildGatewayCondition(\n        \"eq\",\n        normalizedColumn,\n        input as AthenaConditionValue | AthenaConditionArrayValue | undefined\n      ),\n    ];\n  }\n\n  const conditions: AthenaGatewayCondition[] = [];\n  for (const [rawOperator, rawValue] of Object.entries(input)) {\n    if (rawValue === undefined) {\n      continue;\n    }\n    if (!FILTER_OPERATORS.has(rawOperator as AthenaFilterOperator)) {\n      throw new Error(\n        `Unsupported where operator \"${rawOperator}\" on \"${normalizedColumn}\"`\n      );\n    }\n    if (\n      (rawOperator === \"in\" ||\n        rawOperator === \"contains\" ||\n        rawOperator === \"containedBy\") &&\n      !Array.isArray(rawValue)\n    ) {\n      throw new Error(\n        `where.${normalizedColumn}.${rawOperator} requires an array value`\n      );\n    }\n    conditions.push(\n      buildGatewayCondition(\n        rawOperator as AthenaFilterOperator,\n        normalizedColumn,\n        rawValue as AthenaConditionValue | AthenaConditionArrayValue\n      )\n    );\n  }\n\n  if (conditions.length === 0) {\n    throw new Error(`where.${normalizedColumn} requires at least one operator`);\n  }\n\n  return conditions;\n}\n\nfunction compileBooleanExpressionTerms(\n  clause: AthenaWhereBooleanOperand,\n  label: \"or\" | \"not\"\n): string[] {\n  if (!isRecord(clause)) {\n    throw new Error(`findMany where.${label} clauses must be objects`);\n  }\n\n  const entries = Object.entries(clause).filter(\n    ([, value]) => value !== undefined\n  );\n  if (entries.length !== 1) {\n    throw new Error(\n      `findMany where.${label} clauses must target exactly one column`\n    );\n  }\n\n  const [rawColumn, rawValue] = entries[0];\n  const column = normalizeIdentifier(rawColumn, `where.${label} column`);\n\n  if (!isRecord(rawValue)) {\n    return [\n      `${column}.eq.${stringifyFilterValue(rawValue as AthenaConditionValue)}`,\n    ];\n  }\n\n  const operatorEntries = Object.entries(rawValue).filter(\n    ([, value]) => value !== undefined\n  );\n  if (operatorEntries.length === 0) {\n    throw new Error(\n      `findMany where.${label}.${column} requires at least one operator`\n    );\n  }\n\n  if (label === \"not\" && operatorEntries.length > 1) {\n    throw new Error(\n      \"findMany where.not only supports a single lossless operator expression\"\n    );\n  }\n\n  return operatorEntries.map(([rawOperator, rawOperand]) => {\n    if (!BOOLEAN_SAFE_OPERATORS.has(rawOperator as AthenaBooleanSafeOperator)) {\n      throw new Error(\n        `findMany where.${label} only supports lossless scalar operators`\n      );\n    }\n    if (Array.isArray(rawOperand)) {\n      throw new Error(\n        `findMany where.${label} does not support array-valued operators`\n      );\n    }\n    return `${column}.${rawOperator}.${stringifyFilterValue(rawOperand as AthenaConditionValue)}`;\n  });\n}\n\nexport function compileWhere(\n  where?: AthenaWhere\n): AthenaGatewayCondition[] | undefined {\n  if (where === undefined) {\n    return;\n  }\n  if (!isRecord(where)) {\n    throw new Error(\"findMany where must be an object\");\n  }\n\n  const conditions: AthenaGatewayCondition[] = [];\n  for (const [rawKey, rawValue] of Object.entries(where)) {\n    if (rawValue === undefined) {\n      continue;\n    }\n\n    if (rawKey === \"or\") {\n      if (!Array.isArray(rawValue) || rawValue.length === 0) {\n        throw new Error(\"findMany where.or must be a non-empty array\");\n      }\n      const expressions = rawValue.flatMap((value) =>\n        compileBooleanExpressionTerms(value as AthenaWhereBooleanOperand, \"or\")\n      );\n      conditions.push(\n        buildGatewayCondition(\"or\", undefined, expressions.join(\",\"))\n      );\n      continue;\n    }\n\n    if (rawKey === \"not\") {\n      const expressions = compileBooleanExpressionTerms(\n        rawValue as AthenaWhereBooleanOperand,\n        \"not\"\n      );\n      if (expressions.length !== 1) {\n        throw new Error(\n          \"findMany where.not must compile to exactly one lossless expression\"\n        );\n      }\n      conditions.push(buildGatewayCondition(\"not\", undefined, expressions[0]));\n      continue;\n    }\n\n    conditions.push(\n      ...compileColumnWhere(\n        rawKey,\n        rawValue as AthenaWherePrimitive | AthenaWhereOperatorInput\n      )\n    );\n  }\n\n  return conditions.length > 0 ? conditions : undefined;\n}\n\nfunction resolveOrderDirection(\n  input: AthenaOrderByDirectionInput\n): AthenaSortBy[\"direction\"] {\n  if (typeof input === \"boolean\") {\n    return input === false ? \"descending\" : \"ascending\";\n  }\n  if (typeof input === \"string\") {\n    const normalized = input.trim().toLowerCase();\n    if (normalized === \"asc\" || normalized === \"ascending\") {\n      return \"ascending\";\n    }\n    if (normalized === \"desc\" || normalized === \"descending\") {\n      return \"descending\";\n    }\n    throw new Error(`Unsupported orderBy direction \"${input}\"`);\n  }\n  return input.ascending === false ? \"descending\" : \"ascending\";\n}\n\nexport function compileOrderBy<Row = AthenaRowShape>(\n  orderBy?: AthenaOrderBy<Row>\n): AthenaSortBy | undefined {\n  if (orderBy === undefined) {\n    return;\n  }\n  if (!isRecord(orderBy)) {\n    throw new Error(\"findMany orderBy must be an object\");\n  }\n\n  if (\"column\" in orderBy) {\n    return {\n      direction: orderBy.ascending === false ? \"descending\" : \"ascending\",\n      field: normalizeIdentifier(String(orderBy.column), \"orderBy column\"),\n    };\n  }\n\n  const entries = Object.entries(orderBy).filter(\n    ([, value]) => value !== undefined\n  );\n  if (entries.length === 0) {\n    return;\n  }\n  if (entries.length > 1) {\n    throw new Error(\"findMany orderBy only supports a single column in v1\");\n  }\n\n  const [column, input] = entries[0];\n  return {\n    direction: resolveOrderDirection(input as AthenaOrderByDirectionInput),\n    field: normalizeIdentifier(column, \"orderBy column\"),\n  };\n}\n","import { buildStructuredSelectTransport } from \"./gateway/structured-select.ts\";\nimport type {\n  AthenaFetchPayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayCondition,\n  AthenaJsonObject,\n  AthenaJsonValue,\n  AthenaSortBy,\n} from \"./gateway/types.ts\";\nimport type {\n  AthenaOrderBy,\n  AthenaSelectShape,\n  AthenaWhere,\n  AthenaWhereBooleanOperand,\n  AthenaWhereOperatorInput,\n} from \"./query-ast.ts\";\nimport { shouldUseUuidTextComparison } from \"./query-ast.ts\";\n\ntype AthenaFindManyAstOrderColumn<Row> = [\n  Extract<keyof NonNullable<Row>, string>,\n] extends [never]\n  ? string\n  : Extract<keyof NonNullable<Row>, string>;\n\nexport interface AthenaSelectExecutionState {\n  conditions: AthenaGatewayCondition[];\n  currentPage?: number;\n  limit?: number;\n  offset?: number;\n  order?: AthenaSortBy;\n  pageSize?: number;\n  totalPages?: number;\n}\n\nexport interface AthenaFindManyAstPayload<\n  Row,\n  TSelect extends AthenaSelectShape,\n> {\n  limit?: number;\n  orderBy?: AthenaOrderBy<Row>;\n  select: TSelect;\n  table_name: string;\n  where?: AthenaWhere<Row>;\n}\n\nexport interface AthenaResolvedPagination {\n  limit?: number;\n  offset?: number;\n}\n\nexport interface AthenaTypedSelectQueryInput {\n  columns: string | string[];\n  conditions: AthenaGatewayCondition[];\n  currentPage?: number;\n  limit?: number;\n  offset?: number;\n  order?: AthenaSortBy;\n  pageSize?: number;\n  tableName: string;\n}\n\nexport interface AthenaSelectDebugPlan {\n  columns: string | string[];\n  conditions?: AthenaGatewayCondition[];\n  currentPage?: number;\n  limit?: number;\n  offset?: number;\n  order?: AthenaSortBy;\n  pageSize?: number;\n}\n\nexport type AthenaSelectTransportPlan =\n  | {\n      kind: \"query\";\n      query: string;\n      payload: {\n        query: string;\n      };\n    }\n  | {\n      kind: \"fetch\";\n      payload: AthenaFetchPayload;\n      debug: AthenaSelectDebugPlan;\n    };\n\nexport function canUseFindManyAstTransport(\n  state: AthenaSelectExecutionState\n): boolean {\n  return (\n    state.conditions.length === 0 &&\n    state.offset === undefined &&\n    state.currentPage === undefined &&\n    state.pageSize === undefined &&\n    state.totalPages === undefined\n  );\n}\n\nexport function toFindManyAstOrder<Row>(\n  order?: AthenaSortBy\n): AthenaOrderBy<Row> | undefined {\n  if (!order) {\n    return;\n  }\n  return {\n    ascending: order.direction !== \"descending\",\n    column: order.field as AthenaFindManyAstOrderColumn<Row>,\n  };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction normalizeFindManyAstColumnPredicate(\n  value: unknown\n): AthenaWhereOperatorInput {\n  if (!isRecord(value)) {\n    return {\n      eq: value as AthenaWhereOperatorInput[\"eq\"],\n    };\n  }\n\n  const normalized: AthenaWhereOperatorInput = {};\n  for (const [key, operand] of Object.entries(value)) {\n    if (operand !== undefined) {\n      normalized[key as keyof AthenaWhereOperatorInput] = operand as never;\n    }\n  }\n  return normalized;\n}\n\nfunction normalizeFindManyAstBooleanOperand<Row>(\n  clause: AthenaWhereBooleanOperand<Row>\n): AthenaWhereBooleanOperand<Row> {\n  const normalized: Record<string, unknown> = {};\n  for (const [column, value] of Object.entries(\n    clause as Record<string, unknown>\n  )) {\n    if (value === undefined) {\n      continue;\n    }\n    normalized[column] = normalizeFindManyAstColumnPredicate(value);\n  }\n  return normalized as AthenaWhereBooleanOperand<Row>;\n}\n\nexport function normalizeFindManyAstWhere<Row>(\n  where?: AthenaWhere<Row>\n): AthenaWhere<Row> | undefined {\n  if (!(where && isRecord(where))) {\n    return where;\n  }\n\n  const normalized: AthenaJsonObject = {};\n  for (const [key, value] of Object.entries(where as Record<string, unknown>)) {\n    if (value === undefined) {\n      continue;\n    }\n    if (key === \"or\" && Array.isArray(value)) {\n      normalized.or = value.map((clause) =>\n        normalizeFindManyAstBooleanOperand(\n          clause as AthenaWhereBooleanOperand<Row>\n        )\n      ) as unknown as AthenaJsonObject[\"or\"];\n      continue;\n    }\n    if (key === \"not\" && isRecord(value)) {\n      normalized.not = normalizeFindManyAstBooleanOperand(\n        value as AthenaWhereBooleanOperand<Row>\n      ) as unknown as AthenaJsonObject[\"not\"];\n      continue;\n    }\n    normalized[key] = normalizeFindManyAstColumnPredicate(\n      value\n    ) as AthenaJsonValue;\n  }\n\n  return normalized as AthenaWhere<Row>;\n}\n\nfunction predicateRequiresUuidQueryFallback(\n  column: string,\n  value: unknown\n): boolean {\n  if (!isRecord(value)) {\n    return shouldUseUuidTextComparison(\n      column,\n      value as Parameters<typeof shouldUseUuidTextComparison>[1]\n    );\n  }\n\n  const eqValue = value.eq;\n  return (\n    eqValue !== undefined &&\n    shouldUseUuidTextComparison(\n      column,\n      eqValue as Parameters<typeof shouldUseUuidTextComparison>[1]\n    )\n  );\n}\n\nfunction booleanOperandRequiresUuidQueryFallback<Row>(\n  clause: AthenaWhereBooleanOperand<Row>\n): boolean {\n  for (const [column, value] of Object.entries(\n    clause as Record<string, unknown>\n  )) {\n    if (value === undefined) {\n      continue;\n    }\n    if (predicateRequiresUuidQueryFallback(column, value)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function findManyAstWhereRequiresLegacyTransport<Row>(\n  where?: AthenaWhere<Row>\n): boolean {\n  if (!(where && isRecord(where))) {\n    return false;\n  }\n\n  for (const [key, value] of Object.entries(where as Record<string, unknown>)) {\n    if (value === undefined) {\n      continue;\n    }\n    if (key === \"or\" && Array.isArray(value)) {\n      if (\n        value.some((clause) =>\n          booleanOperandRequiresUuidQueryFallback(\n            clause as AthenaWhereBooleanOperand<Row>\n          )\n        )\n      ) {\n        return true;\n      }\n      continue;\n    }\n    if (key === \"not\" && isRecord(value)) {\n      if (\n        booleanOperandRequiresUuidQueryFallback(\n          value as AthenaWhereBooleanOperand<Row>\n        )\n      ) {\n        return true;\n      }\n      continue;\n    }\n    if (predicateRequiresUuidQueryFallback(key, value)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nexport function resolvePagination(input: {\n  limit?: number;\n  offset?: number;\n  currentPage?: number;\n  pageSize?: number;\n}): AthenaResolvedPagination {\n  let limit = input.limit;\n  let offset = input.offset;\n\n  if (limit === undefined && input.pageSize !== undefined) {\n    limit = Math.max(0, Math.trunc(input.pageSize));\n  }\n  if (\n    offset === undefined &&\n    input.pageSize !== undefined &&\n    input.currentPage !== undefined &&\n    input.currentPage > 0\n  ) {\n    offset =\n      (Math.trunc(input.currentPage) - 1) *\n      Math.max(0, Math.trunc(input.pageSize));\n  }\n\n  return { limit, offset };\n}\n\nfunction hasTypedEqualityComparison(\n  conditions: AthenaGatewayCondition[] | undefined\n): boolean {\n  return (\n    conditions?.some(\n      (condition) =>\n        condition.operator === \"eq\" &&\n        (condition.value_cast !== undefined ||\n          condition.column_cast !== undefined)\n    ) ?? false\n  );\n}\n\nexport function createSelectTransportPlan(input: {\n  tableName: string;\n  columns: string | string[];\n  state: AthenaSelectExecutionState;\n  options?: AthenaGatewayCallOptions;\n  buildTypedSelectQuery: (input: AthenaTypedSelectQueryInput) => string | null;\n}): AthenaSelectTransportPlan {\n  const conditions = input.state.conditions.length\n    ? input.state.conditions.map((condition) => ({ ...condition }))\n    : undefined;\n\n  const pagination = resolvePagination({\n    currentPage: input.state.currentPage,\n    limit: input.state.limit,\n    offset: input.state.offset,\n    pageSize: input.state.pageSize,\n  });\n  const stripNulls = input.options?.stripNulls ?? true;\n  const structuredSelectTransport = buildStructuredSelectTransport({\n    columns: input.columns,\n    conditions,\n    count: input.options?.count,\n    head: input.options?.head,\n    limit: pagination.limit,\n    offset: pagination.offset,\n    order: input.state.order,\n    stripNulls,\n    tableName: input.tableName,\n  });\n  if (structuredSelectTransport && \"error\" in structuredSelectTransport) {\n    throw new Error(structuredSelectTransport.error);\n  }\n  if (structuredSelectTransport) {\n    const { payload, select } = structuredSelectTransport;\n    return {\n      debug: {\n        columns: select,\n        conditions,\n        limit: pagination.limit,\n        offset: pagination.offset,\n        order: input.state.order,\n      },\n      kind: \"fetch\",\n      payload,\n    };\n  }\n\n  if (\n    hasTypedEqualityComparison(conditions) &&\n    !input.options?.head &&\n    !input.options?.count &&\n    conditions\n  ) {\n    const query = input.buildTypedSelectQuery({\n      columns: input.columns,\n      conditions,\n      currentPage: input.state.currentPage,\n      limit: input.state.limit,\n      offset: input.state.offset,\n      order: input.state.order,\n      pageSize: input.state.pageSize,\n      tableName: input.tableName,\n    });\n    if (query) {\n      return {\n        kind: \"query\",\n        payload: { query },\n        query,\n      };\n    }\n  }\n\n  return {\n    debug: {\n      columns: input.columns,\n      conditions,\n      currentPage: input.state.currentPage,\n      limit: input.state.limit,\n      offset: input.state.offset,\n      order: input.state.order,\n      pageSize: input.state.pageSize,\n    },\n    kind: \"fetch\",\n    payload: {\n      columns: input.columns,\n      conditions,\n      count: input.options?.count,\n      current_page: input.state.currentPage,\n      head: input.options?.head,\n      limit: input.state.limit,\n      offset: input.state.offset,\n      page_size: input.state.pageSize,\n      sort_by: input.state.order,\n      strip_nulls: stripNulls,\n      table_name: input.tableName,\n      total_pages: input.state.totalPages,\n    },\n  };\n}\n","const SIMPLE_IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\nconst COMPOSITE_IDENTIFIER_PATTERN =\n  /^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$/;\nconst SQL_ALIAS_PATTERN =\n  /^([A-Za-z_][A-Za-z0-9_.]*)\\s+(?:as\\s+)?([A-Za-z_][A-Za-z0-9_]*)$/i;\nconst RESPONSE_ALIAS_PATTERN =\n  /^([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*([A-Za-z_][A-Za-z0-9_.]*)$/i;\n\nfunction quoteIdentifierSegment(identifier: string): string {\n  return `\"${identifier.replace(/\"/g, '\"\"')}\"`;\n}\n\nfunction parseAliasedIdentifierToken(\n  token: string\n): { baseIdentifier: string; aliasIdentifier: string } | null {\n  const responseAliasMatch = RESPONSE_ALIAS_PATTERN.exec(token);\n  if (responseAliasMatch) {\n    const [, aliasIdentifier, baseIdentifier] = responseAliasMatch;\n    if (\n      COMPOSITE_IDENTIFIER_PATTERN.test(baseIdentifier) &&\n      SIMPLE_IDENTIFIER_PATTERN.test(aliasIdentifier)\n    ) {\n      return { aliasIdentifier, baseIdentifier };\n    }\n  }\n\n  const sqlAliasMatch = SQL_ALIAS_PATTERN.exec(token);\n  if (!sqlAliasMatch) {\n    return null;\n  }\n\n  const [, baseIdentifier, aliasIdentifier] = sqlAliasMatch;\n  if (\n    !(\n      COMPOSITE_IDENTIFIER_PATTERN.test(baseIdentifier) &&\n      SIMPLE_IDENTIFIER_PATTERN.test(aliasIdentifier)\n    )\n  ) {\n    return null;\n  }\n\n  return { aliasIdentifier, baseIdentifier };\n}\n\n/**\n * Quotes a `schema.table.column`-style identifier path safely for SQL.\n */\nexport function quoteQualifiedIdentifier(identifier: string): string {\n  return identifier\n    .split(\".\")\n    .map((segment) => quoteIdentifierSegment(segment))\n    .join(\".\");\n}\n\nfunction quoteSelectToken(token: string): string {\n  if (token === \"*\") {\n    return token;\n  }\n  if (COMPOSITE_IDENTIFIER_PATTERN.test(token)) {\n    return quoteQualifiedIdentifier(token);\n  }\n\n  const aliasedIdentifier = parseAliasedIdentifierToken(token);\n  if (!aliasedIdentifier) {\n    return token;\n  }\n  const { baseIdentifier, aliasIdentifier } = aliasedIdentifier;\n  return `${quoteQualifiedIdentifier(baseIdentifier)} AS ${quoteIdentifierSegment(aliasIdentifier)}`;\n}\n\nexport function quoteSelectColumnToken(token: string): string {\n  const trimmed = token.trim();\n  if (!trimmed || trimmed === \"*\") {\n    return trimmed || \"*\";\n  }\n\n  const responseAliasMatch = RESPONSE_ALIAS_PATTERN.exec(trimmed);\n  if (responseAliasMatch) {\n    const [, aliasIdentifier, baseIdentifier] = responseAliasMatch;\n    return `${quoteQualifiedIdentifier(baseIdentifier)} AS ${quoteIdentifierSegment(aliasIdentifier)}`;\n  }\n\n  return quoteQualifiedIdentifier(trimmed);\n}\n\nfunction canAutoQuoteToken(token: string): boolean {\n  if (token === \"*\") {\n    return true;\n  }\n  if (COMPOSITE_IDENTIFIER_PATTERN.test(token)) {\n    return true;\n  }\n  return parseAliasedIdentifierToken(token) !== null;\n}\n\nfunction splitTopLevelCommaSeparated(input: string): string[] | null {\n  const parts: string[] = [];\n  let buffer = \"\";\n  let singleQuoted = false;\n  let doubleQuoted = false;\n  let depth = 0;\n\n  for (let index = 0; index < input.length; index += 1) {\n    const char = input[index];\n    const next = index + 1 < input.length ? input[index + 1] : \"\";\n\n    if (singleQuoted) {\n      buffer += char;\n      if (char === \"'\" && next === \"'\") {\n        buffer += next;\n        index += 1;\n        continue;\n      }\n      if (char === \"'\") {\n        singleQuoted = false;\n      }\n      continue;\n    }\n\n    if (doubleQuoted) {\n      buffer += char;\n      if (char === '\"' && next === '\"') {\n        buffer += next;\n        index += 1;\n        continue;\n      }\n      if (char === '\"') {\n        doubleQuoted = false;\n      }\n      continue;\n    }\n\n    if (char === \"'\") {\n      singleQuoted = true;\n      buffer += char;\n      continue;\n    }\n    if (char === '\"') {\n      doubleQuoted = true;\n      buffer += char;\n      continue;\n    }\n\n    if (char === \"(\") {\n      depth += 1;\n      buffer += char;\n      continue;\n    }\n    if (char === \")\") {\n      depth -= 1;\n      if (depth < 0) {\n        return null;\n      }\n      buffer += char;\n      continue;\n    }\n\n    if (char === \",\" && depth === 0) {\n      parts.push(buffer.trim());\n      buffer = \"\";\n      continue;\n    }\n\n    buffer += char;\n  }\n\n  if (singleQuoted || doubleQuoted || depth !== 0) {\n    return null;\n  }\n\n  if (buffer.trim().length > 0) {\n    parts.push(buffer.trim());\n  }\n\n  return parts;\n}\n\n/**\n * Quotes identifier lists while preserving raw SQL expressions.\n *\n * Examples:\n * - `\"table, user\"` -> `\"\\\"table\\\", \\\"user\\\"\"`\n * - `concat(name, ',') as label, id` -> unchanged\n */\nexport function quoteSelectColumnsExpression(columns: string): string {\n  const trimmed = columns.trim();\n  if (!trimmed || trimmed === \"*\") {\n    return trimmed || \"*\";\n  }\n\n  const tokens = splitTopLevelCommaSeparated(trimmed);\n  if (!tokens || tokens.length === 0) {\n    return trimmed;\n  }\n\n  if (!tokens.every(canAutoQuoteToken)) {\n    return trimmed;\n  }\n\n  return tokens.map(quoteSelectToken).join(\", \");\n}\n\n/**\n * Immutable identifier object with consistent SQL rendering.\n */\nexport interface SqlIdentifier {\n  readonly segments: string[];\n  toSql: () => string;\n  toString: () => string;\n}\n\nclass SqlIdentifierPath implements SqlIdentifier {\n  readonly segments: string[];\n\n  constructor(segments: string[]) {\n    this.segments = segments;\n  }\n\n  toSql(): string {\n    return this.segments.map(quoteIdentifierSegment).join(\".\");\n  }\n\n  toString(): string {\n    return this.toSql();\n  }\n}\n\n/**\n * Creates a quoted identifier object from segment or dotted inputs.\n */\nexport function identifier(...segments: string[]): SqlIdentifier {\n  const expandedSegments = segments\n    .flatMap((segment) => segment.split(\".\"))\n    .map((segment) => segment.trim())\n    .filter((segment) => segment.length > 0);\n\n  return new SqlIdentifierPath(expandedSegments);\n}\n","import type {\n  AthenaConditionCastType,\n  AthenaConditionValue,\n  AthenaDeletePayload,\n  AthenaGatewayCondition,\n  AthenaInsertPayload,\n  AthenaJsonValue,\n  AthenaRpcFilter,\n  AthenaRpcPayload,\n  AthenaSortBy,\n  AthenaUpdatePayload,\n} from \"./gateway/types.ts\";\nimport { resolvePagination } from \"./query-transport.ts\";\nimport {\n  quoteQualifiedIdentifier,\n  quoteSelectColumnsExpression,\n  quoteSelectColumnToken,\n} from \"./sql-identifiers.ts\";\n\nconst SAFE_CAST_PATTERN = /^[a-z_][a-z0-9_]*(?:\\[\\])?$/i;\n\nfunction normalizeCast(cast: AthenaConditionCastType): string {\n  const normalized = cast.trim().toLowerCase();\n  if (!SAFE_CAST_PATTERN.test(normalized)) {\n    throw new Error(`Invalid cast type \"${cast}\"`);\n  }\n  return normalized;\n}\n\nfunction escapeSqlStringLiteral(value: string): string {\n  return value.replace(/'/g, \"''\");\n}\n\nfunction toSqlLiteral(value: AthenaConditionValue): string {\n  if (value === null) {\n    return \"NULL\";\n  }\n  if (typeof value === \"number\") {\n    return Number.isFinite(value) ? String(value) : \"NULL\";\n  }\n  if (typeof value === \"boolean\") {\n    return value ? \"TRUE\" : \"FALSE\";\n  }\n  return `'${escapeSqlStringLiteral(value)}'`;\n}\n\nfunction withCast(expression: string, cast?: AthenaConditionCastType): string {\n  if (!cast) {\n    return expression;\n  }\n  return `${expression}::${normalizeCast(cast)}`;\n}\n\nfunction buildSelectColumnsClause(columns: string | string[]): string {\n  if (Array.isArray(columns)) {\n    return columns.map((column) => quoteSelectColumnToken(column)).join(\", \");\n  }\n  return quoteSelectColumnsExpression(columns);\n}\n\ninterface ParsedIdentifierSegment {\n  normalizedValue: string;\n}\n\nfunction parseIdentifierSegment(input: string): ParsedIdentifierSegment | null {\n  const trimmed = input.trim();\n  if (!trimmed) {\n    return null;\n  }\n\n  if (!trimmed.startsWith('\"')) {\n    return {\n      normalizedValue: trimmed.toLowerCase(),\n    };\n  }\n\n  let value = \"\";\n  let index = 1;\n  let closed = false;\n  while (index < trimmed.length) {\n    const char = trimmed[index];\n    const next = index + 1 < trimmed.length ? trimmed[index + 1] : \"\";\n    if (char === '\"' && next === '\"') {\n      value += '\"';\n      index += 2;\n      continue;\n    }\n    if (char === '\"') {\n      closed = true;\n      index += 1;\n      break;\n    }\n    value += char;\n    index += 1;\n  }\n\n  if (!closed || trimmed.slice(index).trim().length > 0 || !value.trim()) {\n    return null;\n  }\n\n  return {\n    normalizedValue: value,\n  };\n}\n\nfunction splitQualifiedTableName(\n  tableName: string\n): { schemaSegment: string } | null {\n  const trimmed = tableName.trim();\n  let inQuotes = false;\n  for (let index = 0; index < trimmed.length; index += 1) {\n    const char = trimmed[index];\n    const next = index + 1 < trimmed.length ? trimmed[index + 1] : \"\";\n    if (char === '\"') {\n      if (inQuotes && next === '\"') {\n        index += 1;\n        continue;\n      }\n      inQuotes = !inQuotes;\n      continue;\n    }\n    if (char === \".\" && !inQuotes) {\n      const schemaSegment = trimmed.slice(0, index).trim();\n      const tableSegment = trimmed.slice(index + 1).trim();\n      if (!(schemaSegment && tableSegment)) {\n        return null;\n      }\n      return { schemaSegment };\n    }\n  }\n  return null;\n}\n\nexport function resolveTableNameForCall(\n  tableName: string,\n  schema: string | undefined\n): string {\n  if (!schema) {\n    return tableName;\n  }\n  const normalizedSchema = schema.trim();\n  if (!normalizedSchema) {\n    throw new Error(\"schema option must be a non-empty string\");\n  }\n  const normalizedTableName = tableName.trim();\n  const parsedSchema = parseIdentifierSegment(normalizedSchema);\n  if (!parsedSchema) {\n    throw new Error(\"schema option must be a non-empty string\");\n  }\n  const qualified = splitQualifiedTableName(normalizedTableName);\n  if (qualified) {\n    const parsedTableSchema = parseIdentifierSegment(qualified.schemaSegment);\n    const sameSchema = parsedTableSchema\n      ? parsedTableSchema.normalizedValue === parsedSchema.normalizedValue\n      : normalizedTableName.startsWith(`${normalizedSchema}.`);\n    if (sameSchema) {\n      return normalizedTableName;\n    }\n    throw new Error(\n      `schema option \"${normalizedSchema}\" conflicts with schema-qualified table \"${normalizedTableName}\"`\n    );\n  }\n  return `${normalizedSchema}.${normalizedTableName}`;\n}\n\nfunction conditionToSqlClause(\n  condition: AthenaGatewayCondition\n): string | null {\n  if (!condition.column) {\n    return null;\n  }\n  const column = withCast(\n    quoteQualifiedIdentifier(condition.column),\n    condition.column_cast\n  );\n  const value = condition.value;\n  const sqlOperator = {\n    eq: \"=\",\n    gt: \">\",\n    gte: \">=\",\n    ilike: \"ILIKE\",\n    like: \"LIKE\",\n    lt: \"<\",\n    lte: \"<=\",\n    neq: \"!=\",\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) {\n        return null;\n      }\n      const rhs = withCast(toSqlLiteral(value), condition.value_cast);\n      return `${column} ${sqlOperator[condition.operator]} ${rhs}`;\n    }\n    case \"is\": {\n      if (value === null) {\n        return `${column} IS NULL`;\n      }\n      if (value === true) {\n        return `${column} IS TRUE`;\n      }\n      if (value === false) {\n        return `${column} IS FALSE`;\n      }\n      return null;\n    }\n    case \"in\": {\n      if (!Array.isArray(value)) {\n        return null;\n      }\n      if (value.length === 0) {\n        return \"FALSE\";\n      }\n      const values = value.map((item) =>\n        withCast(toSqlLiteral(item), condition.value_cast)\n      );\n      return `${column} IN (${values.join(\", \")})`;\n    }\n    default:\n      return null;\n  }\n}\n\nexport function buildTypedSelectQuery(input: {\n  tableName: string;\n  columns: string | string[];\n  conditions: AthenaGatewayCondition[];\n  limit?: number;\n  offset?: number;\n  currentPage?: number;\n  pageSize?: number;\n  order?: AthenaSortBy;\n}): string | null {\n  const whereClauses: string[] = [];\n  for (const condition of input.conditions) {\n    const clause = conditionToSqlClause(condition);\n    if (!clause) {\n      return null;\n    }\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(\n      `ORDER BY ${quoteQualifiedIdentifier(input.order.field)} ${direction}`\n    );\n  }\n\n  if (limit !== undefined) {\n    sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`);\n  }\n\n  if (offset !== undefined) {\n    sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`);\n  }\n\n  return `${sqlParts.join(\" \")};`;\n}\n\nfunction sanitizeSqlComment(comment: string): string {\n  return comment.replace(/\\*\\//g, \"* /\");\n}\n\nfunction toSqlJsonLiteral(value: AthenaJsonValue | undefined): string {\n  if (value === undefined) {\n    return \"DEFAULT\";\n  }\n  if (\n    value === null ||\n    typeof value === \"string\" ||\n    typeof value === \"number\" ||\n    typeof value === \"boolean\"\n  ) {\n    return toSqlLiteral(value);\n  }\n  return `'${escapeSqlStringLiteral(JSON.stringify(value))}'::jsonb`;\n}\n\nfunction conditionToDebugSqlClause(condition: AthenaGatewayCondition): string {\n  const exact = conditionToSqlClause(condition);\n  if (exact) {\n    return exact;\n  }\n\n  const rawCondition = sanitizeSqlComment(JSON.stringify(condition));\n  if (!condition.column) {\n    return `TRUE /* unsupported condition: ${rawCondition} */`;\n  }\n\n  const column = withCast(\n    quoteQualifiedIdentifier(condition.column),\n    condition.column_cast\n  );\n  const value = condition.value;\n  const rhs = withCast(\n    toSqlJsonLiteral(value as AthenaJsonValue | undefined),\n    condition.value_cast\n  );\n\n  switch (condition.operator) {\n    case \"contains\":\n      return `${column} @> ${rhs}`;\n    case \"containedBy\":\n      return `${column} <@ ${rhs}`;\n    case \"not\":\n      return `TRUE /* NOT expression passthrough: ${rawCondition} */`;\n    case \"or\":\n      return `TRUE /* OR expression passthrough: ${rawCondition} */`;\n    default:\n      return `TRUE /* unsupported condition: ${rawCondition} */`;\n  }\n}\n\nfunction appendOrderLimitOffset(\n  sqlParts: string[],\n  order?: AthenaSortBy,\n  limit?: number,\n  offset?: number\n) {\n  if (order?.field) {\n    const direction = order.direction === \"descending\" ? \"DESC\" : \"ASC\";\n    sqlParts.push(\n      `ORDER BY ${quoteQualifiedIdentifier(order.field)} ${direction}`\n    );\n  }\n  if (limit !== undefined) {\n    sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`);\n  }\n  if (offset !== undefined) {\n    sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`);\n  }\n}\n\nexport function buildDebugSelectQuery(input: {\n  tableName: string;\n  columns: string | string[];\n  conditions?: AthenaGatewayCondition[];\n  limit?: number;\n  offset?: number;\n  currentPage?: number;\n  pageSize?: number;\n  order?: AthenaSortBy;\n}): string {\n  const sqlParts = [\n    `SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\n  ];\n  if (input.conditions?.length) {\n    const whereClauses = input.conditions.map(conditionToDebugSqlClause);\n    sqlParts.push(`WHERE ${whereClauses.join(\" AND \")}`);\n  }\n  const pagination = resolvePagination(input);\n  appendOrderLimitOffset(\n    sqlParts,\n    input.order,\n    pagination.limit,\n    pagination.offset\n  );\n  return `${sqlParts.join(\" \")};`;\n}\n\nfunction resolveDebugTableIdentifier(tableName: string | undefined): string {\n  if (!tableName?.trim()) {\n    return '\"__unknown_table__\"';\n  }\n  return quoteQualifiedIdentifier(tableName);\n}\n\nexport function buildInsertDebugSql(payload: AthenaInsertPayload): string {\n  const rows = Array.isArray(payload.insert_body)\n    ? payload.insert_body\n    : [payload.insert_body];\n  const columns: string[] = [];\n  const seen = new Set<string>();\n  for (const row of rows) {\n    for (const column of Object.keys(row)) {\n      if (seen.has(column)) {\n        continue;\n      }\n      seen.add(column);\n      columns.push(column);\n    }\n  }\n\n  const sqlParts = [\n    `INSERT INTO ${quoteQualifiedIdentifier(payload.table_name)}`,\n  ];\n\n  if (rows.length && columns.length) {\n    const valuesClause = rows\n      .map((row) => {\n        const values = columns.map((column) => {\n          const hasColumn = Object.hasOwn(row, column);\n          if (!hasColumn) {\n            return payload.default_to_null ? \"NULL\" : \"DEFAULT\";\n          }\n          const rowValue = (row as Record<string, AthenaJsonValue | undefined>)[\n            column\n          ];\n          return toSqlJsonLiteral(rowValue);\n        });\n        return `(${values.join(\", \")})`;\n      })\n      .join(\", \");\n    const columnClause = columns\n      .map((column) => quoteQualifiedIdentifier(column))\n      .join(\", \");\n    sqlParts.push(`(${columnClause})`);\n    sqlParts.push(`VALUES ${valuesClause}`);\n  } else {\n    sqlParts.push(\"DEFAULT VALUES\");\n    if (rows.length > 1) {\n      sqlParts.push(\n        `/* trace: ${rows.length} rows collapsed to DEFAULT VALUES */`\n      );\n    }\n  }\n\n  if (payload.on_conflict) {\n    const conflictColumns = Array.isArray(payload.on_conflict)\n      ? payload.on_conflict\n          .map((column) => quoteQualifiedIdentifier(column))\n          .join(\", \")\n      : payload.on_conflict;\n    if (payload.update_body && Object.keys(payload.update_body).length > 0) {\n      const assignments = Object.entries(payload.update_body).map(\n        ([column, value]) =>\n          `${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`\n      );\n      sqlParts.push(\n        `ON CONFLICT (${conflictColumns}) DO UPDATE SET ${assignments.join(\", \")}`\n      );\n    } else {\n      sqlParts.push(`ON CONFLICT (${conflictColumns}) DO NOTHING`);\n    }\n  }\n\n  if (payload.columns) {\n    sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`);\n  }\n\n  return `${sqlParts.join(\" \")};`;\n}\n\nexport function buildUpdateDebugSql(payload: AthenaUpdatePayload): string {\n  const assignments = Object.entries(payload.update_body).map(\n    ([column, value]) =>\n      `${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`\n  );\n  const sqlParts = [\n    `UPDATE ${resolveDebugTableIdentifier(payload.table_name)} SET ${assignments.length ? assignments.join(\", \") : \"/* empty set */\"}`,\n  ];\n  if (payload.conditions?.length) {\n    const whereClauses = payload.conditions.map(conditionToDebugSqlClause);\n    sqlParts.push(`WHERE ${whereClauses.join(\" AND \")}`);\n  }\n  const pagination = resolvePagination({\n    currentPage: payload.current_page,\n    limit: payload.limit,\n    offset: payload.offset,\n    pageSize: payload.page_size,\n  });\n  appendOrderLimitOffset(\n    sqlParts,\n    payload.sort_by,\n    pagination.limit,\n    pagination.offset\n  );\n  if (payload.columns) {\n    sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`);\n  }\n  return `${sqlParts.join(\" \")};`;\n}\n\nexport function buildDeleteDebugSql(payload: AthenaDeletePayload): string {\n  const sqlParts = [\n    `DELETE FROM ${quoteQualifiedIdentifier(payload.table_name)}`,\n  ];\n  const whereClauses: string[] = [];\n  if (payload.resource_id) {\n    whereClauses.push(`\"resource_id\" = ${toSqlLiteral(payload.resource_id)}`);\n  }\n  if (payload.conditions?.length) {\n    whereClauses.push(...payload.conditions.map(conditionToDebugSqlClause));\n  }\n  if (whereClauses.length) {\n    sqlParts.push(`WHERE ${whereClauses.join(\" AND \")}`);\n  }\n  const pagination = resolvePagination({\n    currentPage: payload.current_page,\n    limit: payload.limit,\n    offset: payload.offset,\n    pageSize: payload.page_size,\n  });\n  appendOrderLimitOffset(\n    sqlParts,\n    payload.sort_by,\n    pagination.limit,\n    pagination.offset\n  );\n  if (payload.columns) {\n    sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`);\n  }\n  return `${sqlParts.join(\" \")};`;\n}\n\nfunction rpcFilterToSqlClause(filter: AthenaRpcFilter): string {\n  const column = quoteQualifiedIdentifier(filter.column);\n  const value = filter.value;\n  switch (filter.operator) {\n    case \"eq\":\n    case \"neq\":\n    case \"gt\":\n    case \"gte\":\n    case \"lt\":\n    case \"lte\":\n    case \"like\":\n    case \"ilike\": {\n      if (value === undefined || Array.isArray(value)) {\n        return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`;\n      }\n      const operatorMap = {\n        eq: \"=\",\n        gt: \">\",\n        gte: \">=\",\n        ilike: \"ILIKE\",\n        like: \"LIKE\",\n        lt: \"<\",\n        lte: \"<=\",\n        neq: \"!=\",\n      } as const;\n      return `${column} ${operatorMap[filter.operator]} ${toSqlLiteral(value)}`;\n    }\n    case \"is\":\n      if (value === null) {\n        return `${column} IS NULL`;\n      }\n      if (value === true) {\n        return `${column} IS TRUE`;\n      }\n      if (value === false) {\n        return `${column} IS FALSE`;\n      }\n      return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`;\n    case \"in\":\n      if (!Array.isArray(value)) {\n        return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`;\n      }\n      if (value.length === 0) {\n        return \"FALSE\";\n      }\n      return `${column} IN (${value.map((item) => toSqlLiteral(item)).join(\", \")})`;\n    default:\n      return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`;\n  }\n}\n\nexport function buildRpcDebugSql(payload: AthenaRpcPayload): string {\n  const argsEntries = payload.args ? Object.entries(payload.args) : [];\n  const argsClause = argsEntries\n    .map(\n      ([key, value]) =>\n        `${quoteQualifiedIdentifier(key)} => ${toSqlJsonLiteral(value as AthenaJsonValue)}`\n    )\n    .join(\", \");\n  const functionRef = payload.schema\n    ? `${quoteQualifiedIdentifier(payload.schema)}.${quoteQualifiedIdentifier(payload.function)}`\n    : quoteQualifiedIdentifier(payload.function);\n  const sqlParts = [\n    `SELECT ${payload.select ? quoteSelectColumnsExpression(payload.select) : \"*\"} FROM ${functionRef}(${argsClause})`,\n  ];\n  if (payload.filters?.length) {\n    sqlParts.push(\n      `WHERE ${payload.filters.map(rpcFilterToSqlClause).join(\" AND \")}`\n    );\n  }\n  if (payload.order?.column) {\n    const direction = payload.order.ascending === false ? \"DESC\" : \"ASC\";\n    sqlParts.push(\n      `ORDER BY ${quoteQualifiedIdentifier(payload.order.column)} ${direction}`\n    );\n  }\n  if (payload.limit !== undefined) {\n    sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(payload.limit))}`);\n  }\n  if (payload.offset !== undefined) {\n    sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(payload.offset))}`);\n  }\n  return `${sqlParts.join(\" \")};`;\n}\n","import type { BackendConfig } from \"./gateway/types.ts\";\nimport { normalizeAthenaGatewayBaseUrl } from \"./gateway/url.ts\";\nimport { buildSdkHeaderValue } from \"./sdk-version.ts\";\nimport {\n  buildAthenaRequestHeaders,\n  hasHeaderIgnoreCase,\n} from \"./utils/athena-request-headers.ts\";\n\nconst SDK_NAME = \"xylex-group/athena\";\n\nexport type AthenaRequestService = \"db\" | \"auth\" | \"chat\" | \"storage\";\nexport type AthenaRequestMethod =\n  | \"GET\"\n  | \"POST\"\n  | \"PUT\"\n  | \"PATCH\"\n  | \"DELETE\"\n  | \"HEAD\"\n  | \"OPTIONS\";\n\nexport interface AthenaRequestQueryValueMap {\n  [key: string]:\n    | string\n    | number\n    | boolean\n    | null\n    | undefined\n    | Array<string | number | boolean | null | undefined>;\n}\n\nexport interface AthenaRequestOptions {\n  /** Per-request override for the canonical `X-Athena-Key` header. */\n  apiKey?: string | null;\n  body?: RequestInit[\"body\"] | Record<string, unknown> | unknown[] | null;\n  credentials?: RequestInit[\"credentials\"];\n  headers?: Record<string, string>;\n  method?: AthenaRequestMethod;\n  path?: string;\n  query?: AthenaRequestQueryValueMap;\n  responseType?: \"json\" | \"text\" | \"response\";\n  service?: AthenaRequestService;\n  signal?: AbortSignal;\n  url?: string;\n}\n\nexport interface AthenaRequestResponse<T = unknown> {\n  data: T | string | null;\n  headers: Headers;\n  ok: boolean;\n  raw: Response;\n  status: number;\n  statusText: string;\n}\n\nexport interface AthenaRawRequestConfig {\n  apiKey?: string;\n  authUrl?: string;\n  backend?: BackendConfig;\n  baseUrl?: string;\n  chatUrl?: string;\n  client?: string | null;\n  headers?: Record<string, string>;\n  jdbcUrl?: string | null;\n  pgUri?: string | null;\n  storageUrl?: string;\n}\n\nexport interface AthenaRawRequestContext {\n  bearerToken?: string | null;\n  cookie?: string | null;\n  forceNoCache?: boolean;\n  headers?: Record<string, string>;\n  organizationId?: string | null;\n  sessionToken?: string | null;\n  userId?: string | null;\n}\n\nfunction parseArbitraryResponseBody(\n  rawText: string,\n  contentType: string | null\n): unknown {\n  if (!rawText) {\n    return null;\n  }\n  if (contentType?.toLowerCase().includes(\"application/json\")) {\n    try {\n      return JSON.parse(rawText);\n    } catch {\n      return rawText;\n    }\n  }\n  const trimmed = rawText.trim();\n  if (\n    (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) ||\n    (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))\n  ) {\n    try {\n      return JSON.parse(trimmed);\n    } catch {\n      return rawText;\n    }\n  }\n  return rawText;\n}\n\nfunction toRequestQueryString(query?: AthenaRequestQueryValueMap): string {\n  if (!query) {\n    return \"\";\n  }\n  const params = new URLSearchParams();\n  for (const [key, rawValue] of Object.entries(query)) {\n    const values = Array.isArray(rawValue) ? rawValue : [rawValue];\n    for (const value of values) {\n      if (value === undefined) {\n        continue;\n      }\n      params.append(key, value === null ? \"\" : String(value));\n    }\n  }\n  const serialized = params.toString();\n  return serialized ? `?${serialized}` : \"\";\n}\n\nfunction isJsonBody(body: AthenaRequestOptions[\"body\"]): boolean {\n  return (\n    body !== undefined &&\n    body !== null &&\n    !(body instanceof FormData) &&\n    !(body instanceof Blob) &&\n    !(body instanceof URLSearchParams) &&\n    !(body instanceof ArrayBuffer) &&\n    !ArrayBuffer.isView(body) &&\n    typeof body !== \"string\"\n  );\n}\n\nexport function createAthenaRequest(\n  config: AthenaRawRequestConfig,\n  resolveContext: () =>\n    | AthenaRawRequestContext\n    | undefined\n    | Promise<AthenaRawRequestContext | undefined>\n): <T = unknown>(\n  options: AthenaRequestOptions\n) => Promise<AthenaRequestResponse<T>> {\n  return async <T = unknown>(\n    options: AthenaRequestOptions\n  ): Promise<AthenaRequestResponse<T>> => {\n    const context = await resolveContext();\n    const method = options.method ?? \"GET\";\n    const responseType = options.responseType ?? \"json\";\n    const service = options.service ?? \"db\";\n    const absoluteUrl = options.url?.trim();\n    const baseUrlByService: Record<AthenaRequestService, string | undefined> = {\n      auth: config.authUrl,\n      chat: config.chatUrl,\n      db: config.baseUrl,\n      storage: config.storageUrl,\n    };\n\n    const queryString = toRequestQueryString(options.query);\n    let targetUrl: string;\n    if (absoluteUrl) {\n      // Absolute URLs bypass gateway base-url normalization so query/hash are preserved\n      // and auth-only / storage-only clients can still call arbitrary endpoints.\n      try {\n        const parsed = new URL(absoluteUrl);\n        if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n          throw new Error(\"not http(s)\");\n        }\n      } catch (error) {\n        throw new Error(\n          `client.request(...) url must be an absolute http(s) URL. Received ${JSON.stringify(options.url)}.`,\n          { cause: error }\n        );\n      }\n      targetUrl = `${absoluteUrl}${queryString}`;\n    } else {\n      const resolvedBaseUrl = baseUrlByService[service];\n      if (!resolvedBaseUrl) {\n        throw new Error(\n          `Athena ${service} base URL is not configured. Pass createClient({ url }) for unified routing or set the service-specific URL first.`\n        );\n      }\n\n      const normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(resolvedBaseUrl, {\n        label: `Athena ${service} base URL`,\n      });\n      const path = options.path?.trim();\n      if (!path) {\n        throw new Error(\n          \"client.request(...) requires either an absolute url or a non-empty path.\"\n        );\n      }\n      const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n      targetUrl = `${normalizedBaseUrl}${normalizedPath}${queryString}`;\n    }\n\n    const requestProfile =\n      service === \"auth\"\n        ? \"auth\"\n        : service === \"chat\"\n          ? \"chat\"\n          : service === \"storage\"\n            ? \"storage\"\n            : \"gateway\";\n    const headers = buildAthenaRequestHeaders({\n      accept: service === \"chat\" ? \"application/json\" : undefined,\n      apiKey: options.apiKey ?? config.apiKey,\n      backend: config.backend,\n      bearerToken: context?.bearerToken,\n      callHeaders: options.headers,\n      client: config.client,\n      configHeaders: {\n        ...(config.headers ?? {}),\n        ...(context?.headers ?? {}),\n      },\n      contentType:\n        service === \"auth\" || service === \"db\" || service === \"storage\"\n          ? \"application/json\"\n          : undefined,\n      cookie: context?.cookie,\n      forceNoCache: context?.forceNoCache,\n      jdbcUrl: config.jdbcUrl,\n      organizationId: context?.organizationId,\n      pgUri: config.pgUri,\n      profile: requestProfile,\n      sdkHeaderValue: buildSdkHeaderValue(SDK_NAME),\n      sessionToken: context?.sessionToken,\n      stripNulls: service === \"db\" ? true : undefined,\n      userId: context?.userId,\n    });\n\n    const shouldSendJsonBody = isJsonBody(options.body);\n    if (shouldSendJsonBody && !hasHeaderIgnoreCase(headers, \"Content-Type\")) {\n      headers[\"Content-Type\"] = \"application/json\";\n    }\n\n    const response = await fetch(targetUrl, {\n      body:\n        options.body === undefined || options.body === null\n          ? undefined\n          : shouldSendJsonBody\n            ? JSON.stringify(options.body)\n            : (options.body as RequestInit[\"body\"]),\n      credentials: options.credentials,\n      headers,\n      method,\n      signal: options.signal,\n    });\n\n    if (responseType === \"response\") {\n      return {\n        data: null,\n        headers: response.headers,\n        ok: response.ok,\n        raw: response,\n        status: response.status,\n        statusText: response.statusText,\n      };\n    }\n\n    const rawText = await response.text();\n    const parsed =\n      responseType === \"text\"\n        ? rawText\n        : parseArbitraryResponseBody(\n            rawText,\n            response.headers.get(\"content-type\")\n          );\n\n    return {\n      data: parsed as T | string | null,\n      headers: response.headers,\n      ok: response.ok,\n      raw: response,\n      status: response.status,\n      statusText: response.statusText,\n    };\n  };\n}\n","/**\n * Canonical Athena gateway route descriptors for SDK route selection.\n *\n * Classifications mirror `docs/release/athena-5-route-manifest.json`.\n * Do not invent a second handwritten sunset policy — keep this table aligned\n * with the monorepo manifest when either changes.\n */\n\nexport type AthenaRouteClassification =\n  | \"Retain\"\n  | \"Migrate\"\n  | \"Deprecate\"\n  | \"Remove\"\n  | \"Internalize\"\n  | \"Replace\";\n\nexport type AthenaRouteStatus = \"retained\" | \"deprecated\" | \"removed\";\n\nexport interface AthenaRouteDescriptor {\n  classification: AthenaRouteClassification;\n  methods: readonly string[];\n  path: string;\n  protocol: number;\n  reason: string;\n  replacement: string | null;\n  status: AthenaRouteStatus;\n}\n\nfunction classificationToStatus(\n  classification: AthenaRouteClassification\n): AthenaRouteStatus {\n  if (classification === \"Deprecate\" || classification === \"Migrate\") {\n    return \"deprecated\";\n  }\n  if (classification === \"Remove\") {\n    return \"removed\";\n  }\n  return \"retained\";\n}\n\n/** Structured CRUD + raw query paths used by the JS SDK. */\nexport const ATHENA_GATEWAY_ROUTES = {\n  delete: \"/gateway/delete\",\n  health: \"/health\",\n  insert: \"/gateway/insert\",\n  rawQuery: \"/gateway/query\",\n  root: \"/\",\n  rpc: \"/gateway/rpc\",\n  select: \"/gateway/fetch\",\n  update: \"/gateway/update\",\n} as const;\n\nexport type AthenaGatewayRouteKey = keyof typeof ATHENA_GATEWAY_ROUTES;\n\n/**\n * Inventory sourced from docs/release/athena-5-route-manifest.json (gateway + health).\n * Keep in sync when the monorepo manifest changes.\n */\nexport const ATHENA_ROUTE_MANIFEST: readonly AthenaRouteDescriptor[] = [\n  {\n    classification: \"Retain\",\n    methods: [\"POST\", \"GET\"],\n    path: \"/gateway/fetch\",\n    protocol: 1,\n    reason: \"Canonical structured read API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"POST\"],\n    path: \"/gateway/insert\",\n    protocol: 1,\n    reason: \"Canonical write API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"POST\"],\n    path: \"/gateway/update\",\n    protocol: 1,\n    reason: \"Canonical update API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"POST\"],\n    path: \"/gateway/delete\",\n    protocol: 1,\n    reason: \"Canonical delete API\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n  {\n    classification: \"Deprecate\",\n    methods: [\"POST\"],\n    path: \"/gateway/query\",\n    protocol: 1,\n    reason:\n      \"Raw SQL is harder to secure and bypasses structured metadata ownership\",\n    replacement:\n      \"Structured /gateway/fetch|insert|update|delete with compiled statements\",\n    status: classificationToStatus(\"Deprecate\"),\n  },\n  {\n    classification: \"Retain\",\n    methods: [\"GET\"],\n    path: \"/health\",\n    protocol: 1,\n    reason: \"Diagnostics surface; Athena 5 adds release identity\",\n    replacement: null,\n    status: classificationToStatus(\"Retain\"),\n  },\n] as const;\n\nexport function getAthenaRouteDescriptor(\n  path: string\n): AthenaRouteDescriptor | undefined {\n  return ATHENA_ROUTE_MANIFEST.find((route) => route.path === path);\n}\n\nexport function isDeprecatedAthenaRoute(path: string): boolean {\n  return getAthenaRouteDescriptor(path)?.status === \"deprecated\";\n}\n","/**\n * Explicit administrative raw SQL surface for Athena-JS 3.7 (Dragunov-compatible).\n *\n * Prefer this over root `athena.query()` which remains a deprecated compatibility alias.\n */\n\nimport type { AthenaResult, AthenaResultFormatter } from \"../client-result.ts\";\nimport type { AthenaGatewayClient } from \"../gateway/client.ts\";\nimport { ATHENA_GATEWAY_ROUTES } from \"../gateway/routes.ts\";\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaQueryPayload,\n} from \"../gateway/types.ts\";\n\nexport type AthenaRawQueryOperation =\n  | \"select\"\n  | \"insert\"\n  | \"update\"\n  | \"delete\"\n  | \"ddl\"\n  | \"transaction\"\n  | \"unknown\";\n\nexport type AthenaExpectedQueryShape =\n  | \"rows\"\n  | \"single\"\n  | \"maybe-single\"\n  | \"affected-only\"\n  | \"none\";\n\nexport interface AthenaAdminQueryInput<\n  TParams extends readonly unknown[] = readonly unknown[],\n> {\n  expectedShape: AthenaExpectedQueryShape;\n  headers?: Record<string, string>;\n  operation: AthenaRawQueryOperation;\n  params?: TParams;\n  signal?: AbortSignal;\n  sql: string;\n}\n\nexport interface AthenaAdminQueryExecutionMetadata {\n  /** null means unknown — never fabricate 0 when meta is absent. */\n  affectedRows: number | null;\n  backend: \"postgres\" | \"d1\" | \"scylla\" | \"supabase\" | \"unknown\";\n  deprecated: boolean;\n  expectedShape: AthenaExpectedQueryShape;\n  lastInsertId: string | number | null;\n  operation: AthenaRawQueryOperation;\n  route: string;\n  transport: \"gateway\" | \"d1-binding\" | \"d1-http-proxy\" | \"direct\" | \"unknown\";\n}\n\nexport interface AthenaAdminQueryResult<T = unknown> extends AthenaResult<T> {\n  metadata: AthenaAdminQueryExecutionMetadata;\n}\n\nexport const ATHENA_RAW_SQL_COMPAT_DEPRECATED =\n  \"ATHENA_RAW_SQL_COMPAT_DEPRECATED\" as const;\n\nexport const ATHENA_ADMIN_QUERY_EMPTY_SQL =\n  \"ATHENA_ADMIN_QUERY_EMPTY_SQL\" as const;\n\nexport const ATHENA_ADMIN_QUERY_MULTI_STATEMENT =\n  \"ATHENA_ADMIN_QUERY_MULTI_STATEMENT\" as const;\n\nexport const ATHENA_ADMIN_QUERY_INVALID_SHAPE =\n  \"ATHENA_ADMIN_QUERY_INVALID_SHAPE\" as const;\n\nconst ROW_SHAPES: ReadonlySet<AthenaExpectedQueryShape> = new Set([\n  \"rows\",\n  \"single\",\n  \"maybe-single\",\n]);\n\nconst AFFECTED_SHAPES: ReadonlySet<AthenaExpectedQueryShape> = new Set([\n  \"affected-only\",\n  \"none\",\n]);\n\n/** Reject empty SQL. */\nexport function assertNonEmptySql(sql: string): string {\n  const normalized = sql.trim();\n  if (!normalized) {\n    const error = new Error(\"admin.query requires a non-empty sql string\");\n    (error as Error & { code?: string }).code = ATHENA_ADMIN_QUERY_EMPTY_SQL;\n    throw error;\n  }\n  return normalized;\n}\n\n/**\n * Conservative multi-statement detection (semicolon outside simple quotes).\n * Does not attempt a full SQL parser.\n */\nexport function sqlLooksLikeMultipleStatements(sql: string): boolean {\n  let inSingle = false;\n  let inDouble = false;\n  let inLineComment = false;\n  let inBlockComment = false;\n  for (let i = 0; i < sql.length; i += 1) {\n    const ch = sql[i];\n    const next = sql[i + 1];\n    if (inLineComment) {\n      if (ch === \"\\n\") {\n        inLineComment = false;\n      }\n      continue;\n    }\n    if (inBlockComment) {\n      if (ch === \"*\" && next === \"/\") {\n        inBlockComment = false;\n        i += 1;\n      }\n      continue;\n    }\n    if (!(inSingle || inDouble)) {\n      if (ch === \"-\" && next === \"-\") {\n        inLineComment = true;\n        i += 1;\n        continue;\n      }\n      if (ch === \"/\" && next === \"*\") {\n        inBlockComment = true;\n        i += 1;\n        continue;\n      }\n    }\n    if (ch === \"'\" && !inDouble) {\n      if (inSingle && next === \"'\") {\n        i += 1;\n        continue;\n      }\n      inSingle = !inSingle;\n      continue;\n    }\n    if (ch === '\"' && !inSingle) {\n      inDouble = !inDouble;\n      continue;\n    }\n    if (!(inSingle || inDouble) && ch === \";\") {\n      const rest = sql.slice(i + 1).trim();\n      if (rest.length > 0) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\n/** Validate operation / expectedShape combinations fail-closed. */\nexport function assertValidAdminQueryShape(\n  operation: AthenaRawQueryOperation,\n  expectedShape: AthenaExpectedQueryShape\n): void {\n  if (operation === \"select\" && AFFECTED_SHAPES.has(expectedShape)) {\n    const error = new Error(\n      `admin.query: operation \"select\" is incompatible with expectedShape \"${expectedShape}\"`\n    );\n    (error as Error & { code?: string }).code =\n      ATHENA_ADMIN_QUERY_INVALID_SHAPE;\n    throw error;\n  }\n  if (\n    (operation === \"insert\" ||\n      operation === \"update\" ||\n      operation === \"delete\") &&\n    expectedShape === \"none\"\n  ) {\n    // allowed (caller ignores rows)\n    return;\n  }\n  if (\n    (operation === \"insert\" ||\n      operation === \"update\" ||\n      operation === \"delete\") &&\n    ROW_SHAPES.has(expectedShape) === false &&\n    expectedShape !== \"affected-only\"\n  ) {\n    // ddl/transaction/unknown may use any shape\n  }\n}\n\n/**\n * Conservative SQL classification for legacy root query().\n * Prefer explicit operation on admin.query().\n */\nexport function classifyRawSqlOperation(sql: string): AthenaRawQueryOperation {\n  const head = sql.trim().replace(/^\\(+/, \"\").slice(0, 32).toLowerCase();\n  if (head.startsWith(\"select\") || head.startsWith(\"with\")) {\n    return \"select\";\n  }\n  if (head.startsWith(\"insert\")) {\n    return \"insert\";\n  }\n  if (head.startsWith(\"update\")) {\n    return \"update\";\n  }\n  if (head.startsWith(\"delete\")) {\n    return \"delete\";\n  }\n  if (\n    head.startsWith(\"create\") ||\n    head.startsWith(\"alter\") ||\n    head.startsWith(\"drop\") ||\n    head.startsWith(\"truncate\")\n  ) {\n    return \"ddl\";\n  }\n  if (\n    head.startsWith(\"begin\") ||\n    head.startsWith(\"commit\") ||\n    head.startsWith(\"rollback\")\n  ) {\n    return \"transaction\";\n  }\n  return \"unknown\";\n}\n\nexport function defaultExpectedShapeForOperation(\n  operation: AthenaRawQueryOperation\n): AthenaExpectedQueryShape {\n  if (operation === \"select\") {\n    return \"rows\";\n  }\n  if (\n    operation === \"insert\" ||\n    operation === \"update\" ||\n    operation === \"delete\"\n  ) {\n    return \"affected-only\";\n  }\n  return \"rows\";\n}\n\nfunction extractAffectedRows(\n  raw: unknown,\n  count: number | null | undefined,\n  operation: AthenaRawQueryOperation,\n  expectedShape: AthenaExpectedQueryShape\n): number | null {\n  // Honest mutation metadata: never treat SELECT (read) row-counts as affected rows.\n  const isMutation =\n    operation === \"insert\" || operation === \"update\" || operation === \"delete\";\n  if (!isMutation && expectedShape !== \"affected-only\") {\n    return null;\n  }\n  if (typeof count === \"number\" && Number.isFinite(count)) {\n    return count;\n  }\n  if (!raw || typeof raw !== \"object\") {\n    return null;\n  }\n  const record = raw as Record<string, unknown>;\n  const candidates = [\n    record.affected_rows,\n    record.affectedRows,\n    record.changes,\n    record.rows_written,\n    record.rowCount,\n  ];\n  for (const candidate of candidates) {\n    if (typeof candidate === \"number\" && Number.isFinite(candidate)) {\n      return candidate;\n    }\n  }\n  return null;\n}\n\nfunction extractLastInsertId(raw: unknown): string | number | null {\n  if (!raw || typeof raw !== \"object\") {\n    return null;\n  }\n  const record = raw as Record<string, unknown>;\n  const candidates = [\n    record.last_insert_id,\n    record.lastInsertId,\n    record.last_row_id,\n    record.lastRowId,\n  ];\n  for (const candidate of candidates) {\n    if (\n      (typeof candidate === \"string\" && candidate.length > 0) ||\n      (typeof candidate === \"number\" && Number.isFinite(candidate))\n    ) {\n      return candidate as string | number;\n    }\n  }\n  return null;\n}\n\nfunction shapeResultData<T>(\n  data: T | null,\n  expectedShape: AthenaExpectedQueryShape\n): T | null {\n  if (data === null) {\n    return data;\n  }\n  if (\n    expectedShape === \"rows\" ||\n    expectedShape === \"affected-only\" ||\n    expectedShape === \"none\"\n  ) {\n    return data;\n  }\n  if (!Array.isArray(data)) {\n    return data;\n  }\n  if (expectedShape === \"single\") {\n    return (data[0] ?? null) as T;\n  }\n  if (expectedShape === \"maybe-single\") {\n    return (data[0] ?? null) as T;\n  }\n  return data;\n}\n\nexport interface CreateAdminQueryOptions {\n  /**\n   * When true, multi-statement SQL is forwarded to the gateway instead of\n   * throwing `ATHENA_ADMIN_QUERY_MULTI_STATEMENT`.\n   *\n   * Used only by the legacy root `query()` compatibility alias so migration /\n   * seed scripts keep working. Explicit `admin.query()` keeps the default\n   * reject (allowMultiStatement omitted / false).\n   */\n  allowMultiStatement?: boolean;\n  backend?: AthenaAdminQueryExecutionMetadata[\"backend\"];\n  client: Pick<AthenaGatewayClient, \"queryGateway\">;\n  formatGatewayResult: AthenaResultFormatter;\n  /** Transport hint for metadata honesty. */\n  transport?: AthenaAdminQueryExecutionMetadata[\"transport\"];\n}\n\nexport function createAdminQuery(\n  options: CreateAdminQueryOptions\n): <T = unknown, TParams extends readonly unknown[] = readonly unknown[]>(\n  input: AthenaAdminQueryInput<TParams>,\n  callOptions?: AthenaGatewayCallOptions\n) => Promise<AthenaAdminQueryResult<T>> {\n  const {\n    client,\n    formatGatewayResult,\n    transport = \"gateway\",\n    backend = \"unknown\",\n    allowMultiStatement = false,\n  } = options;\n\n  return async function adminQuery<\n    T = unknown,\n    TParams extends readonly unknown[] = readonly unknown[],\n  >(\n    input: AthenaAdminQueryInput<TParams>,\n    callOptions?: AthenaGatewayCallOptions\n  ): Promise<AthenaAdminQueryResult<T>> {\n    const sql = assertNonEmptySql(input.sql);\n    assertValidAdminQueryShape(input.operation, input.expectedShape);\n\n    if (!allowMultiStatement && sqlLooksLikeMultipleStatements(sql)) {\n      const error = new Error(\n        \"admin.query rejects multi-statement SQL by default\"\n      );\n      (error as Error & { code?: string }).code =\n        ATHENA_ADMIN_QUERY_MULTI_STATEMENT;\n      throw error;\n    }\n\n    const params = input.params ?? callOptions?.params;\n    const payload: AthenaQueryPayload = {\n      query: sql,\n      ...(Array.isArray(params) ? { params: [...params] } : {}),\n      expectedShape: input.expectedShape,\n      operation: input.operation,\n    };\n\n    const mergedOptions: AthenaGatewayCallOptions | undefined = {\n      ...callOptions,\n      ...(input.headers\n        ? {\n            headers: {\n              ...(callOptions?.headers ?? {}),\n              ...input.headers,\n            },\n          }\n        : {}),\n      ...(input.signal ? { signal: input.signal } : {}),\n    };\n\n    const response = await client.queryGateway<T>(payload, mergedOptions);\n    const formatted = formatGatewayResult(response, {\n      operation: input.operation,\n    });\n    const shapedData = shapeResultData(formatted.data, input.expectedShape);\n    const affectedRows = extractAffectedRows(\n      formatted.raw,\n      formatted.count,\n      input.operation,\n      input.expectedShape\n    );\n    const lastInsertId = extractLastInsertId(formatted.raw);\n\n    return {\n      ...formatted,\n      data: shapedData,\n      metadata: {\n        affectedRows,\n        backend,\n        deprecated: true,\n        expectedShape: input.expectedShape,\n        lastInsertId,\n        operation: input.operation,\n        route: ATHENA_GATEWAY_ROUTES.rawQuery,\n        transport,\n      },\n    };\n  };\n}\n\n/** Per-client deprecation warning dedupe for root query(). */\nconst deprecationWarnedClients = new WeakSet<object>();\n\nexport type AthenaRawQueryDiagnosticsMode = boolean | \"auto\";\n\nexport function maybeWarnRawQueryDeprecated(\n  owner: object,\n  diagnostics: AthenaRawQueryDiagnosticsMode | undefined\n): void {\n  if (diagnostics === false) {\n    return;\n  }\n  const nodeEnv = (globalThis as { process?: { env?: { NODE_ENV?: string } } })\n    .process?.env?.NODE_ENV;\n  const isDev = nodeEnv !== \"production\";\n  const shouldWarn =\n    diagnostics === true ||\n    (diagnostics === \"auto\" && isDev) ||\n    (diagnostics === undefined && isDev);\n  if (!shouldWarn) {\n    return;\n  }\n  if (deprecationWarnedClients.has(owner)) {\n    return;\n  }\n  deprecationWarnedClients.add(owner);\n  console.warn(\n    `[athena] ${ATHENA_RAW_SQL_COMPAT_DEPRECATED}: athena.query() is a compatibility alias. Prefer athena.admin.query({ sql, operation, expectedShape }).`\n  );\n}\n","/**\n * Shared HTTP response JSON heuristics used by gateway, storage, auth, and chat.\n */\n\nexport interface ParsedHttpResponseBody {\n  parsed: unknown;\n  parseFailed: boolean;\n}\n\n/**\n * Parse a response body as JSON when content-type or body shape suggests JSON.\n * Non-JSON text is returned as a string with `parseFailed: false`.\n * Empty body → `parsed: null`.\n */\nexport function parseHttpResponseBody(\n  rawText: string,\n  contentType: string | null\n): ParsedHttpResponseBody {\n  if (!rawText) {\n    return { parsed: null, parseFailed: false };\n  }\n\n  const contentTypeSuggestsJson =\n    contentType?.toLowerCase().includes(\"application/json\") ?? false;\n  const looksJson =\n    contentTypeSuggestsJson ||\n    rawText.startsWith(\"{\") ||\n    rawText.startsWith(\"[\");\n\n  if (!looksJson) {\n    return { parsed: rawText, parseFailed: false };\n  }\n\n  try {\n    return { parsed: JSON.parse(rawText) as unknown, parseFailed: false };\n  } catch {\n    return { parsed: rawText, parseFailed: true };\n  }\n}\n","export interface AthenaAuthAdminLimits {\n  maxAdminJsonBytes: number;\n  maxAdminJsonDepth: number;\n  maxTemplateVariableLength: number;\n  maxTemplateVariables: number;\n}\n\nexport const ATHENA_AUTH_MAX_ADMIN_JSON_BYTES = 32 * 1024;\nexport const ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH = 8;\nexport const ATHENA_AUTH_MAX_TEMPLATE_VARIABLES = 64;\nexport const ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH = 128;\n\nexport const ATHENA_AUTH_ADMIN_LIMITS = {\n  maxAdminJsonBytes: ATHENA_AUTH_MAX_ADMIN_JSON_BYTES,\n  maxAdminJsonDepth: ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH,\n  maxTemplateVariableLength: ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH,\n  maxTemplateVariables: ATHENA_AUTH_MAX_TEMPLATE_VARIABLES,\n} as const satisfies AthenaAuthAdminLimits;\n\nfunction describeTemplateVariableTarget(target?: string) {\n  const normalized = target?.trim();\n  return normalized && normalized.length > 0\n    ? normalized\n    : \"Athena auth admin email template variables\";\n}\n\nexport function assertAthenaAuthTemplateVariables(\n  variables: unknown,\n  target?: string\n): asserts variables is string[] {\n  const label = describeTemplateVariableTarget(target);\n  if (!Array.isArray(variables)) {\n    throw new Error(`${label} must be an array of strings.`);\n  }\n\n  if (variables.length > ATHENA_AUTH_MAX_TEMPLATE_VARIABLES) {\n    throw new Error(\n      `${label} cannot contain more than ${ATHENA_AUTH_MAX_TEMPLATE_VARIABLES} entries.`\n    );\n  }\n\n  variables.forEach((variable, index) => {\n    if (typeof variable !== \"string\") {\n      throw new Error(\n        `${label} must contain only strings. Received ${typeof variable} at index ${index}.`\n      );\n    }\n\n    if (variable.length > ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH) {\n      throw new Error(\n        `${label} cannot contain entries longer than ${ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH} characters. Received ${variable.length} characters at index ${index}.`\n      );\n    }\n  });\n}\n","import type {\n  AthenaAuthEmailTemplateBuilder,\n  AthenaAuthEmailTemplateCreateFromDefinitionInput,\n  AthenaAuthEmailTemplateDefinition,\n  AthenaAuthEmailTemplateUpdateFromDefinitionInput,\n  AthenaAuthLooseRecord,\n  AthenaAuthReactEmailComponent,\n  AthenaAuthReactEmailConfig,\n  AthenaAuthReactEmailEventPhase,\n  AthenaAuthReactEmailProps,\n  AthenaAuthReactEmailRenderEvent,\n  AthenaAuthReactEmailRenderInput,\n  AthenaAuthReactEmailRenderOptions,\n} from \"./types.ts\";\n\ninterface ReactEmailRenderModule {\n  pretty?: (html: string) => string | Promise<string>;\n  render: (element: unknown) => string | Promise<string>;\n  toPlainText?: (html: string) => string | Promise<string>;\n}\n\nexport interface AthenaAuthRenderedReactEmail {\n  html: string;\n  text?: string;\n}\n\nexport interface AthenaAuthReactEmailPayload {\n  react?: AthenaAuthReactEmailRenderInput;\n}\n\nexport interface AthenaAuthReactEmailRuntimeOptions {\n  defaults?: AthenaAuthReactEmailRenderOptions;\n  observe?: (event: AthenaAuthReactEmailRenderEvent) => void;\n  route?: string;\n}\n\ninterface ResolvePayloadFieldsInput {\n  htmlField: string;\n  textField: string;\n  variablesField?: string;\n}\n\nlet reactEmailRenderModulePromise: Promise<ReactEmailRenderModule> | undefined;\n\nfunction isRecord(value: unknown): value is AthenaAuthLooseRecord {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isFunction(value: unknown): value is (...args: unknown[]) => unknown {\n  return typeof value === \"function\";\n}\n\nfunction toStringOrUndefined(value: unknown): string | undefined {\n  if (typeof value !== \"string\") {\n    return;\n  }\n  return value;\n}\n\nfunction nowIsoString() {\n  return new Date().toISOString();\n}\n\nfunction emitReactEmailEvent(\n  observe: ((event: AthenaAuthReactEmailRenderEvent) => void) | undefined,\n  phase: AthenaAuthReactEmailEventPhase,\n  input: Omit<AthenaAuthReactEmailRenderEvent, \"phase\" | \"timestamp\"> = {}\n) {\n  if (!observe) {\n    return;\n  }\n  try {\n    observe({\n      phase,\n      timestamp: nowIsoString(),\n      ...input,\n    });\n  } catch {\n    // Observability hooks are non-blocking.\n  }\n}\n\nfunction mergeRenderDefaults(\n  input: AthenaAuthReactEmailRenderInput,\n  defaults?: AthenaAuthReactEmailRenderOptions\n): AthenaAuthReactEmailRenderInput {\n  return {\n    ...input,\n    includePlainText: input.includePlainText ?? defaults?.includePlainText,\n    pretty: input.pretty ?? defaults?.pretty,\n  };\n}\n\nfunction mergeRuntimeOptions(\n  options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig\n): AthenaAuthReactEmailRuntimeOptions | undefined {\n  if (!options) {\n    return;\n  }\n  return {\n    defaults: options.defaults,\n    observe: options.observe,\n    route: \"route\" in options ? options.route : undefined,\n  };\n}\n\nasync function resolveReactEmailRenderModule(): Promise<ReactEmailRenderModule> {\n  if (!reactEmailRenderModulePromise) {\n    reactEmailRenderModulePromise = (async () => {\n      try {\n        const loaded = await import(\"@react-email/render\");\n        if (!isFunction(loaded.render)) {\n          throw new Error(\"missing render(...) export\");\n        }\n        return {\n          pretty: isFunction(loaded.pretty)\n            ? (loaded.pretty as ReactEmailRenderModule[\"pretty\"])\n            : undefined,\n          render: loaded.render as ReactEmailRenderModule[\"render\"],\n          toPlainText: isFunction(loaded.toPlainText)\n            ? (loaded.toPlainText as ReactEmailRenderModule[\"toPlainText\"])\n            : undefined,\n        };\n      } catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        throw new Error(\n          `React Email rendering requires @react-email/render. Install it in your project (for example: pnpm add @react-email/render). Loader error: ${message}`,\n          { cause: error }\n        );\n      }\n    })();\n  }\n\n  if (!reactEmailRenderModulePromise) {\n    throw new Error(\"React Email renderer module failed to initialize\");\n  }\n\n  return reactEmailRenderModulePromise;\n}\n\nasync function resolveReactEmailElement(\n  input: AthenaAuthReactEmailRenderInput\n): Promise<unknown> {\n  // Omitted `element` is undefined; only an explicit element short-circuits.\n  // `undefined !== null` is true and previously rendered an empty element\n  // instead of falling through to `component` + `props`.\n  if (input.element != null) {\n    return input.element;\n  }\n  if (!input.component) {\n    throw new Error(\n      \"react email payload requires either `element` or `component`\"\n    );\n  }\n\n  try {\n    const reactModule = await import(\"react\");\n    if (typeof reactModule.createElement !== \"function\") {\n      throw new Error(\"react createElement(...) export is unavailable\");\n    }\n    return reactModule.createElement(\n      input.component as Parameters<typeof reactModule.createElement>[0],\n      input.props ?? {}\n    );\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    throw new Error(\n      `React Email component rendering requires react runtime support. Install react in your project. Loader error: ${message}`,\n      { cause: error }\n    );\n  }\n}\n\nexport function createAuthReactEmailInput<\n  TProps extends AthenaAuthReactEmailProps = AthenaAuthReactEmailProps,\n>(\n  component: AthenaAuthReactEmailComponent<TProps>,\n  props: TProps,\n  overrides: Omit<\n    AthenaAuthReactEmailRenderInput,\n    \"component\" | \"props\" | \"element\"\n  > = {}\n): AthenaAuthReactEmailRenderInput {\n  return {\n    ...overrides,\n    component: component as AthenaAuthReactEmailComponent,\n    props,\n  };\n}\n\nexport function defineAuthEmailTemplate<\n  TProps extends AthenaAuthReactEmailProps = AthenaAuthReactEmailProps,\n>(\n  definition: AthenaAuthEmailTemplateDefinition<TProps>\n): AthenaAuthEmailTemplateBuilder<TProps> {\n  const react: AthenaAuthEmailTemplateBuilder<TProps>[\"react\"] = (\n    props,\n    overrides\n  ) =>\n    createAuthReactEmailInput(definition.component, props, {\n      ...definition.defaults,\n      ...overrides,\n    });\n\n  return {\n    component: definition.component,\n    react,\n    toTemplateCreate: (\n      input: AthenaAuthEmailTemplateCreateFromDefinitionInput<TProps>\n    ) => {\n      const templateKey = input.templateKey ?? definition.templateKey;\n      const subjectTemplate =\n        input.subjectTemplate ?? definition.subjectTemplate;\n      if (!templateKey) {\n        throw new Error(\n          \"defineAuthEmailTemplate.toTemplateCreate requires templateKey\"\n        );\n      }\n      if (!subjectTemplate) {\n        throw new Error(\n          \"defineAuthEmailTemplate.toTemplateCreate requires subjectTemplate\"\n        );\n      }\n\n      const { props, react: reactOverrides, ...rest } = input;\n      return {\n        ...rest,\n        react: react(props, reactOverrides),\n        subjectTemplate,\n        templateKey,\n      };\n    },\n    toTemplateUpdate: (\n      input: AthenaAuthEmailTemplateUpdateFromDefinitionInput<TProps>\n    ) => {\n      const { props, react: reactOverrides, ...rest } = input;\n      return {\n        ...rest,\n        react: react(props, reactOverrides),\n      };\n    },\n  };\n}\n\nexport async function renderAthenaReactEmail(\n  input: AthenaAuthReactEmailRenderInput,\n  options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig\n): Promise<AthenaAuthRenderedReactEmail> {\n  if (!isRecord(input)) {\n    throw new Error(\"react email payload must be an object\");\n  }\n\n  const runtimeOptions = mergeRuntimeOptions(options);\n  const start = Date.now();\n  emitReactEmailEvent(runtimeOptions?.observe, \"render:start\", {\n    message: \"Rendering react email payload\",\n    route: runtimeOptions?.route,\n  });\n\n  try {\n    const normalizedInput = mergeRenderDefaults(\n      input,\n      runtimeOptions?.defaults\n    );\n    const element = await resolveReactEmailElement(normalizedInput);\n    const renderModule = await resolveReactEmailRenderModule();\n    const htmlValue = await renderModule.render(element);\n    const renderedHtml =\n      typeof htmlValue === \"string\" ? htmlValue : String(htmlValue ?? \"\");\n    if (!renderedHtml.trim()) {\n      throw new Error(\"react email renderer returned an empty HTML string\");\n    }\n\n    let html = renderedHtml;\n    if (normalizedInput.pretty && renderModule.pretty) {\n      const prettyValue = await renderModule.pretty(renderedHtml);\n      if (typeof prettyValue === \"string\" && prettyValue.trim().length > 0) {\n        html = prettyValue;\n      }\n    }\n\n    const explicitText = toStringOrUndefined(normalizedInput.text);\n    if (explicitText !== undefined) {\n      emitReactEmailEvent(runtimeOptions?.observe, \"render:success\", {\n        durationMs: Date.now() - start,\n        message: \"Rendered react email with explicit text\",\n        route: runtimeOptions?.route,\n      });\n      return {\n        html,\n        text: explicitText,\n      };\n    }\n\n    if (\n      normalizedInput.includePlainText === false ||\n      !renderModule.toPlainText\n    ) {\n      emitReactEmailEvent(runtimeOptions?.observe, \"render:success\", {\n        durationMs: Date.now() - start,\n        message: \"Rendered react email without plain-text derivation\",\n        route: runtimeOptions?.route,\n      });\n      return { html };\n    }\n\n    const plainTextValue = await renderModule.toPlainText(html);\n    const plainText = toStringOrUndefined(plainTextValue);\n    emitReactEmailEvent(runtimeOptions?.observe, \"render:success\", {\n      durationMs: Date.now() - start,\n      message: plainText\n        ? \"Rendered react email with derived plain text\"\n        : \"Rendered react email HTML only\",\n      route: runtimeOptions?.route,\n    });\n    if (plainText === undefined) {\n      return { html };\n    }\n\n    return {\n      html,\n      text: plainText,\n    };\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    emitReactEmailEvent(runtimeOptions?.observe, \"render:error\", {\n      durationMs: Date.now() - start,\n      error: message,\n      message: \"Failed to render react email payload\",\n      route: runtimeOptions?.route,\n    });\n    throw error;\n  }\n}\n\nexport async function resolveReactEmailPayloadFields<\n  TInput extends AthenaAuthReactEmailPayload,\n>(\n  input: TInput,\n  fields: ResolvePayloadFieldsInput,\n  options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig\n): Promise<Omit<TInput, \"react\">> {\n  const { react, ...payloadWithoutReact } = input;\n  if (!react) {\n    return payloadWithoutReact as Omit<TInput, \"react\">;\n  }\n\n  const rendered = await renderAthenaReactEmail(react, options);\n  const payload: AthenaAuthLooseRecord = {\n    ...(payloadWithoutReact as AthenaAuthLooseRecord),\n  };\n\n  payload[fields.htmlField] = rendered.html;\n\n  const currentTextValue = payload[fields.textField];\n  if (\n    rendered.text !== undefined &&\n    (currentTextValue === undefined ||\n      currentTextValue === null ||\n      currentTextValue === \"\")\n  ) {\n    payload[fields.textField] = rendered.text;\n  }\n\n  if (\n    fields.variablesField &&\n    (payload[fields.variablesField] === undefined ||\n      payload[fields.variablesField] === null) &&\n    isRecord(react.props)\n  ) {\n    const derivedVariables = Object.keys(react.props);\n    if (derivedVariables.length > 0) {\n      payload[fields.variablesField] = derivedVariables;\n    }\n  }\n\n  return payload as Omit<TInput, \"react\">;\n}\n","import { parseHttpResponseBody as parseResponseBody } from \"../http/parse-response-body.ts\";\nimport { buildSdkHeaderValue } from \"../sdk-version.ts\";\nimport { buildServiceRequestHeaders } from \"../utils/athena-request-headers.ts\";\nimport { assertAthenaAuthTemplateVariables } from \"./limits.ts\";\nimport { resolveReactEmailPayloadFields } from \"./react-email.ts\";\nimport type {\n  AthenaAdminHasPermissionRequest,\n  AthenaAdminHasPermissionResponse,\n  AthenaAdminRevokeUserSessionRequest,\n  AthenaAdminRevokeUserSessionsRequest,\n  AthenaAdminSuccessResponse,\n  AthenaApiKeyDeleteAllExpiredResponse,\n  AthenaAuthBindings,\n  AthenaAuthCallOptions,\n  AthenaAuthClientConfig,\n  AthenaAuthEmailListQuery,\n  AthenaAuthEmailListResponse,\n  AthenaAuthEndpointPath,\n  AthenaAuthErrorCode,\n  AthenaAuthErrorDetails,\n  AthenaAuthFetchCompatibleInput,\n  AthenaAuthGenericInput,\n  AthenaAuthGenericQueryInput,\n  AthenaAuthGetUserResponse,\n  AthenaAuthGuardResult,\n  AthenaAuthHealthResponse,\n  AthenaAuthLinkedAccount,\n  AthenaAuthMethod,\n  AthenaAuthOkResponse,\n  AthenaAuthOrganization,\n  AthenaAuthOrganizationBindings,\n  AthenaAuthOrganizationCheckSlugRequest,\n  AthenaAuthOrganizationCreateRequest,\n  AthenaAuthOrganizationDeleteRequest,\n  AthenaAuthOrganizationGetFullQuery,\n  AthenaAuthOrganizationGetInvitationQuery,\n  AthenaAuthOrganizationInvitation,\n  AthenaAuthOrganizationInvitationActionRequest,\n  AthenaAuthOrganizationInviteMemberRequest,\n  AthenaAuthOrganizationLeaveRequest,\n  AthenaAuthOrganizationListInvitationsQuery,\n  AthenaAuthOrganizationListMembersQuery,\n  AthenaAuthOrganizationListUserInvitationsQuery,\n  AthenaAuthOrganizationMember,\n  AthenaAuthOrganizationRemoveMemberRequest,\n  AthenaAuthOrganizationSetActiveRequest,\n  AthenaAuthOrganizationUpdateMemberRoleRequest,\n  AthenaAuthOrganizationUpdateRequest,\n  AthenaAuthQueryValue,\n  AthenaAuthReactEmailRenderInput,\n  AthenaAuthRequestInput,\n  AthenaAuthResult,\n  AthenaAuthSession,\n  AthenaAuthSessionResponse,\n  AthenaAuthSignInResponse,\n  AthenaAuthSignOutResponse,\n  AthenaAuthSocialRedirectResponse,\n  AthenaAuthStatusResponse,\n  AthenaAuthUser,\n  AthenaChangeEmailRequest,\n  AthenaChangePasswordRequest,\n  AthenaDeleteUserCallbackRequest,\n  AthenaDeleteUserRequest,\n  AthenaDeleteUserResponse,\n  AthenaEmailSignInRequest,\n  AthenaEmailSignUpRequest,\n  AthenaForgetPasswordRequest,\n  AthenaLinkSocialRequest,\n  AthenaOAuthAccountTokenRequest,\n  AthenaOAuthTokenBundle,\n  AthenaResetPasswordRequest,\n  AthenaSendVerificationEmailRequest,\n  AthenaSocialSignInRequest,\n  AthenaTwoFactorGenerateBackupCodesRequest,\n  AthenaTwoFactorGenerateBackupCodesResponse,\n  AthenaUnlinkAccountRequest,\n  AthenaUpdateUserRequest,\n  AthenaUsernameSignInRequest,\n  AthenaVerifyEmailRequest,\n  InternalAthenaAuthModule,\n} from \"./types.ts\";\n\nconst DEFAULT_AUTH_BASE_URL = \"http://localhost:3001/api/auth\";\nconst SDK_NAME = \"xylex-group/athena-auth\";\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME);\n\ninterface AuthRequestContext {\n  endpoint: AthenaAuthEndpointPath;\n  method: AthenaAuthMethod;\n}\n\nexport interface InternalAuthModuleRuntimeOptions {\n  resolveCallOptions?: () =>\n    | AthenaAuthCallOptions\n    | undefined\n    | Promise<AthenaAuthCallOptions | undefined>;\n}\n\ntype InternalErrorInput = AuthRequestContext & {\n  code: AthenaAuthErrorCode;\n  status: number;\n  message: string;\n  requestId?: string;\n  hint?: string;\n  cause?: string;\n};\n\nfunction normalizeBaseUrl(baseUrl?: string): string {\n  return (baseUrl ?? DEFAULT_AUTH_BASE_URL).replace(/\\/$/, \"\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n  return (\n    headers.get(\"x-request-id\") ??\n    headers.get(\"x-correlation-id\") ??\n    headers.get(\"x-athena-request-id\") ??\n    undefined\n  );\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\n  if (isRecord(payload)) {\n    const messageCandidates = [payload.error, payload.message, payload.details];\n    for (const candidate of messageCandidates) {\n      if (typeof candidate === \"string\" && candidate.trim().length > 0) {\n        return candidate.trim();\n      }\n    }\n  }\n\n  if (typeof payload === \"string\" && payload.trim().length > 0) {\n    return payload.trim();\n  }\n\n  return fallback;\n}\n\nfunction toErrorDetails(input: InternalErrorInput): AthenaAuthErrorDetails {\n  return {\n    cause: input.cause,\n    code: input.code,\n    endpoint: input.endpoint,\n    hint: input.hint,\n    message: input.message,\n    method: input.method,\n    requestId: input.requestId,\n    status: input.status,\n  };\n}\n\nfunction mergeCallOptions(\n  base?: AthenaAuthCallOptions,\n  override?: AthenaAuthCallOptions\n): AthenaAuthCallOptions | undefined {\n  if (!(base || override)) {\n    return;\n  }\n  return {\n    ...base,\n    ...override,\n    headers: {\n      ...(base?.headers ?? {}),\n      ...(override?.headers ?? {}),\n    },\n  };\n}\n\nfunction copyDefinedField(\n  target: Record<string, unknown>,\n  source: Record<string, unknown>,\n  targetKey: string,\n  sourceKey: string\n): void {\n  if (!(sourceKey in source)) {\n    return;\n  }\n  const value = source[sourceKey];\n  if (value !== undefined) {\n    target[targetKey] = value;\n  }\n}\n\nfunction normalizeEmailTemplateAttachmentsValue(value: unknown): unknown {\n  if (typeof value === \"string\" || value === null) {\n    return value;\n  }\n\n  if (Array.isArray(value)) {\n    return value.map((item) => normalizeEmailTemplateAttachmentsValue(item));\n  }\n\n  if (typeof value !== \"object\") {\n    return value;\n  }\n\n  const attachment = { ...(value as Record<string, unknown>) };\n  copyDefinedField(attachment, attachment, \"file_url\", \"fileUrl\");\n  attachment.fileUrl = undefined;\n  return attachment;\n}\n\nfunction normalizeAdminEmailTemplatePayload(\n  payload: Record<string, unknown>\n): Record<string, unknown> {\n  const normalized = { ...payload };\n\n  copyDefinedField(normalized, payload, \"template_key\", \"templateKey\");\n  copyDefinedField(normalized, payload, \"event_type\", \"eventType\");\n  copyDefinedField(normalized, payload, \"subject_template\", \"subjectTemplate\");\n  copyDefinedField(normalized, payload, \"text_template\", \"textTemplate\");\n  copyDefinedField(normalized, payload, \"html_template\", \"htmlTemplate\");\n  copyDefinedField(\n    normalized,\n    payload,\n    \"variable_bindings\",\n    \"variableBindings\"\n  );\n  copyDefinedField(\n    normalized,\n    payload,\n    \"attachment_failure_mode\",\n    \"attachmentFailureMode\"\n  );\n  copyDefinedField(normalized, payload, \"is_active\", \"isActive\");\n\n  if (Object.hasOwn(payload, \"attachments\")) {\n    normalized.attachments = normalizeEmailTemplateAttachmentsValue(\n      payload.attachments\n    );\n  }\n\n  normalized.templateKey = undefined;\n  normalized.eventType = undefined;\n  normalized.subjectTemplate = undefined;\n  normalized.textTemplate = undefined;\n  normalized.htmlTemplate = undefined;\n  normalized.variableBindings = undefined;\n  normalized.attachmentFailureMode = undefined;\n  normalized.isActive = undefined;\n\n  return normalized;\n}\n\nfunction toReactEmailTemplateCompatibilityInput<\n  TInput extends AthenaAuthFetchCompatibleInput & {\n    react?: AthenaAuthReactEmailRenderInput;\n  },\n>(input: TInput): TInput {\n  const payload = input as Record<string, unknown>;\n  const compatibility = { ...payload };\n\n  copyDefinedField(compatibility, payload, \"templateKey\", \"template_key\");\n  copyDefinedField(compatibility, payload, \"eventType\", \"event_type\");\n  copyDefinedField(\n    compatibility,\n    payload,\n    \"subjectTemplate\",\n    \"subject_template\"\n  );\n  copyDefinedField(compatibility, payload, \"textTemplate\", \"text_template\");\n  copyDefinedField(compatibility, payload, \"htmlTemplate\", \"html_template\");\n  copyDefinedField(\n    compatibility,\n    payload,\n    \"variableBindings\",\n    \"variable_bindings\"\n  );\n  copyDefinedField(\n    compatibility,\n    payload,\n    \"attachmentFailureMode\",\n    \"attachment_failure_mode\"\n  );\n  copyDefinedField(compatibility, payload, \"isActive\", \"is_active\");\n\n  return compatibility as unknown as TInput;\n}\n\nfunction normalizeAdminEmailTemplateSendPayload(\n  payload: Record<string, unknown>\n): Record<string, unknown> {\n  const normalized = { ...payload };\n\n  copyDefinedField(normalized, payload, \"template_id\", \"templateId\");\n  copyDefinedField(normalized, payload, \"recipient_email\", \"recipientEmail\");\n  copyDefinedField(normalized, payload, \"render_variables\", \"renderVariables\");\n  copyDefinedField(normalized, payload, \"user_id\", \"userId\");\n  copyDefinedField(normalized, payload, \"organization_id\", \"organizationId\");\n  copyDefinedField(normalized, payload, \"session_token\", \"sessionToken\");\n  copyDefinedField(\n    normalized,\n    payload,\n    \"attachment_failure_mode\",\n    \"attachmentFailureMode\"\n  );\n\n  if (Object.hasOwn(payload, \"attachments\")) {\n    normalized.attachments = normalizeEmailTemplateAttachmentsValue(\n      payload.attachments\n    );\n  }\n\n  normalized.templateId = undefined;\n  normalized.recipientEmail = undefined;\n  normalized.renderVariables = undefined;\n  normalized.userId = undefined;\n  normalized.organizationId = undefined;\n  normalized.sessionToken = undefined;\n  normalized.attachmentFailureMode = undefined;\n\n  return normalized;\n}\n\nfunction toSessionGuardFailure(\n  sessionResult: AthenaAuthResult<AthenaAuthSessionResponse>\n): AthenaAuthGuardResult {\n  if (sessionResult.status === 401 || sessionResult.data === null) {\n    return {\n      error: sessionResult.error ?? \"Unauthorized\",\n      ok: false,\n      reason: \"unauthorized\",\n      sessionResult,\n      status: 401,\n    };\n  }\n\n  return {\n    error: sessionResult.error ?? \"Failed to resolve current session\",\n    ok: false,\n    reason: \"upstream_error\",\n    sessionResult,\n    status: sessionResult.status,\n  };\n}\n\nfunction toPermissionGuardFailure(\n  permissionResult: AthenaAuthResult<AthenaAdminHasPermissionResponse>,\n  sessionResult: AthenaAuthResult<AthenaAuthSessionResponse>\n): AthenaAuthGuardResult {\n  if (permissionResult.status === 401) {\n    return {\n      error: permissionResult.error ?? \"Unauthorized\",\n      ok: false,\n      permissionResult,\n      reason: \"unauthorized\",\n      sessionResult,\n      status: 401,\n    };\n  }\n\n  if (permissionResult.status === 403) {\n    return {\n      error: permissionResult.error ?? \"Forbidden\",\n      ok: false,\n      permissionResult,\n      reason: \"forbidden\",\n      sessionResult,\n      status: 403,\n    };\n  }\n\n  return {\n    error: permissionResult.error ?? \"Failed to resolve permission check\",\n    ok: false,\n    permissionResult,\n    reason: \"upstream_error\",\n    sessionResult,\n    status: permissionResult.status,\n  };\n}\n\nfunction extractFetchOptions<\n  T extends AthenaAuthFetchCompatibleInput | undefined,\n>(input: T) {\n  if (!input) {\n    return {\n      fetchOptions: undefined,\n      payload: undefined,\n    };\n  }\n\n  const { fetchOptions, ...rest } = input;\n  const hasPayloadKeys = Object.keys(rest).length > 0;\n  return {\n    fetchOptions,\n    payload: hasPayloadKeys ? rest : undefined,\n  };\n}\n\nfunction buildHeaders(\n  config: AthenaAuthClientConfig,\n  options?: AthenaAuthCallOptions\n): Record<string, string> {\n  return buildServiceRequestHeaders(\"auth\", SDK_HEADER_VALUE, config, options);\n}\n\nfunction appendQueryParam(\n  searchParams: URLSearchParams,\n  key: string,\n  value: AthenaAuthQueryValue\n) {\n  if (value === undefined || value === null) {\n    return;\n  }\n  if (Array.isArray(value)) {\n    value.forEach((item) => {\n      searchParams.append(key, String(item));\n    });\n    return;\n  }\n  searchParams.append(key, String(value));\n}\n\nfunction buildRequestUrl(\n  baseUrl: string,\n  endpoint: AthenaAuthEndpointPath,\n  query?: Record<string, AthenaAuthQueryValue>\n) {\n  const url = `${baseUrl}${endpoint}`;\n  if (!query || Object.keys(query).length === 0) {\n    return url;\n  }\n  const searchParams = new URLSearchParams();\n  for (const [key, value] of Object.entries(query)) {\n    appendQueryParam(searchParams, key, value);\n  }\n  const queryText = searchParams.toString();\n  return queryText ? `${url}?${queryText}` : url;\n}\n\nfunction inferDefaultMethod(\n  endpoint: AthenaAuthEndpointPath\n): AthenaAuthMethod {\n  if (endpoint.startsWith(\"/reset-password/\")) {\n    return \"GET\";\n  }\n\n  switch (endpoint) {\n    case \"/get-session\":\n    case \"/list-sessions\":\n    case \"/verify-email\":\n    case \"/change-email/verify\":\n    case \"/delete-user/verify\":\n    case \"/email-list\":\n    case \"/email/list\":\n    case \"/delete-user/callback\":\n    case \"/list-accounts\":\n    case \"/passkey/generate-register-options\":\n    case \"/passkey/list-user-passkeys\":\n    case \"/.well-known/webauthn\":\n    case \"/admin/list-users\":\n    case \"/admin/athena-client/list\":\n    case \"/admin/audit-log/list\":\n    case \"/admin/email/get\":\n    case \"/admin/email-failure/list\":\n    case \"/admin/email-failure/get\":\n    case \"/admin/email-template/get\":\n    case \"/admin/email-template/list\":\n    case \"/admin/email/list\":\n    case \"/api-key/get\":\n    case \"/api-key/list\":\n    case \"/organization/get-full-organization\":\n    case \"/organization/list\":\n    case \"/organization/get-invitation\":\n    case \"/organization/list-invitations\":\n    case \"/organization/list-user-invitations\":\n    case \"/organization/list-members\":\n    case \"/organization/get-active-member\":\n    case \"/health\":\n    case \"/ok\":\n    case \"/error\":\n      return \"GET\";\n    default:\n      return \"POST\";\n  }\n}\n\nasync function callAuthEndpoint<T>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  body?: unknown,\n  query?: Record<string, AthenaAuthQueryValue>,\n  options?: AthenaAuthCallOptions\n): Promise<AthenaAuthResult<T>> {\n  const baseUrl = normalizeBaseUrl(options?.baseUrl ?? config.baseUrl);\n  const url = buildRequestUrl(baseUrl, context.endpoint, query);\n  const headers = buildHeaders(config, options);\n  const credentials = options?.credentials ?? config.credentials ?? \"include\";\n  const requestInit: RequestInit = {\n    credentials,\n    headers,\n    method: context.method,\n    signal: options?.signal,\n  };\n\n  if (context.method !== \"GET\") {\n    requestInit.body = JSON.stringify(body ?? {});\n  }\n\n  const fetcher = config.fetch ?? globalThis.fetch;\n  if (!fetcher) {\n    const details = toErrorDetails({\n      code: \"UNKNOWN_ERROR\",\n      endpoint: context.endpoint,\n      hint: \"Use Node 18+ or provide `fetch` through createClient({ auth: { fetch } })\",\n      message: \"No fetch implementation available for auth client\",\n      method: context.method,\n      status: 0,\n    });\n    return {\n      data: null,\n      error: details.message,\n      errorDetails: details,\n      ok: false,\n      raw: null,\n      status: 0,\n    };\n  }\n\n  try {\n    const response = await fetcher(url, requestInit);\n    const rawText = await response.text();\n    const requestId = resolveRequestId(response.headers);\n    const parsedBody = parseResponseBody(\n      rawText ?? \"\",\n      response.headers.get(\"content-type\")\n    );\n\n    if (parsedBody.parseFailed) {\n      const details = toErrorDetails({\n        cause: rawText.slice(0, 300),\n        code: \"INVALID_JSON\",\n        endpoint: context.endpoint,\n        hint: \"Verify the auth endpoint response body is valid JSON.\",\n        message: \"Auth server returned malformed JSON\",\n        method: context.method,\n        requestId,\n        status: response.status,\n      });\n      return {\n        data: null,\n        error: details.message,\n        errorDetails: details,\n        ok: false,\n        raw: parsedBody.parsed,\n        status: response.status,\n      };\n    }\n\n    const parsed = parsedBody.parsed;\n\n    if (!response.ok) {\n      const details = toErrorDetails({\n        code: \"HTTP_ERROR\",\n        endpoint: context.endpoint,\n        message: resolveErrorMessage(\n          parsed,\n          `Auth endpoint ${context.method} ${context.endpoint} failed with status ${response.status}`\n        ),\n        method: context.method,\n        requestId,\n        status: response.status,\n      });\n      return {\n        data: null,\n        error: details.message,\n        errorDetails: details,\n        ok: false,\n        raw: parsed,\n        status: response.status,\n      };\n    }\n\n    return {\n      data: (parsed as T) ?? null,\n      error: null,\n      errorDetails: null,\n      ok: true,\n      raw: parsed,\n      status: response.status,\n    };\n  } catch (callError) {\n    const message =\n      callError instanceof Error ? callError.message : String(callError);\n    const details = toErrorDetails({\n      cause: message,\n      code: \"NETWORK_ERROR\",\n      endpoint: context.endpoint,\n      hint: \"Check auth server URL, DNS, and network reachability.\",\n      message: `Network error while calling ${context.method} ${context.endpoint}: ${message}`,\n      method: context.method,\n      status: 0,\n    });\n    return {\n      data: null,\n      error: details.message,\n      errorDetails: details,\n      ok: false,\n      raw: null,\n      status: 0,\n    };\n  }\n}\n\nfunction executePostWithCompatibleInput<\n  TPayload extends AthenaAuthFetchCompatibleInput,\n  TResult,\n>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  input: TPayload,\n  options?: AthenaAuthCallOptions\n) {\n  const { payload, fetchOptions } = extractFetchOptions(input);\n  const mergedOptions = mergeCallOptions(fetchOptions, options);\n  return callAuthEndpoint<TResult>(\n    config,\n    context,\n    payload ?? {},\n    undefined,\n    mergedOptions\n  );\n}\n\nfunction executePostWithOptionalInput<TResult>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  input?: AthenaAuthFetchCompatibleInput,\n  options?: AthenaAuthCallOptions\n) {\n  const { fetchOptions } = extractFetchOptions(input);\n  const mergedOptions = mergeCallOptions(fetchOptions, options);\n  return callAuthEndpoint<TResult>(\n    config,\n    context,\n    {},\n    undefined,\n    mergedOptions\n  );\n}\n\nfunction executeGetWithCompatibleInput<TResult>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  input?: AthenaAuthFetchCompatibleInput,\n  options?: AthenaAuthCallOptions\n) {\n  const { fetchOptions } = extractFetchOptions(input);\n  const mergedOptions = mergeCallOptions(fetchOptions, options);\n  return callAuthEndpoint<TResult>(\n    config,\n    context,\n    undefined,\n    undefined,\n    mergedOptions\n  );\n}\n\nfunction executeGetWithQueryCompatibleInput<TQuery extends object, TResult>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  input?: { query?: TQuery } & AthenaAuthFetchCompatibleInput,\n  options?: AthenaAuthCallOptions\n) {\n  const { payload, fetchOptions } = extractFetchOptions(input);\n  const mergedOptions = mergeCallOptions(fetchOptions, options);\n  const query = (\n    payload as { query?: Record<string, AthenaAuthQueryValue> } | undefined\n  )?.query;\n  return callAuthEndpoint<TResult>(\n    config,\n    context,\n    undefined,\n    query,\n    mergedOptions\n  );\n}\n\n/**\n * Internal auth-module assembly used by the root client factory.\n */\nexport function createAuthModule(\n  config: AthenaAuthClientConfig = {},\n  runtimeOptions: InternalAuthModuleRuntimeOptions = {}\n): InternalAthenaAuthModule {\n  const normalizedBaseUrl = normalizeBaseUrl(config.baseUrl);\n  const resolvedConfig: AthenaAuthClientConfig = {\n    ...config,\n    baseUrl: normalizedBaseUrl,\n  };\n\n  const request = async <T = unknown>(\n    input: AthenaAuthRequestInput,\n    options?: AthenaAuthCallOptions\n  ): Promise<AthenaAuthResult<T>> => {\n    const method =\n      input.method ??\n      (input.body === undefined ? inferDefaultMethod(input.endpoint) : \"POST\");\n    const contextOptions = await runtimeOptions.resolveCallOptions?.();\n    const mergedOptions = mergeCallOptions(\n      mergeCallOptions(contextOptions, input.fetchOptions),\n      options\n    );\n    return await callAuthEndpoint<T>(\n      resolvedConfig,\n      { endpoint: input.endpoint, method },\n      input.body,\n      input.query,\n      mergedOptions\n    );\n  };\n\n  const postGeneric = <T = unknown>(\n    endpoint: AthenaAuthEndpointPath,\n    input?: AthenaAuthFetchCompatibleInput & object,\n    options?: AthenaAuthCallOptions\n  ) => {\n    const { payload, fetchOptions } = extractFetchOptions(input);\n    return request<T>(\n      {\n        body: payload ?? {},\n        endpoint,\n        fetchOptions,\n        method: \"POST\",\n      },\n      options\n    );\n  };\n\n  const getGeneric = <T = unknown>(\n    endpoint: AthenaAuthEndpointPath,\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) => {\n    const { fetchOptions } = extractFetchOptions(input);\n    return request<T>(\n      {\n        endpoint,\n        fetchOptions,\n        method: \"GET\",\n      },\n      options\n    );\n  };\n\n  const getWithQuery = <\n    T = unknown,\n    TQuery extends object = Record<string, AthenaAuthQueryValue>,\n  >(\n    endpoint: AthenaAuthEndpointPath,\n    input?: AthenaAuthFetchCompatibleInput & {\n      query?: TQuery;\n    },\n    options?: AthenaAuthCallOptions\n  ) => {\n    const { payload, fetchOptions } = extractFetchOptions(input);\n    const query = (payload as { query?: TQuery } | undefined)?.query as\n      | Record<string, AthenaAuthQueryValue>\n      | undefined;\n    return request<T>(\n      {\n        endpoint,\n        fetchOptions,\n        method: \"GET\",\n        query,\n      },\n      options\n    );\n  };\n\n  const withReactEmailRoute = (route: AthenaAuthEndpointPath) => ({\n    ...resolvedConfig.reactEmail,\n    route,\n  });\n\n  const resolveAdminEmailPayload = <\n    TInput extends AthenaAuthFetchCompatibleInput & {\n      react?: AthenaAuthReactEmailRenderInput;\n    },\n  >(\n    route: \"/admin/email/create\" | \"/admin/email/update\",\n    input: TInput\n  ) =>\n    resolveReactEmailPayloadFields(\n      input,\n      {\n        htmlField: \"htmlBody\",\n        textField: \"textBody\",\n      },\n      withReactEmailRoute(route)\n    );\n\n  const resolveAdminEmailTemplatePayload = <\n    TInput extends AthenaAuthFetchCompatibleInput & {\n      react?: AthenaAuthReactEmailRenderInput;\n    },\n  >(\n    route: \"/admin/email-template/create\" | \"/admin/email-template/update\",\n    input: TInput\n  ) =>\n    resolveReactEmailPayloadFields(\n      toReactEmailTemplateCompatibilityInput(input),\n      {\n        htmlField: \"htmlTemplate\",\n        textField: \"textTemplate\",\n        variablesField: \"variables\",\n      },\n      withReactEmailRoute(route)\n    ).then((payload) => {\n      const normalizedPayload = normalizeAdminEmailTemplatePayload(\n        payload as Record<string, unknown>\n      );\n      if (\n        \"variables\" in payload &&\n        payload.variables !== undefined &&\n        payload.variables !== null\n      ) {\n        assertAthenaAuthTemplateVariables(\n          payload.variables,\n          `${route} variables`\n        );\n      }\n      return normalizedPayload;\n    });\n\n  const requireSession: AthenaAuthBindings[\"requireSession\"] = async (\n    input,\n    options\n  ) => {\n    const sessionInput = input?.fetchOptions\n      ? { fetchOptions: input.fetchOptions }\n      : undefined;\n    const sessionResult = await getGeneric<AthenaAuthSessionResponse>(\n      \"/get-session\",\n      sessionInput,\n      options\n    );\n\n    if (!sessionResult.ok || sessionResult.data === null) {\n      return toSessionGuardFailure(sessionResult);\n    }\n\n    return {\n      ok: true,\n      session: sessionResult.data,\n    };\n  };\n\n  const getUser: AthenaAuthBindings[\"getUser\"] = async (input, options) => {\n    const sessionResult = await getGeneric<AthenaAuthSessionResponse>(\n      \"/get-session\",\n      input,\n      options\n    );\n\n    if (!sessionResult.ok) {\n      return {\n        ...sessionResult,\n        data: null,\n      };\n    }\n\n    return {\n      ...sessionResult,\n      data: {\n        user: sessionResult.data?.user ?? null,\n      } satisfies AthenaAuthGetUserResponse,\n    };\n  };\n\n  const requirePermission = async (\n    endpoint: \"/admin/has-permission\" | \"/organization/has-permission\",\n    input: AthenaAdminHasPermissionRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ): Promise<AthenaAuthGuardResult> => {\n    const sessionGuard = await requireSession(\n      input?.fetchOptions ? { fetchOptions: input.fetchOptions } : undefined,\n      options\n    );\n\n    if (!sessionGuard.ok) {\n      return sessionGuard;\n    }\n\n    const permissionResult =\n      await postGeneric<AthenaAdminHasPermissionResponse>(\n        endpoint,\n        input,\n        options\n      );\n\n    if (!permissionResult.ok) {\n      return toPermissionGuardFailure(permissionResult, {\n        data: sessionGuard.session,\n        error: null,\n        errorDetails: null,\n        ok: true,\n        raw: sessionGuard.session,\n        status: 200,\n      });\n    }\n\n    if (!permissionResult.data?.success) {\n      return {\n        error: permissionResult.data?.error ?? \"Forbidden\",\n        ok: false,\n        permissionResult,\n        reason: \"forbidden\",\n        sessionResult: {\n          data: sessionGuard.session,\n          error: null,\n          errorDetails: null,\n          ok: true,\n          raw: sessionGuard.session,\n          status: 200,\n        },\n        status: 403,\n      };\n    }\n\n    return sessionGuard;\n  };\n\n  const listUserEmailsWithFallback: AthenaAuthBindings[\"user\"][\"email\"][\"list\"] =\n    async (input, options) => {\n      const primary = await getWithQuery<\n        AthenaAuthEmailListResponse,\n        AthenaAuthEmailListQuery\n      >(\"/email/list\", input, options);\n      if (\n        primary.ok ||\n        primary.status !== 404 ||\n        primary.errorDetails?.code !== \"HTTP_ERROR\"\n      ) {\n        return primary;\n      }\n      return getWithQuery<\n        AthenaAuthEmailListResponse,\n        AthenaAuthEmailListQuery\n      >(\"/email-list\", input, options);\n    };\n\n  const healthWithFallback: AthenaAuthBindings[\"health\"] = async (\n    input,\n    options\n  ) => {\n    const primary = await getGeneric<AthenaAuthHealthResponse>(\n      \"/health\",\n      input,\n      options\n    );\n    if (\n      primary.ok ||\n      primary.status !== 404 ||\n      primary.errorDetails?.code !== \"HTTP_ERROR\"\n    ) {\n      return primary;\n    }\n\n    const fallback = await getGeneric<AthenaAuthOkResponse>(\n      \"/ok\",\n      input,\n      options\n    );\n    if (!fallback.ok) {\n      return {\n        ...fallback,\n        data: null,\n      };\n    }\n\n    const fallbackStatus =\n      isRecord(fallback.data) && typeof fallback.data.ok === \"boolean\"\n        ? fallback.data.ok\n          ? \"ok\"\n          : \"error\"\n        : \"ok\";\n\n    return {\n      ...fallback,\n      data: {\n        status: fallbackStatus,\n      },\n    };\n  };\n\n  const signOut = (\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) =>\n    executePostWithOptionalInput<AthenaAuthSignOutResponse>(\n      resolvedConfig,\n      { endpoint: \"/sign-out\", method: \"POST\" },\n      input,\n      options\n    );\n\n  const revokeSessions = (\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) =>\n    executePostWithOptionalInput<AthenaAuthStatusResponse>(\n      resolvedConfig,\n      { endpoint: \"/revoke-sessions\", method: \"POST\" },\n      input,\n      options\n    );\n\n  const revokeOtherSessions = (\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) =>\n    executePostWithOptionalInput<AthenaAuthStatusResponse>(\n      resolvedConfig,\n      { endpoint: \"/revoke-other-sessions\", method: \"POST\" },\n      input,\n      options\n    );\n\n  const revokeSession = (\n    input: { token: string } & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) =>\n    executePostWithCompatibleInput<typeof input, AthenaAuthStatusResponse>(\n      resolvedConfig,\n      { endpoint: \"/revoke-session\", method: \"POST\" },\n      input,\n      options\n    );\n\n  const deleteUser = (\n    input?: AthenaDeleteUserRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) => {\n    const { payload, fetchOptions } = extractFetchOptions(input);\n    const mergedOptions = mergeCallOptions(fetchOptions, options);\n    return callAuthEndpoint<AthenaDeleteUserResponse>(\n      resolvedConfig,\n      { endpoint: \"/delete-user\", method: \"POST\" },\n      payload ?? {},\n      undefined,\n      mergedOptions\n    );\n  };\n\n  const deleteUserCallback = (\n    input?: AthenaDeleteUserCallbackRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) => {\n    const { payload, fetchOptions } = extractFetchOptions(input);\n    const mergedOptions = mergeCallOptions(fetchOptions, options);\n    const query = (payload ?? {}) as AthenaDeleteUserCallbackRequest;\n    return callAuthEndpoint<AthenaDeleteUserResponse>(\n      resolvedConfig,\n      { endpoint: \"/delete-user/callback\", method: \"GET\" },\n      undefined,\n      {\n        callbackURL: query.callbackURL,\n        token: query.token,\n      },\n      mergedOptions\n    );\n  };\n\n  const resolveResetPasswordToken = (\n    input: {\n      token: string;\n      callbackURL?: string;\n    } & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions\n  ) => {\n    const { payload, fetchOptions } = extractFetchOptions(input);\n    const mergedOptions = mergeCallOptions(fetchOptions, options);\n    const query = payload as\n      | { token?: string; callbackURL?: string }\n      | undefined;\n    const token = query?.token?.trim();\n    if (!token) {\n      throw new Error(\"resolveResetPasswordToken requires a non-empty token\");\n    }\n    const endpoint =\n      `/reset-password/${encodeURIComponent(token)}` as AthenaAuthEndpointPath;\n    return callAuthEndpoint<{ token?: string }>(\n      resolvedConfig,\n      { endpoint, method: \"GET\" },\n      undefined,\n      query?.callbackURL ? { callbackURL: query.callbackURL } : undefined,\n      mergedOptions\n    );\n  };\n\n  const organization: AthenaAuthOrganizationBindings = {\n    checkSlug: (input, options) =>\n      executePostWithCompatibleInput<\n        AthenaAuthOrganizationCheckSlugRequest & AthenaAuthFetchCompatibleInput,\n        { available: boolean }\n      >(\n        resolvedConfig,\n        { endpoint: \"/organization/check-slug\", method: \"POST\" },\n        input,\n        options\n      ),\n    create: (input, options) =>\n      executePostWithCompatibleInput<\n        AthenaAuthOrganizationCreateRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthOrganization\n      >(\n        resolvedConfig,\n        { endpoint: \"/organization/create\", method: \"POST\" },\n        input,\n        options\n      ),\n    delete: (input, options) =>\n      executePostWithCompatibleInput<\n        AthenaAuthOrganizationDeleteRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: \"/organization/delete\", method: \"POST\" },\n        input,\n        options\n      ),\n    getFull: (input, options) =>\n      executeGetWithQueryCompatibleInput<\n        AthenaAuthOrganizationGetFullQuery,\n        {\n          organization: AthenaAuthOrganization;\n          members?: AthenaAuthOrganizationMember[];\n          invitations?: AthenaAuthOrganizationInvitation[];\n        }\n      >(\n        resolvedConfig,\n        { endpoint: \"/organization/get-full-organization\", method: \"GET\" },\n        input,\n        options\n      ),\n    hasPermission: (input, options) =>\n      postGeneric<AthenaAdminHasPermissionResponse>(\n        \"/organization/has-permission\",\n        input,\n        options\n      ),\n    invitation: {\n      accept: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaAuthOrganizationInvitationActionRequest &\n            AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: \"/organization/accept-invitation\", method: \"POST\" },\n          input,\n          options\n        ),\n      cancel: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaAuthOrganizationInvitationActionRequest &\n            AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: \"/organization/cancel-invitation\", method: \"POST\" },\n          input,\n          options\n        ),\n      get: (input, options) =>\n        executeGetWithQueryCompatibleInput<\n          AthenaAuthOrganizationGetInvitationQuery,\n          AthenaAuthOrganizationInvitation\n        >(\n          resolvedConfig,\n          { endpoint: \"/organization/get-invitation\", method: \"GET\" },\n          input,\n          options\n        ),\n      list: (input, options) =>\n        executeGetWithQueryCompatibleInput<\n          AthenaAuthOrganizationListInvitationsQuery,\n          AthenaAuthOrganizationInvitation[]\n        >(\n          resolvedConfig,\n          { endpoint: \"/organization/list-invitations\", method: \"GET\" },\n          input,\n          options\n        ),\n      reject: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaAuthOrganizationInvitationActionRequest &\n            AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: \"/organization/reject-invitation\", method: \"POST\" },\n          input,\n          options\n        ),\n    },\n    leave: (input, options) =>\n      executePostWithCompatibleInput<\n        AthenaAuthOrganizationLeaveRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: \"/organization/leave\", method: \"POST\" },\n        input,\n        options\n      ),\n    list: (input, options) =>\n      getGeneric<AthenaAuthOrganization[]>(\n        \"/organization/list\",\n        input,\n        options\n      ),\n    listUserInvitations: (input, options) =>\n      executeGetWithQueryCompatibleInput<\n        AthenaAuthOrganizationListUserInvitationsQuery,\n        AthenaAuthOrganizationInvitation[]\n      >(\n        resolvedConfig,\n        { endpoint: \"/organization/list-user-invitations\", method: \"GET\" },\n        input,\n        options\n      ),\n    member: {\n      getActive: (input, options) =>\n        executeGetWithCompatibleInput<AthenaAuthOrganizationMember>(\n          resolvedConfig,\n          { endpoint: \"/organization/get-active-member\", method: \"GET\" },\n          input,\n          options\n        ),\n      invite: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaAuthOrganizationInviteMemberRequest &\n            AthenaAuthFetchCompatibleInput,\n          AthenaAuthOrganizationInvitation\n        >(\n          resolvedConfig,\n          { endpoint: \"/organization/invite-member\", method: \"POST\" },\n          input,\n          options\n        ),\n      list: (input, options) =>\n        executeGetWithQueryCompatibleInput<\n          AthenaAuthOrganizationListMembersQuery,\n          AthenaAuthOrganizationMember[]\n        >(\n          resolvedConfig,\n          { endpoint: \"/organization/list-members\", method: \"GET\" },\n          input,\n          options\n        ),\n      remove: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaAuthOrganizationRemoveMemberRequest &\n            AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: \"/organization/remove-member\", method: \"POST\" },\n          input,\n          options\n        ),\n      updateRole: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaAuthOrganizationUpdateMemberRoleRequest &\n            AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: \"/organization/update-member-role\", method: \"POST\" },\n          input,\n          options\n        ),\n    },\n    requirePermission: (input, options) =>\n      requirePermission(\"/organization/has-permission\", input, options),\n    setActive: (input, options) =>\n      executePostWithCompatibleInput<\n        AthenaAuthOrganizationSetActiveRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: \"/organization/set-active\", method: \"POST\" },\n        input,\n        options\n      ),\n    update: (input, options) =>\n      executePostWithCompatibleInput<\n        AthenaAuthOrganizationUpdateRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthOrganization\n      >(\n        resolvedConfig,\n        { endpoint: \"/organization/update\", method: \"POST\" },\n        input,\n        options\n      ),\n  };\n\n  const authResetPassword = Object.assign(\n    (\n      input: AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: \"/reset-password\", method: \"POST\" },\n        input,\n        options\n      ),\n    {\n      token: resolveResetPasswordToken,\n    }\n  );\n\n  const sessionRevokeBinding: AthenaAuthBindings[\"session\"][\"revoke\"] = (\n    input,\n    options\n  ) => {\n    if (Array.isArray(input)) {\n      if (input.length === 0) {\n        throw new Error(\"session.revoke requires at least one session token\");\n      }\n      if (input.length === 1) {\n        return revokeSession(input[0], options);\n      }\n      return revokeSessions(undefined, options);\n    }\n\n    const parsed = input as AthenaAuthGenericInput & {\n      token?: string;\n      tokens?: string[];\n    };\n    const tokens = Array.isArray(parsed.tokens)\n      ? parsed.tokens.filter((token) => token.trim().length > 0)\n      : undefined;\n\n    if (tokens && tokens.length > 1) {\n      return revokeSessions(\n        parsed.fetchOptions ? { fetchOptions: parsed.fetchOptions } : undefined,\n        options\n      );\n    }\n\n    if (tokens && tokens.length === 1) {\n      return revokeSession(\n        { fetchOptions: parsed.fetchOptions, token: tokens[0] },\n        options\n      );\n    }\n\n    const token = parsed.token?.trim();\n    if (!token) {\n      throw new Error(\n        \"session.revoke requires a non-empty token or a non-empty token list\"\n      );\n    }\n\n    return revokeSession(\n      {\n        fetchOptions: parsed.fetchOptions,\n        token,\n      },\n      options\n    );\n  };\n\n  const adminUserSessionRevokeBinding: AthenaAuthBindings[\"admin\"][\"user\"][\"session\"][\"revoke\"] =\n    (input, options) => {\n      const requireUserId = (userId: string | undefined): string => {\n        const trimmed = String(userId ?? \"\").trim();\n        if (!trimmed) {\n          throw new Error(\n            \"admin.user.session.revoke requires a non-empty userId\"\n          );\n        }\n        return trimmed;\n      };\n\n      const requireSinglePluralUserId = (\n        sessions: AthenaAdminRevokeUserSessionRequest[]\n      ): AthenaAdminRevokeUserSessionsRequest => {\n        const uniqueUserIds = [\n          ...new Set(sessions.map((session) => requireUserId(session.userId))),\n        ];\n        if (uniqueUserIds.length !== 1) {\n          throw new Error(\n            \"admin.user.session.revoke requires the same userId across plural payloads\"\n          );\n        }\n        return { userId: uniqueUserIds[0] };\n      };\n\n      if (Array.isArray(input)) {\n        if (input.length === 0) {\n          throw new Error(\n            \"admin.user.session.revoke requires at least one payload item\"\n          );\n        }\n        if (input.length === 1) {\n          return postGeneric<AthenaAdminSuccessResponse>(\n            \"/admin/revoke-user-session\",\n            {\n              ...input[0],\n              userId: requireUserId(input[0].userId),\n            } as AthenaAuthGenericInput,\n            options\n          );\n        }\n        return postGeneric<AthenaAdminSuccessResponse>(\n          \"/admin/revoke-user-sessions\",\n          requireSinglePluralUserId(input),\n          options\n        );\n      }\n\n      const parsed = input as AthenaAuthGenericInput & {\n        sessions?: AthenaAdminRevokeUserSessionRequest[];\n        sessionToken?: string;\n        userId?: string;\n      };\n      const sessions = parsed.sessions;\n\n      if (sessions && sessions.length === 0) {\n        throw new Error(\n          \"admin.user.session.revoke requires at least one payload item\"\n        );\n      }\n\n      if (sessions && sessions.length === 1) {\n        return postGeneric<AthenaAdminSuccessResponse>(\n          \"/admin/revoke-user-session\",\n          {\n            ...sessions[0],\n            fetchOptions: parsed.fetchOptions,\n            userId: requireUserId(sessions[0].userId),\n          } as AthenaAuthGenericInput,\n          options\n        );\n      }\n\n      if (sessions && sessions.length > 1) {\n        return postGeneric<AthenaAdminSuccessResponse>(\n          \"/admin/revoke-user-sessions\",\n          {\n            ...requireSinglePluralUserId(sessions),\n            fetchOptions: parsed.fetchOptions,\n          } as AthenaAuthGenericInput,\n          options\n        );\n      }\n\n      const normalizedUserId = requireUserId(parsed.userId);\n\n      if (!parsed.sessionToken) {\n        return postGeneric<AthenaAdminSuccessResponse>(\n          \"/admin/revoke-user-sessions\",\n          {\n            fetchOptions: parsed.fetchOptions,\n            userId: normalizedUserId,\n          } as AthenaAuthGenericInput,\n          options\n        );\n      }\n      return postGeneric<AthenaAdminSuccessResponse>(\n        \"/admin/revoke-user-session\",\n        {\n          ...parsed,\n          userId: normalizedUserId,\n        } as AthenaAuthGenericInput,\n        options\n      );\n    };\n\n  const auth: AthenaAuthBindings = {\n    account: {\n      list: (input, options) => getGeneric(\"/list-accounts\", input, options),\n      unlink: (input, options) =>\n        postGeneric(\"/unlink-account\", input, options),\n    },\n    admin: {\n      apiKey: {\n        create: (input, options) =>\n          postGeneric(\"/admin/api-key/create\", input, options),\n      },\n      athenaClient: {\n        create: (input, options) =>\n          postGeneric(\"/admin/athena-client/create\", input, options),\n        list: (input, options) =>\n          getWithQuery(\"/admin/athena-client/list\", input, options),\n      },\n      auditLog: {\n        list: (input, options) =>\n          getWithQuery(\"/admin/audit-log/list\", input, options),\n      },\n      email: {\n        create: async (input, options) =>\n          postGeneric(\n            \"/admin/email/create\",\n            await resolveAdminEmailPayload(\"/admin/email/create\", input),\n            options\n          ),\n        delete: (input, options) =>\n          postGeneric(\"/admin/email/delete\", input, options),\n        eventType: {\n          list: (input, options) =>\n            getWithQuery(\"/admin/email-event-type/list\", input, options),\n        },\n        failure: {\n          create: (input, options) =>\n            postGeneric(\"/admin/email-failure/create\", input, options),\n          delete: (input, options) =>\n            postGeneric(\"/admin/email-failure/delete\", input, options),\n          get: (input, options) =>\n            getWithQuery(\"/admin/email-failure/get\", input, options),\n          list: (input, options) =>\n            getWithQuery(\"/admin/email-failure/list\", input, options),\n          update: (input, options) =>\n            postGeneric(\"/admin/email-failure/update\", input, options),\n        },\n        get: (input, options) =>\n          getWithQuery(\"/admin/email/get\", input, options),\n        list: (input, options) =>\n          getWithQuery(\"/admin/email/list\", input, options),\n        template: {\n          create: async (input, options) =>\n            postGeneric(\n              \"/admin/email-template/create\",\n              await resolveAdminEmailTemplatePayload(\n                \"/admin/email-template/create\",\n                input\n              ),\n              options\n            ),\n          delete: (input, options) =>\n            postGeneric(\"/admin/email-template/delete\", input, options),\n          get: (input, options) =>\n            getWithQuery(\"/admin/email-template/get\", input, options),\n          list: (input, options) =>\n            getWithQuery(\"/admin/email-template/list\", input, options),\n          send: (input, options) =>\n            postGeneric(\n              \"/admin/email-template/send\",\n              normalizeAdminEmailTemplateSendPayload(\n                extractFetchOptions(input).payload as Record<string, unknown>\n              ),\n              options\n            ),\n          update: async (input, options) =>\n            postGeneric(\n              \"/admin/email-template/update\",\n              await resolveAdminEmailTemplatePayload(\n                \"/admin/email-template/update\",\n                input\n              ),\n              options\n            ),\n        },\n        update: async (input, options) =>\n          postGeneric(\n            \"/admin/email/update\",\n            await resolveAdminEmailPayload(\"/admin/email/update\", input),\n            options\n          ),\n      },\n      emailEventType: {\n        list: (input, options) =>\n          getWithQuery(\"/admin/email-event-type/list\", input, options),\n      },\n      emailTemplate: {\n        create: async (input, options) =>\n          postGeneric(\n            \"/admin/email-template/create\",\n            await resolveAdminEmailTemplatePayload(\n              \"/admin/email-template/create\",\n              input\n            ),\n            options\n          ),\n        delete: (input, options) =>\n          postGeneric(\"/admin/email-template/delete\", input, options),\n        get: (input, options) =>\n          getWithQuery(\"/admin/email-template/get\", input, options),\n        list: (input, options) =>\n          getWithQuery(\"/admin/email-template/list\", input, options),\n        send: (input, options) =>\n          postGeneric(\n            \"/admin/email-template/send\",\n            normalizeAdminEmailTemplateSendPayload(\n              extractFetchOptions(input).payload as Record<string, unknown>\n            ),\n            options\n          ),\n        update: async (input, options) =>\n          postGeneric(\n            \"/admin/email-template/update\",\n            await resolveAdminEmailTemplatePayload(\n              \"/admin/email-template/update\",\n              input\n            ),\n            options\n          ),\n      },\n      hasPermission: (input, options) =>\n        postGeneric<AthenaAdminHasPermissionResponse>(\n          \"/admin/has-permission\",\n          input,\n          options\n        ),\n      requirePermission: (input, options) =>\n        requirePermission(\"/admin/has-permission\", input, options),\n      role: {\n        set: (input, options) => postGeneric(\"/admin/set-role\", input, options),\n      },\n      user: {\n        ban: (input, options) => postGeneric(\"/admin/ban-user\", input, options),\n        create: (input, options) =>\n          postGeneric(\"/admin/create-user\", input, options),\n        impersonate: (input, options) =>\n          postGeneric(\"/admin/impersonate-user\", input, options),\n        list: (input, options) =>\n          getWithQuery(\"/admin/list-users\", input, options),\n        remove: (input, options) =>\n          postGeneric(\"/admin/remove-user\", input, options),\n        session: {\n          list: (input, options) =>\n            postGeneric(\"/admin/list-user-sessions\", input, options),\n          revoke: adminUserSessionRevokeBinding,\n        },\n        setPassword: (input, options) =>\n          postGeneric(\"/admin/set-user-password\", input, options),\n        stopImpersonating: (input, options) =>\n          postGeneric(\"/admin/stop-impersonating\", input, options),\n        unban: (input, options) =>\n          postGeneric(\"/admin/unban-user\", input, options),\n      },\n    },\n    apiKey: {\n      create: (input, options) =>\n        postGeneric(\"/api-key/create\", input, options),\n      delete: (input, options) =>\n        postGeneric(\"/api-key/delete\", input, options),\n      deleteAllExpired: (input, options) =>\n        executePostWithOptionalInput<AthenaApiKeyDeleteAllExpiredResponse>(\n          resolvedConfig,\n          { endpoint: \"/api-key/delete-all-expired-api-keys\", method: \"POST\" },\n          input,\n          options\n        ),\n      get: (input, options) => getWithQuery(\"/api-key/get\", input, options),\n      list: (input, options) => getWithQuery(\"/api-key/list\", input, options),\n      update: (input, options) =>\n        postGeneric(\"/api-key/update\", input, options),\n      verify: (input, options) =>\n        postGeneric(\"/api-key/verify\", input, options),\n    },\n    callback: {\n      provider: (input, options) => {\n        const { payload, fetchOptions } = extractFetchOptions(input);\n        const parsed = payload as\n          | {\n              provider?: string;\n              code?: string;\n              state?: string;\n            }\n          | undefined;\n        const provider = String(parsed?.provider ?? \"\").trim();\n        if (!provider) {\n          throw new Error(\n            \"callback.provider requires a non-empty provider value\"\n          );\n        }\n        const code = String(parsed?.code ?? \"\").trim();\n        const state = String(parsed?.state ?? \"\").trim();\n        if (!(code && state)) {\n          throw new Error(\n            \"callback.provider requires non-empty code and state values\"\n          );\n        }\n        const endpoint =\n          `/callback/${encodeURIComponent(provider)}` as AthenaAuthEndpointPath;\n        return request(\n          {\n            endpoint,\n            fetchOptions,\n            method: \"GET\",\n            query: {\n              code,\n              state,\n            },\n          },\n          options\n        );\n      },\n    },\n    changeEmail: (input, options) =>\n      postGeneric(\"/change-email\", input, options),\n    changeEmailVerify: (input, options) =>\n      getWithQuery(\"/change-email/verify\", input, options),\n    changePassword: (input, options) =>\n      postGeneric(\"/change-password\", input, options),\n    deleteUser: {\n      callback: deleteUserCallback,\n    },\n    deleteUserVerify: (input, options) =>\n      getWithQuery(\"/delete-user/verify\", input, options),\n    error: (input, options) => getGeneric(\"/error\", input, options),\n    forgetPassword: (input, options) =>\n      postGeneric(\"/forget-password\", input, options),\n    getAccessToken: (input, options) =>\n      postGeneric(\"/get-access-token\", input, options),\n    getSession: (input, options) => getGeneric(\"/get-session\", input, options),\n    getUser,\n    health: healthWithFallback,\n    linkSocial: (input, options) => postGeneric(\"/link-social\", input, options),\n    listAccounts: (input, options) =>\n      getGeneric(\"/list-accounts\", input, options),\n    // Better Auth UI flat method aliases (also nested under session/account/social/user).\n    listSessions: (input, options) =>\n      getGeneric(\"/list-sessions\", input, options),\n    ok: (input, options) => getGeneric(\"/ok\", input, options),\n    organization,\n    passkey: {\n      deletePasskey: (input, options) =>\n        postGeneric(\"/passkey/delete-passkey\", input, options),\n      generateAuthenticateOptions: (input, options) =>\n        postGeneric(\"/passkey/generate-authenticate-options\", input, options),\n      generateRegisterOptions: (input, options) =>\n        getGeneric(\"/passkey/generate-register-options\", input, options),\n      getRelatedOrigins: (input, options) =>\n        getGeneric(\"/.well-known/webauthn\", input, options),\n      listUserPasskeys: (input, options) =>\n        getGeneric(\"/passkey/list-user-passkeys\", input, options),\n      updatePasskey: (input, options) =>\n        postGeneric(\"/passkey/update-passkey\", input, options),\n      verifyAuthentication: (input, options) =>\n        postGeneric(\"/passkey/verify-authentication\", input, options),\n      verifyRegistration: (input, options) =>\n        postGeneric(\"/passkey/verify-registration\", input, options),\n    },\n    refreshToken: (input, options) =>\n      postGeneric(\"/refresh-token\", input, options),\n    requireSession,\n    resetPassword: authResetPassword,\n    revokeOtherSessions,\n    revokeSession: sessionRevokeBinding,\n    sendVerificationEmail: (input, options) =>\n      postGeneric(\"/send-verification-email\", input, options),\n    session: {\n      list: (input, options) => getGeneric(\"/list-sessions\", input, options),\n      revoke: sessionRevokeBinding,\n      revokeOther: revokeOtherSessions,\n    },\n    setPassword: (input, options) =>\n      postGeneric(\"/set-password\", input, options),\n    signIn: {\n      email: (input, options) => postGeneric(\"/sign-in/email\", input, options),\n      social: (input, options) =>\n        postGeneric(\"/sign-in/social\", input, options),\n      username: (input, options) =>\n        postGeneric(\"/sign-in/username\", input, options),\n    },\n    signOut,\n    signUp: {\n      email: (input, options) => postGeneric(\"/sign-up/email\", input, options),\n    },\n    social: {\n      link: (input, options) => postGeneric(\"/link-social\", input, options),\n    },\n    twoFactor: {\n      disable: (input, options) =>\n        postGeneric(\"/two-factor/disable\", input, options),\n      enable: (input, options) =>\n        postGeneric(\"/two-factor/enable\", input, options),\n      generateBackupCodes: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaTwoFactorGenerateBackupCodesRequest &\n            AthenaAuthFetchCompatibleInput,\n          AthenaTwoFactorGenerateBackupCodesResponse\n        >(\n          resolvedConfig,\n          { endpoint: \"/two-factor/generate-backup-codes\", method: \"POST\" },\n          input,\n          options\n        ),\n      getTotpUri: (input, options) =>\n        postGeneric(\"/two-factor/get-totp-uri\", input, options),\n      sendOtp: (input, options) =>\n        postGeneric(\"/two-factor/send-otp\", input, options),\n      verifyBackupCode: (input, options) =>\n        postGeneric(\"/two-factor/verify-backup-code\", input, options),\n      verifyOtp: (input, options) =>\n        postGeneric(\"/two-factor/verify-otp\", input, options),\n      verifyTotp: (input, options) =>\n        postGeneric(\"/two-factor/verify-totp\", input, options),\n    },\n    unlinkAccount: (input, options) =>\n      postGeneric(\"/unlink-account\", input, options),\n    updateUser: (input, options) => postGeneric(\"/update-user\", input, options),\n    user: {\n      delete: (input, options) => postGeneric(\"/delete-user\", input, options),\n      email: {\n        list: listUserEmailsWithFallback,\n      },\n      update: (input, options) => postGeneric(\"/update-user\", input, options),\n    },\n    verifyEmail: (input, options) => {\n      const queryInput: AthenaAuthGenericQueryInput = {\n        fetchOptions: input.fetchOptions,\n        query: {\n          callbackURL: input.callbackURL,\n          token: input.token,\n        },\n      };\n      return getWithQuery<{ user: AthenaAuthUser; status: boolean }>(\n        \"/verify-email\",\n        queryInput,\n        options\n      );\n    },\n  };\n\n  return {\n    auth,\n    baseUrl: normalizedBaseUrl,\n    changeEmail: (\n      input: AthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\n        { status: boolean; message?: string | null }\n      >(\n        resolvedConfig,\n        { endpoint: \"/change-email\", method: \"POST\" },\n        input,\n        options\n      ),\n    changePassword: (\n      input: AthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\n        { token?: string | null; user: AthenaAuthUser }\n      >(\n        resolvedConfig,\n        { endpoint: \"/change-password\", method: \"POST\" },\n        input,\n        options\n      ),\n    clearOtherSessions: revokeOtherSessions,\n    clearSession: revokeSession,\n    clearSessions: revokeSessions,\n    deleteUser,\n    deleteUserCallback,\n    forgetPassword: (\n      input: AthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: \"/forget-password\", method: \"POST\" },\n        input,\n        options\n      ),\n    getAccessToken: (\n      input: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n        AthenaOAuthTokenBundle\n      >(\n        resolvedConfig,\n        { endpoint: \"/get-access-token\", method: \"POST\" },\n        input,\n        options\n      ),\n    getSession: (\n      input?: AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions\n    ) =>\n      executeGetWithCompatibleInput<AthenaAuthSessionResponse>(\n        resolvedConfig,\n        { endpoint: \"/get-session\", method: \"GET\" },\n        input,\n        options\n      ),\n    getUser,\n    linkSocial: (\n      input: AthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthSocialRedirectResponse\n      >(\n        resolvedConfig,\n        { endpoint: \"/link-social\", method: \"POST\" },\n        input,\n        options\n      ),\n    listAccounts: (\n      input?: AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions\n    ) =>\n      executeGetWithCompatibleInput<AthenaAuthLinkedAccount[]>(\n        resolvedConfig,\n        { endpoint: \"/list-accounts\", method: \"GET\" },\n        input,\n        options\n      ),\n    listSessions: (\n      input?: AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions\n    ) =>\n      executeGetWithCompatibleInput<AthenaAuthSession[]>(\n        resolvedConfig,\n        { endpoint: \"/list-sessions\", method: \"GET\" },\n        input,\n        options\n      ),\n    logout: signOut,\n    organization,\n    refreshToken: (\n      input: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n        AthenaOAuthTokenBundle\n      >(\n        resolvedConfig,\n        { endpoint: \"/refresh-token\", method: \"POST\" },\n        input,\n        options\n      ),\n    request,\n    requireSession,\n    resetPassword: (\n      input: AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: \"/reset-password\", method: \"POST\" },\n        input,\n        options\n      ),\n    resolveResetPasswordToken,\n    revokeOtherSessions,\n    revokeSession,\n    revokeSessions,\n    sendVerificationEmail: (\n      input: AthenaSendVerificationEmailRequest &\n        AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaSendVerificationEmailRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: \"/send-verification-email\", method: \"POST\" },\n        input,\n        options\n      ),\n    signIn: {\n      email: (\n        input: AthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\n        options?: AthenaAuthCallOptions\n      ) =>\n        executePostWithCompatibleInput<\n          AthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthSignInResponse\n        >(\n          resolvedConfig,\n          { endpoint: \"/sign-in/email\", method: \"POST\" },\n          input,\n          options\n        ),\n      social: (\n        input: AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\n        options?: AthenaAuthCallOptions\n      ) =>\n        executePostWithCompatibleInput<\n          AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthSocialRedirectResponse | AthenaAuthSignInResponse\n        >(\n          resolvedConfig,\n          { endpoint: \"/sign-in/social\", method: \"POST\" },\n          input,\n          options\n        ),\n      username: (\n        input: AthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\n        options?: AthenaAuthCallOptions\n      ) =>\n        executePostWithCompatibleInput<\n          AthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthSignInResponse\n        >(\n          resolvedConfig,\n          { endpoint: \"/sign-in/username\", method: \"POST\" },\n          input,\n          options\n        ),\n    },\n    signOut,\n    signUp: {\n      email: (\n        input: AthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\n        options?: AthenaAuthCallOptions\n      ) =>\n        executePostWithCompatibleInput<\n          AthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthSignInResponse\n        >(\n          resolvedConfig,\n          { endpoint: \"/sign-up/email\", method: \"POST\" },\n          input,\n          options\n        ),\n    },\n    unlinkAccount: (\n      input: AthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: \"/unlink-account\", method: \"POST\" },\n        input,\n        options\n      ),\n    updateUser: (\n      input: AthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: \"/update-user\", method: \"POST\" },\n        input,\n        options\n      ),\n    verifyEmail: (\n      input: AthenaVerifyEmailRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions\n    ) => {\n      const { payload, fetchOptions } = extractFetchOptions(input);\n      const mergedOptions = mergeCallOptions(fetchOptions, options);\n      const query = payload as AthenaVerifyEmailRequest | undefined;\n      return callAuthEndpoint<{ user: AthenaAuthUser; status: boolean }>(\n        resolvedConfig,\n        { endpoint: \"/verify-email\", method: \"GET\" },\n        undefined,\n        query\n          ? {\n              callbackURL: query.callbackURL,\n              token: query.token,\n            }\n          : undefined,\n        mergedOptions\n      );\n    },\n  };\n}\n","import { parseHttpResponseBody as parseResponseBody } from \"../http/parse-response-body.ts\";\nimport { buildSdkHeaderValue } from \"../sdk-version.ts\";\nimport { buildServiceRequestHeaders } from \"../utils/athena-request-headers.ts\";\nimport type {\n  AthenaChatAddMembersRequest,\n  AthenaChatAddReactionRequest,\n  AthenaChatCallOptions,\n  AthenaChatConnectOptions,\n  AthenaChatCreateRoomRequest,\n  AthenaChatDeleteResult,\n  AthenaChatEditMessageRequest,\n  AthenaChatListMessagesQuery,\n  AthenaChatListRoomsQuery,\n  AthenaChatMarkReadUpToRequest,\n  AthenaChatMember,\n  AthenaChatMessage,\n  AthenaChatMessageCreatedResponse,\n  AthenaChatMessagePage,\n  AthenaChatModule,\n  AthenaChatReactionSummary,\n  AthenaChatReadCursor,\n  AthenaChatRealtimeConnection,\n  AthenaChatRealtimeInfoResponse,\n  AthenaChatRealtimeModule,\n  AthenaChatResolveDirectRoomRequest,\n  AthenaChatRemoveResult,\n  AthenaChatResumeRoomCursor,\n  AthenaChatRoom,\n  AthenaChatRoomCreatedResponse,\n  AthenaChatRoomPage,\n  AthenaChatSearchMessagesRequest,\n  AthenaChatSearchPage,\n  AthenaChatSendMessageRequest,\n  AthenaChatUpdateRoomRequest,\n  AthenaChatWebSocketFactory,\n  AthenaChatWebSocketLike,\n  AthenaChatWsClientCommand,\n  AthenaChatWsServerEvent,\n} from \"./types.ts\";\n\nconst SDK_NAME = \"xylex-group/athena-chat\";\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME);\nexport class AthenaChatError extends Error {\n  status: number;\n  endpoint: string;\n  method: string;\n  requestId?: string;\n  body: unknown;\n\n  constructor(input: {\n    message: string;\n    status: number;\n    endpoint: string;\n    method: string;\n    requestId?: string;\n    body: unknown;\n  }) {\n    super(input.message);\n    this.name = \"AthenaChatError\";\n    this.status = input.status;\n    this.endpoint = input.endpoint;\n    this.method = input.method;\n    this.requestId = input.requestId;\n    this.body = input.body;\n  }\n}\n\nexport interface AthenaChatClientConfig {\n  apiKey: string;\n  baseUrl?: string;\n  bearerToken?: string;\n  client?: string;\n  cookie?: string;\n  forceNoCache?: boolean;\n  headers?: Record<string, string>;\n  realtimeInfoUrl?: string;\n  sessionToken?: string;\n  webSocketFactory?: AthenaChatWebSocketFactory;\n  wsUrl?: string;\n}\n\nexport interface InternalChatModuleRuntimeOptions {\n  resolveCallOptions?: () =>\n    | AthenaChatCallOptions\n    | undefined\n    | Promise<AthenaChatCallOptions | undefined>;\n}\n\nfunction deriveRealtimeInfoUrl(wsUrl?: string): string | undefined {\n  if (!wsUrl) {\n    return;\n  }\n\n  const parsed = new URL(normalizeWsUrl(wsUrl, \"Athena chat WebSocket URL\"));\n  parsed.protocol = parsed.protocol === \"wss:\" ? \"https:\" : \"http:\";\n  parsed.pathname = parsed.pathname.replace(/\\/wss\\/gateway$/, \"/wss/info\");\n  return parsed.toString();\n}\n\nfunction normalizeWsUrl(value: string, label: string): string {\n  const normalized = value.trim();\n  if (!normalized) {\n    throw new Error(`${label} is required.`);\n  }\n\n  let parsed: URL;\n  try {\n    parsed = new URL(normalized);\n  } catch (error) {\n    throw new Error(`${label} must be a valid absolute ws(s) URL.`, {\n      cause: error,\n    });\n  }\n\n  if (parsed.protocol !== \"ws:\" && parsed.protocol !== \"wss:\") {\n    throw new Error(`${label} must use ws or wss.`);\n  }\n\n  parsed.pathname = parsed.pathname.replace(/\\/+$/, \"\");\n  return parsed.toString().replace(/\\/$/, \"\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n  return (\n    headers.get(\"x-request-id\") ??\n    headers.get(\"x-correlation-id\") ??\n    headers.get(\"x-athena-request-id\") ??\n    undefined\n  );\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string): string {\n  if (isRecord(payload)) {\n    for (const candidate of [payload.error, payload.message, payload.details]) {\n      if (typeof candidate === \"string\" && candidate.trim().length > 0) {\n        return candidate.trim();\n      }\n    }\n  }\n\n  if (typeof payload === \"string\" && payload.trim().length > 0) {\n    return payload.trim();\n  }\n\n  return fallback;\n}\n\nfunction encodePathSegment(value: string, label: string): string {\n  const normalized = value.trim();\n  if (!normalized) {\n    throw new Error(`${label} is required.`);\n  }\n  return encodeURIComponent(normalized);\n}\n\nfunction encodeQuery(query?: Record<string, unknown>): string {\n  if (!query) {\n    return \"\";\n  }\n\n  const params = new URLSearchParams();\n  for (const [key, value] of Object.entries(query)) {\n    if (value === undefined || value === null) {\n      continue;\n    }\n    if (Array.isArray(value)) {\n      for (const item of value) {\n        if (item !== undefined && item !== null) {\n          params.append(key, String(item));\n        }\n      }\n      continue;\n    }\n    params.set(key, String(value));\n  }\n\n  const encoded = params.toString();\n  return encoded ? `?${encoded}` : \"\";\n}\n\nfunction createSocket(\n  factory: AthenaChatWebSocketFactory,\n  url: string,\n  protocols?: string | string[]\n): AthenaChatWebSocketLike {\n  try {\n    return new (\n      factory as new (\n        socketUrl: string,\n        socketProtocols?: string | string[]\n      ) => AthenaChatWebSocketLike\n    )(url, protocols);\n  } catch (error) {\n    if (error instanceof TypeError) {\n      return (\n        factory as (\n          socketUrl: string,\n          socketProtocols?: string | string[]\n        ) => AthenaChatWebSocketLike\n      )(url, protocols);\n    }\n    throw error;\n  }\n}\n\nfunction buildHeaders(\n  config: AthenaChatClientConfig,\n  options?: AthenaChatCallOptions\n): Record<string, string> {\n  return buildServiceRequestHeaders(\"chat\", SDK_HEADER_VALUE, config, options);\n}\n\nfunction withJsonBody(init: RequestInit, body: unknown): RequestInit {\n  return {\n    ...init,\n    body: body === undefined ? undefined : JSON.stringify(body),\n    headers: {\n      \"Content-Type\": \"application/json\",\n      ...(init.headers as Record<string, string>),\n    },\n  };\n}\n\n/** Coalesce concurrent identical GET chat reads (method+url+auth scope). */\nconst inflightGetRequests = new Map<string, Promise<unknown>>();\n\nfunction headerIgnoreCase(\n  headers: Record<string, string>,\n  name: string\n): string {\n  const target = name.toLowerCase();\n  for (const [key, value] of Object.entries(headers)) {\n    if (key.toLowerCase() === target && value) {\n      return value;\n    }\n  }\n  return \"\";\n}\n\nfunction chatGetInflightKey(\n  method: string,\n  url: string,\n  headers: Record<string, string>\n): string {\n  // Include every response-scoping credential so concurrent session-token\n  // callers on a shared SDK never share one in-flight GET promise.\n  const auth =\n    headerIgnoreCase(headers, \"Authorization\") ||\n    headerIgnoreCase(headers, \"Cookie\") ||\n    \"\";\n  const sessionToken =\n    headerIgnoreCase(headers, \"X-Athena-Auth-Session-Token\") || \"\";\n  const bearerMirror =\n    headerIgnoreCase(headers, \"X-Athena-Auth-Bearer-Token\") || \"\";\n  const apiKey =\n    headerIgnoreCase(headers, \"x-api-key\") ||\n    headerIgnoreCase(headers, \"X-Api-Key\") ||\n    headerIgnoreCase(headers, \"x-athena-api-key\") ||\n    headerIgnoreCase(headers, \"X-Athena-Key\") ||\n    \"\";\n  const client =\n    headerIgnoreCase(headers, \"x-athena-client\") ||\n    headerIgnoreCase(headers, \"X-Athena-Client\") ||\n    headerIgnoreCase(headers, \"x-client\") ||\n    \"\";\n  return `${method}\\n${url}\\n${auth}\\n${sessionToken}\\n${bearerMirror}\\n${apiKey}\\n${client}`;\n}\n\nasync function request<T>(\n  config: AthenaChatClientConfig,\n  runtimeOptions: InternalChatModuleRuntimeOptions,\n  method: string,\n  endpoint: string,\n  options?: AthenaChatCallOptions,\n  body?: unknown\n): Promise<T> {\n  if (!config.baseUrl) {\n    throw new Error(\n      \"Athena chat base URL is not configured. Pass createClient({ url }) for unified routing or set chat.url explicitly.\"\n    );\n  }\n  // Deterministic single URL — never progressive path probing.\n  const url = `${config.baseUrl}${endpoint}`;\n  const contextOptions = await runtimeOptions.resolveCallOptions?.();\n  const resolvedOptions = {\n    ...contextOptions,\n    ...options,\n    headers:\n      contextOptions?.headers || options?.headers\n        ? { ...(contextOptions?.headers ?? {}), ...(options?.headers ?? {}) }\n        : undefined,\n  };\n  const headers = buildHeaders(config, resolvedOptions);\n  const init: RequestInit = {\n    headers,\n    method,\n    signal: resolvedOptions.signal,\n  };\n  const finalInit =\n    body === undefined || method === \"GET\" ? init : withJsonBody(init, body);\n\n  const execute = async (): Promise<T> => {\n    const response = await fetch(url, finalInit);\n    const rawText = await response.text();\n    const { parsed } = parseResponseBody(\n      rawText,\n      response.headers.get(\"content-type\")\n    );\n\n    if (!response.ok) {\n      throw new AthenaChatError({\n        body: parsed,\n        endpoint,\n        message: resolveErrorMessage(\n          parsed,\n          `Athena chat ${method} ${endpoint} failed with ${response.status}`\n        ),\n        method,\n        requestId: resolveRequestId(response.headers),\n        status: response.status,\n      });\n    }\n\n    return parsed as T;\n  };\n\n  if (method === \"GET\" && body === undefined) {\n    // Per-call AbortSignal must keep independent cancellation semantics —\n    // do not coalesce signaled requests onto another caller's promise.\n    if (resolvedOptions.signal) {\n      return execute();\n    }\n    const key = chatGetInflightKey(method, url, headers);\n    const existing = inflightGetRequests.get(key);\n    if (existing) {\n      return existing as Promise<T>;\n    }\n    const pending = execute().finally(() => {\n      if (inflightGetRequests.get(key) === pending) {\n        inflightGetRequests.delete(key);\n      }\n    });\n    inflightGetRequests.set(key, pending);\n    return pending;\n  }\n\n  return execute();\n}\n\nfunction unwrapEnvelopeData<T extends { data: unknown }>(\n  payload: T\n): T[\"data\"] {\n  return payload.data;\n}\n\nfunction createRealtimeConnection(\n  config: AthenaChatClientConfig,\n  options?: AthenaChatConnectOptions\n): AthenaChatRealtimeConnection {\n  if (!config.wsUrl) {\n    throw new Error(\n      \"Athena chat WebSocket URL is not configured. Pass createClient({ url }) for unified routing or set chat.wsUrl explicitly.\"\n    );\n  }\n\n  const wsFactory =\n    config.webSocketFactory ??\n    (globalThis as unknown as { WebSocket?: AthenaChatWebSocketFactory })\n      .WebSocket;\n\n  if (!wsFactory) {\n    throw new Error(\n      \"No WebSocket implementation is available. Provide chat.webSocketFactory in createClient(...) or run in a runtime with global WebSocket support.\"\n    );\n  }\n\n  const socket = createSocket(wsFactory, config.wsUrl, options?.protocols);\n\n  const send = (command: AthenaChatWsClientCommand) => {\n    socket.send(JSON.stringify(command));\n  };\n\n  if (options?.onMessage) {\n    const listener = (event: unknown) => {\n      const messageEvent = event as { data?: unknown };\n      const raw = messageEvent?.data;\n      if (typeof raw !== \"string\") {\n        return;\n      }\n      try {\n        options.onMessage?.(\n          JSON.parse(raw) as AthenaChatWsServerEvent | Record<string, unknown>\n        );\n      } catch {\n        options.onMessage?.({\n          error: \"Invalid JSON message from Athena chat realtime gateway.\",\n          type: \"error\",\n        });\n      }\n    };\n\n    if (typeof socket.addEventListener === \"function\") {\n      socket.addEventListener(\"message\", listener);\n    } else {\n      socket.onmessage = listener as AthenaChatWebSocketLike[\"onmessage\"];\n    }\n  }\n\n  const hello = (command?: {\n    token?: string | null;\n    room_subscriptions?: string[] | null;\n  }) => {\n    send({\n      room_subscriptions: command?.room_subscriptions,\n      token: command?.token,\n      type: \"auth.hello\",\n    });\n  };\n\n  if (options?.hello) {\n    const onOpen = () =>\n      hello({\n        room_subscriptions: options.hello?.room_subscriptions ?? undefined,\n        token: options.hello?.token ?? undefined,\n      });\n    if (typeof socket.addEventListener === \"function\") {\n      socket.addEventListener(\"open\", onOpen);\n    } else {\n      socket.onopen = onOpen;\n    }\n  }\n\n  return {\n    close(code, reason) {\n      socket.close(code, reason);\n    },\n    hello,\n    ping(at = new Date().toISOString()) {\n      send({\n        at,\n        type: \"ping\",\n      });\n    },\n    presenceHeartbeat(activeRoomId) {\n      send({\n        active_room_id: activeRoomId ?? undefined,\n        type: \"chat.presence.heartbeat\",\n      });\n    },\n    readUpTo(roomId, input) {\n      send({\n        message_id: input?.message_id ?? undefined,\n        room_id: roomId,\n        seq: input?.seq ?? undefined,\n        type: \"chat.read.up_to\",\n      });\n    },\n    resume(rooms: AthenaChatResumeRoomCursor[]) {\n      send({\n        rooms,\n        type: \"chat.resume\",\n      });\n    },\n    send,\n    socket,\n    subscribe(roomId, fromSeq) {\n      send({\n        from_seq: fromSeq ?? undefined,\n        room_id: roomId,\n        type: \"chat.subscribe\",\n      });\n    },\n    typingStart(roomId) {\n      send({\n        room_id: roomId,\n        type: \"chat.typing.start\",\n      });\n    },\n    typingStop(roomId) {\n      send({\n        room_id: roomId,\n        type: \"chat.typing.stop\",\n      });\n    },\n    unsubscribe(roomId) {\n      send({\n        room_id: roomId,\n        type: \"chat.unsubscribe\",\n      });\n    },\n  };\n}\n\nexport function createChatModule(\n  config: AthenaChatClientConfig,\n  runtimeOptions: InternalChatModuleRuntimeOptions = {}\n): AthenaChatModule {\n  const call = <T>(\n    method: string,\n    endpoint: string,\n    options?: AthenaChatCallOptions,\n    body?: unknown\n  ): Promise<T> =>\n    request<T>(config, runtimeOptions, method, endpoint, options, body);\n\n  const realtime: AthenaChatRealtimeModule = {\n    connect(options) {\n      return createRealtimeConnection(config, options);\n    },\n    info(options) {\n      const realtimeInfoUrl =\n        config.realtimeInfoUrl ?? deriveRealtimeInfoUrl(config.wsUrl);\n      if (!realtimeInfoUrl) {\n        throw new Error(\n          \"Athena chat realtime info URL is not configured. Pass createClient({ url }) for unified routing or set chat.wsUrl explicitly.\"\n        );\n      }\n\n      return request<AthenaChatRealtimeInfoResponse>(\n        {\n          ...config,\n          baseUrl: realtimeInfoUrl,\n        },\n        runtimeOptions,\n        \"GET\",\n        \"\",\n        options\n      );\n    },\n  };\n\n  return {\n    message: {\n      reaction: {\n        add(\n          messageId: string,\n          input: AthenaChatAddReactionRequest,\n          options?: AthenaChatCallOptions\n        ) {\n          return call<AthenaChatReactionSummary>(\n            \"POST\",\n            `/messages/${encodePathSegment(messageId, \"chat message ID\")}/reactions`,\n            options,\n            input\n          );\n        },\n        remove(\n          messageId: string,\n          emoji: string,\n          options?: AthenaChatCallOptions\n        ) {\n          return call<AthenaChatReactionSummary>(\n            \"DELETE\",\n            `/messages/${encodePathSegment(messageId, \"chat message ID\")}/reactions/${encodePathSegment(emoji, \"reaction emoji\")}`,\n            options\n          );\n        },\n      },\n      search(\n        input: AthenaChatSearchMessagesRequest,\n        options?: AthenaChatCallOptions\n      ) {\n        return call<AthenaChatSearchPage>(\n          \"POST\",\n          \"/messages/search\",\n          options,\n          input\n        );\n      },\n    },\n    realtime,\n    room: {\n      archive(roomId: string, options?: AthenaChatCallOptions) {\n        return call<AthenaChatRoom>(\n          \"POST\",\n          `/rooms/${encodePathSegment(roomId, \"chat room ID\")}/archive`,\n          options\n        );\n      },\n      create(\n        input: AthenaChatCreateRoomRequest,\n        options?: AthenaChatCallOptions\n      ) {\n        return call<AthenaChatRoomCreatedResponse>(\n          \"POST\",\n          \"/rooms\",\n          options,\n          input\n        );\n      },\n      resolveDirect(\n        input: AthenaChatResolveDirectRoomRequest,\n        options?: AthenaChatCallOptions\n      ) {\n        return call<AthenaChatRoom>(\n          \"POST\",\n          \"/rooms/direct/resolve\",\n          options,\n          input\n        );\n      },\n      get(roomId: string, options?: AthenaChatCallOptions) {\n        return call<AthenaChatRoom>(\n          \"GET\",\n          `/rooms/${encodePathSegment(roomId, \"chat room ID\")}`,\n          options\n        );\n      },\n      list(query?: AthenaChatListRoomsQuery, options?: AthenaChatCallOptions) {\n        return call<AthenaChatRoomPage>(\n          \"GET\",\n          `/rooms${encodeQuery(query as Record<string, unknown> | undefined)}`,\n          options\n        );\n      },\n      member: {\n        add(\n          roomId: string,\n          input: AthenaChatAddMembersRequest,\n          options?: AthenaChatCallOptions\n        ) {\n          return call<AthenaChatMember[]>(\n            \"POST\",\n            `/rooms/${encodePathSegment(roomId, \"chat room ID\")}/members`,\n            options,\n            input\n          );\n        },\n        list(roomId: string, options?: AthenaChatCallOptions) {\n          return call<AthenaChatMember[]>(\n            \"GET\",\n            `/rooms/${encodePathSegment(roomId, \"chat room ID\")}/members`,\n            options\n          );\n        },\n        remove(\n          roomId: string,\n          userId: string,\n          options?: AthenaChatCallOptions\n        ) {\n          return call<AthenaChatRemoveResult>(\n            \"DELETE\",\n            `/rooms/${encodePathSegment(roomId, \"chat room ID\")}/members/${encodePathSegment(userId, \"chat user ID\")}`,\n            options\n          );\n        },\n      },\n      message: {\n        delete(\n          roomId: string,\n          messageId: string,\n          options?: AthenaChatCallOptions\n        ) {\n          return call<AthenaChatDeleteResult>(\n            \"DELETE\",\n            `/rooms/${encodePathSegment(roomId, \"chat room ID\")}/messages/${encodePathSegment(messageId, \"chat message ID\")}`,\n            options\n          );\n        },\n        list(\n          roomId: string,\n          query?: AthenaChatListMessagesQuery,\n          options?: AthenaChatCallOptions\n        ) {\n          return call<AthenaChatMessagePage>(\n            \"GET\",\n            `/rooms/${encodePathSegment(roomId, \"chat room ID\")}/messages${encodeQuery(query as Record<string, unknown> | undefined)}`,\n            options\n          );\n        },\n        send(\n          roomId: string,\n          input: AthenaChatSendMessageRequest,\n          options?: AthenaChatCallOptions\n        ) {\n          return call<AthenaChatMessageCreatedResponse>(\n            \"POST\",\n            `/rooms/${encodePathSegment(roomId, \"chat room ID\")}/messages`,\n            options,\n            input\n          );\n        },\n        update(\n          roomId: string,\n          messageId: string,\n          input: AthenaChatEditMessageRequest,\n          options?: AthenaChatCallOptions\n        ) {\n          return call<AthenaChatMessage>(\n            \"PATCH\",\n            `/rooms/${encodePathSegment(roomId, \"chat room ID\")}/messages/${encodePathSegment(messageId, \"chat message ID\")}`,\n            options,\n            input\n          );\n        },\n      },\n      readCursor: {\n        upTo(\n          roomId: string,\n          input?: AthenaChatMarkReadUpToRequest,\n          options?: AthenaChatCallOptions\n        ) {\n          return call<AthenaChatReadCursor>(\n            \"POST\",\n            `/rooms/${encodePathSegment(roomId, \"chat room ID\")}/read-cursor`,\n            options,\n            input ?? {}\n          );\n        },\n      },\n      update(\n        roomId: string,\n        input: AthenaChatUpdateRoomRequest,\n        options?: AthenaChatCallOptions\n      ) {\n        return call<AthenaChatRoom>(\n          \"PATCH\",\n          `/rooms/${encodePathSegment(roomId, \"chat room ID\")}`,\n          options,\n          input\n        );\n      },\n    },\n  };\n}\n\nexport const chatSdkManifest = {\n  basePath: \"/chat\",\n  methods: [\n    { method: \"GET\", name: \"listRooms\", path: \"/chat/rooms\" },\n    { method: \"POST\", name: \"createRoom\", path: \"/chat/rooms\" },\n    {\n      method: \"POST\",\n      name: \"resolveDirectRoom\",\n      path: \"/chat/rooms/direct/resolve\",\n    },\n    { method: \"GET\", name: \"getRoom\", path: \"/chat/rooms/{room_id}\" },\n    { method: \"PATCH\", name: \"updateRoom\", path: \"/chat/rooms/{room_id}\" },\n    {\n      method: \"POST\",\n      name: \"archiveRoom\",\n      path: \"/chat/rooms/{room_id}/archive\",\n    },\n    {\n      method: \"GET\",\n      name: \"listRoomMessages\",\n      path: \"/chat/rooms/{room_id}/messages\",\n    },\n    {\n      method: \"POST\",\n      name: \"sendRoomMessage\",\n      path: \"/chat/rooms/{room_id}/messages\",\n    },\n    {\n      method: \"PATCH\",\n      name: \"updateRoomMessage\",\n      path: \"/chat/rooms/{room_id}/messages/{message_id}\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteRoomMessage\",\n      path: \"/chat/rooms/{room_id}/messages/{message_id}\",\n    },\n    {\n      method: \"POST\",\n      name: \"advanceReadCursor\",\n      path: \"/chat/rooms/{room_id}/read-cursor\",\n    },\n    {\n      method: \"GET\",\n      name: \"listRoomMembers\",\n      path: \"/chat/rooms/{room_id}/members\",\n    },\n    {\n      method: \"POST\",\n      name: \"addRoomMembers\",\n      path: \"/chat/rooms/{room_id}/members\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"removeRoomMember\",\n      path: \"/chat/rooms/{room_id}/members/{user_id}\",\n    },\n    {\n      method: \"POST\",\n      name: \"addReaction\",\n      path: \"/chat/messages/{message_id}/reactions\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"removeReaction\",\n      path: \"/chat/messages/{message_id}/reactions/{emoji}\",\n    },\n    { method: \"POST\", name: \"searchMessages\", path: \"/chat/messages/search\" },\n    { method: \"GET\", name: \"getRealtimeInfo\", path: \"/wss/info\" },\n    { method: \"GET\", name: \"connectRealtime\", path: \"/wss/gateway\" },\n  ],\n  namespace: \"chat\",\n} as const;\n\nexport function unwrapChatRoom(\n  payload: AthenaChatRoomCreatedResponse\n): AthenaChatRoom {\n  return unwrapEnvelopeData(payload) as AthenaChatRoom;\n}\n\nexport function unwrapChatMessage(\n  payload: AthenaChatMessageCreatedResponse\n): AthenaChatMessage {\n  return unwrapEnvelopeData(payload) as AthenaChatMessage;\n}\n","/**\n * Athena product release identity (server-facing metadata).\n *\n * Codenames are human-facing only. Never branch feature logic on codename —\n * use protocol/capability negotiation instead.\n */\n\nexport type AthenaReleaseChannel =\n  | \"development\"\n  | \"nightly\"\n  | \"alpha\"\n  | \"beta\"\n  | \"rc\"\n  | \"stable\"\n  | (string & {});\n\nexport interface AthenaReleaseIdentity {\n  channel: AthenaReleaseChannel;\n  codename: string | null;\n  displayName: string;\n  product: string;\n  version: string;\n}\n\nexport interface AthenaHealthReleaseWire {\n  channel?: unknown;\n  codename?: unknown;\n  display_name?: unknown;\n  displayName?: unknown;\n  product?: unknown;\n  version?: unknown;\n}\n\nexport interface AthenaNormalizedHealth {\n  message: string | null;\n  /** Raw health body (or null if parse failed). */\n  raw: unknown;\n  /** Normalized release identity (never fails solely because Athena 4 omits release). */\n  release: AthenaReleaseIdentity;\n  status: string | null;\n  /** Product package version from body.version when present. */\n  version: string | null;\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n  return typeof value === \"string\" && value.trim().length > 0\n    ? value.trim()\n    : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/**\n * Normalize a server health `release` object (Athena 5) or synthesize\n * conservative Athena 4 identity from a top-level `version` field.\n */\nexport function normalizeAthenaReleaseIdentity(\n  wire: unknown,\n  fallbackVersion?: string | null\n): AthenaReleaseIdentity {\n  const record = isRecord(wire) ? (wire as AthenaHealthReleaseWire) : null;\n  const product = nonEmptyString(record?.product) ?? \"Athena\";\n  const version =\n    nonEmptyString(record?.version) ??\n    nonEmptyString(fallbackVersion) ??\n    \"unknown\";\n  const codename = nonEmptyString(record?.codename) ?? null;\n  const channel = (nonEmptyString(record?.channel) ??\n    \"stable\") as AthenaReleaseChannel;\n  const displayName =\n    nonEmptyString(record?.display_name) ??\n    nonEmptyString(record?.displayName) ??\n    (codename\n      ? `${product} ${version} — ${codename}`\n      : `${product} ${version}`);\n\n  return {\n    channel,\n    codename,\n    displayName,\n    product,\n    version,\n  };\n}\n\n/**\n * Normalize GET / or GET /health response bodies for Athena 4 and Athena 5.\n * Missing `release` is not an error.\n */\nexport function normalizeAthenaHealthPayload(\n  body: unknown\n): AthenaNormalizedHealth {\n  const record = isRecord(body) ? body : null;\n  const version = nonEmptyString(record?.version) ?? null;\n  const release = normalizeAthenaReleaseIdentity(record?.release, version);\n  return {\n    message: nonEmptyString(record?.message) ?? null,\n    raw: body,\n    release,\n    status: nonEmptyString(record?.status) ?? null,\n    version,\n  };\n}\n","/**\n * Athena-JS ↔ Athena server compatibility reporting (3.7 Dragunov program).\n *\n * Discovery is lazy and cached per client. Normal query paths must not hard-fail\n * solely because health is unavailable unless a required protocol is unsafe.\n */\n\nimport { ATHENA_GATEWAY_ROUTES } from \"../gateway/routes.ts\";\nimport type { AthenaReleaseIdentity } from \"../release/identity.ts\";\nimport {\n  type AthenaNormalizedHealth,\n  normalizeAthenaHealthPayload,\n} from \"../release/identity.ts\";\nimport { PACKAGE_VERSION } from \"../sdk-version.ts\";\n\nexport interface AthenaCompatibilityWarning {\n  code: string;\n  message: string;\n  severity: \"info\" | \"warning\" | \"error\";\n}\n\nexport interface AthenaCompatibilityReport {\n  compatible: boolean;\n  discovered: boolean;\n  protocols: {\n    structuredQuery: number;\n    errors: number;\n    health: number;\n  };\n  release: AthenaReleaseIdentity;\n  sdk: {\n    package: \"@xylex-group/athena\";\n    version: string;\n  };\n  server: {\n    product: string;\n    version: string;\n    codename: string | null;\n    channel: string | null;\n  };\n  warnings: AthenaCompatibilityWarning[];\n}\n\nexport interface AthenaCompatibilityCache {\n  health: AthenaNormalizedHealth | null;\n  inflight: Promise<AthenaCompatibilityReport> | null;\n  report: AthenaCompatibilityReport | null;\n}\n\nexport function createCompatibilityCache(): AthenaCompatibilityCache {\n  return {\n    health: null,\n    inflight: null,\n    report: null,\n  };\n}\n\nfunction parseMajor(version: string | null | undefined): number | null {\n  if (!version) {\n    return null;\n  }\n  const match = version.trim().match(/^(\\d+)/);\n  if (!match) {\n    return null;\n  }\n  return Number(match[1]);\n}\n\n/**\n * Build a report from a health payload without network I/O.\n */\nexport function buildCompatibilityReportFromHealth(\n  healthBody: unknown,\n  options?: { discovered?: boolean }\n): AthenaCompatibilityReport {\n  const health = normalizeAthenaHealthPayload(healthBody);\n  const major = parseMajor(health.release.version);\n  const warnings: AthenaCompatibilityWarning[] = [];\n\n  if (major !== null && major < 4) {\n    warnings.push({\n      code: \"ATHENA_SERVER_MAJOR_UNSUPPORTED\",\n      message: `Athena server major ${major} is below the supported 4.1.x / 5.0.x range`,\n      severity: \"error\",\n    });\n  }\n  if (major !== null && major > 5) {\n    warnings.push({\n      code: \"ATHENA_SERVER_MAJOR_NEWER\",\n      message: `Athena server major ${major} is newer than this SDK's validated range (4.1.x–5.0.x); treat as best-effort`,\n      severity: \"warning\",\n    });\n  }\n  if (health.release.codename === null && major === 5) {\n    warnings.push({\n      code: \"ATHENA_RELEASE_CODENAME_MISSING\",\n      message:\n        \"Athena 5 health response is missing release.codename; continuing with SemVer only\",\n      severity: \"info\",\n    });\n  }\n\n  const compatible = !warnings.some((w) => w.severity === \"error\");\n\n  return {\n    compatible,\n    discovered: options?.discovered ?? true,\n    protocols: {\n      errors: 1,\n      health: health.release.codename !== null || major === 5 ? 2 : 1,\n      structuredQuery: 1,\n    },\n    release: health.release,\n    sdk: {\n      package: \"@xylex-group/athena\",\n      version: PACKAGE_VERSION,\n    },\n    server: {\n      channel: health.release.channel,\n      codename: health.release.codename,\n      product: health.release.product,\n      version: health.release.version,\n    },\n    warnings,\n  };\n}\n\n/**\n * Conservative offline report when health discovery fails or is skipped.\n */\nexport function buildUndiscoveredCompatibilityReport(): AthenaCompatibilityReport {\n  const release = {\n    channel: \"stable\" as const,\n    codename: null,\n    displayName: \"Athena unknown\",\n    product: \"Athena\",\n    version: \"unknown\",\n  };\n  return {\n    compatible: true,\n    discovered: false,\n    protocols: {\n      errors: 1,\n      health: 1,\n      structuredQuery: 1,\n    },\n    release,\n    sdk: {\n      package: \"@xylex-group/athena\",\n      version: PACKAGE_VERSION,\n    },\n    server: {\n      channel: null,\n      codename: null,\n      product: release.product,\n      version: release.version,\n    },\n    warnings: [\n      {\n        code: \"ATHENA_COMPAT_UNDISCOVERED\",\n        message:\n          \"Server compatibility not discovered yet; using conservative protocol defaults\",\n        severity: \"info\",\n      },\n    ],\n  };\n}\n\nexport interface DiscoverCompatibilityOptions {\n  apiKey?: string;\n  baseUrl: string;\n  cache: AthenaCompatibilityCache;\n  fetchImpl?: typeof fetch;\n  headers?: Record<string, string>;\n}\n\n/**\n * Lazy cached GET /health (falls back to GET /). Does not throw on network failure —\n * returns an undiscovered-compatible report so CRUD can continue on Athena 4/5.\n */\nexport async function discoverCompatibility(\n  options: DiscoverCompatibilityOptions\n): Promise<AthenaCompatibilityReport> {\n  if (options.cache.report?.discovered) {\n    return options.cache.report;\n  }\n  if (options.cache.inflight) {\n    return options.cache.inflight;\n  }\n\n  const run = async (): Promise<AthenaCompatibilityReport> => {\n    const fetchFn = options.fetchImpl ?? globalThis.fetch;\n    if (typeof fetchFn !== \"function\") {\n      const report = buildUndiscoveredCompatibilityReport();\n      options.cache.report = report;\n      return report;\n    }\n\n    const base = options.baseUrl.replace(/\\/+$/, \"\");\n    const headers: Record<string, string> = {\n      Accept: \"application/json\",\n      ...(options.headers ?? {}),\n    };\n    if (options.apiKey) {\n      headers[\"X-API-Key\"] = options.apiKey;\n    }\n\n    const tryPath = async (path: string): Promise<unknown | null> => {\n      try {\n        const response = await fetchFn(`${base}${path}`, {\n          headers,\n          method: \"GET\",\n        });\n        if (!response.ok) {\n          return null;\n        }\n        return await response.json();\n      } catch {\n        return null;\n      }\n    };\n\n    const body =\n      (await tryPath(ATHENA_GATEWAY_ROUTES.health)) ??\n      (await tryPath(ATHENA_GATEWAY_ROUTES.root));\n\n    if (body === null) {\n      const report = buildUndiscoveredCompatibilityReport();\n      options.cache.report = report;\n      return report;\n    }\n\n    const health = normalizeAthenaHealthPayload(body);\n    options.cache.health = health;\n    const report = buildCompatibilityReportFromHealth(body, {\n      discovered: true,\n    });\n    options.cache.report = report;\n    return report;\n  };\n\n  options.cache.inflight = run().finally(() => {\n    options.cache.inflight = null;\n  });\n  return options.cache.inflight;\n}\n","import { parseHttpResponseBody as parseResponseBody } from \"../http/parse-response-body.ts\";\nimport { buildSdkHeaderValue } from \"../sdk-version.ts\";\nimport { buildServiceRequestHeaders } from \"../utils/athena-request-headers.ts\";\nimport { AthenaGatewayError } from \"./errors.ts\";\nimport type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayBaseOptions,\n  AthenaGatewayCallOptions,\n  AthenaGatewayConnectionOptions,\n  AthenaGatewayConnectionResult,\n  AthenaGatewayEndpointPath,\n  AthenaGatewayErrorDetails,\n  AthenaGatewayMethod,\n  AthenaGatewayResponse,\n  AthenaInsertPayload,\n  AthenaQueryPayload,\n  AthenaRpcCallOptions,\n  AthenaRpcFilter,\n  AthenaRpcPayload,\n  AthenaUpdatePayload,\n} from \"./types.js\";\nimport {\n  ATHENA_DEFAULT_BASE_URL,\n  buildAthenaGatewayUrl,\n  normalizeAthenaGatewayBaseUrl,\n} from \"./url.ts\";\n\nconst SDK_NAME = \"xylex-group/athena\";\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n  return typeof value === \"string\" && value.trim().length > 0\n    ? value.trim()\n    : undefined;\n}\n\nfunction resolveStructuredErrorPayload(\n  payload: unknown\n): Record<string, unknown> | null {\n  if (!isRecord(payload)) {\n    return null;\n  }\n  return isRecord(payload.error) ? payload.error : payload;\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n  return (\n    headers.get(\"x-request-id\") ??\n    headers.get(\"x-correlation-id\") ??\n    headers.get(\"x-athena-request-id\") ??\n    undefined\n  );\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\n  const structuredPayload = resolveStructuredErrorPayload(payload);\n  if (structuredPayload) {\n    const messageCandidates = [\n      structuredPayload.message,\n      structuredPayload.error,\n      structuredPayload.details,\n    ];\n    for (const candidate of messageCandidates) {\n      const resolved = nonEmptyString(candidate);\n      if (resolved) {\n        return resolved;\n      }\n    }\n  }\n\n  const rawMessage = nonEmptyString(payload);\n  if (rawMessage) {\n    return rawMessage;\n  }\n\n  return fallback;\n}\n\nfunction resolveErrorHint(payload: unknown): string | undefined {\n  const structuredPayload = resolveStructuredErrorPayload(payload);\n  return structuredPayload ? nonEmptyString(structuredPayload.hint) : undefined;\n}\n\nfunction resolveStatusText(\n  response: Response,\n  payload: unknown\n): string | null {\n  const rawStatusText = nonEmptyString(response.statusText);\n  if (rawStatusText) {\n    return rawStatusText;\n  }\n  const payloadRecord = isRecord(payload) ? payload : null;\n  return payloadRecord\n    ? (nonEmptyString(payloadRecord.statusText) ?? null)\n    : null;\n}\n\nfunction detailsFromError(\n  error: AthenaGatewayError\n): AthenaGatewayErrorDetails {\n  return error.toDetails();\n}\n\ninterface AthenaFindManyAstPayload {\n  limit?: number;\n  orderBy?: Record<string, unknown>;\n  select: Record<string, unknown>;\n  table_name: string;\n  where?: Record<string, unknown>;\n}\n\nfunction toQueryScalar(value: unknown): string {\n  if (value === null || value === undefined) {\n    return \"null\";\n  }\n  if (typeof value === \"boolean\") {\n    return value ? \"true\" : \"false\";\n  }\n  if (typeof value === \"number\") {\n    return Number.isFinite(value) ? String(value) : \"null\";\n  }\n  return String(value);\n}\n\nfunction toQueryArray(values: unknown[]): string {\n  return `{${values.map(toQueryScalar).join(\",\")}}`;\n}\n\nfunction toRpcArgumentQueryValue(value: unknown): string {\n  if (Array.isArray(value)) {\n    return toQueryArray(value);\n  }\n  if (value && typeof value === \"object\") {\n    return JSON.stringify(value);\n  }\n  return toQueryScalar(value);\n}\n\nfunction toRpcFilterQueryValue(filter: AthenaRpcFilter): string {\n  const value = filter.value;\n  switch (filter.operator) {\n    case \"in\": {\n      if (!Array.isArray(value)) {\n        throw new AthenaGatewayError({\n          code: \"UNKNOWN_ERROR\",\n          message: `RPC filter \"${filter.column}\" with operator \"in\" requires an array value`,\n          status: 0,\n        });\n      }\n      return `in.${toQueryArray(value)}`;\n    }\n    case \"is\":\n      return `is.${toQueryScalar(value)}`;\n    case \"eq\":\n    case \"neq\":\n    case \"gt\":\n    case \"gte\":\n    case \"lt\":\n    case \"lte\":\n    case \"like\":\n    case \"ilike\":\n      return `${filter.operator}.${toQueryScalar(value)}`;\n    default: {\n      const exhaustive: never = filter.operator;\n      throw new AthenaGatewayError({\n        code: \"UNKNOWN_ERROR\",\n        message: `Unsupported RPC filter operator: ${String(exhaustive)}`,\n        status: 0,\n      });\n    }\n  }\n}\n\nfunction buildRpcGetEndpoint(\n  payload: AthenaRpcPayload\n): AthenaGatewayEndpointPath {\n  const functionName = (payload.function_name ?? payload.function).trim();\n  if (!functionName) {\n    throw new AthenaGatewayError({\n      code: \"UNKNOWN_ERROR\",\n      endpoint: \"/gateway/rpc\",\n      message: \"rpc requires a function name\",\n      method: \"GET\",\n      status: 0,\n    });\n  }\n\n  const query = new URLSearchParams();\n  if (payload.schema) {\n    query.set(\"schema\", payload.schema);\n  }\n  if (payload.select) {\n    query.set(\"select\", payload.select);\n  }\n  if (payload.count) {\n    query.set(\"count\", payload.count);\n  }\n  if (payload.head) {\n    query.set(\"head\", \"true\");\n  }\n  if (typeof payload.limit === \"number\") {\n    query.set(\"limit\", String(payload.limit));\n  }\n  if (typeof payload.offset === \"number\") {\n    query.set(\"offset\", String(payload.offset));\n  }\n  if (payload.order?.column) {\n    query.set(\n      \"order\",\n      payload.order.ascending === false\n        ? `${payload.order.column}.desc`\n        : payload.order.column\n    );\n  }\n\n  if (payload.args) {\n    for (const [key, value] of Object.entries(payload.args)) {\n      query.set(key, toRpcArgumentQueryValue(value));\n    }\n  }\n\n  if (payload.filters?.length) {\n    for (const filter of payload.filters) {\n      if (payload.args && Object.hasOwn(payload.args, filter.column)) {\n        throw new AthenaGatewayError({\n          code: \"UNKNOWN_ERROR\",\n          message: `RPC filter \"${filter.column}\" conflicts with RPC argument \"${filter.column}\" in GET mode`,\n          status: 0,\n        });\n      }\n      query.append(filter.column, toRpcFilterQueryValue(filter));\n    }\n  }\n\n  const endpoint = `/rpc/${encodeURIComponent(functionName)}`;\n  const queryText = query.toString();\n  const withQuery = queryText ? `${endpoint}?${queryText}` : endpoint;\n  return withQuery as AthenaGatewayEndpointPath;\n}\n\nfunction buildHeaders(\n  config: AthenaGatewayBaseOptions,\n  options?: AthenaGatewayCallOptions\n): Record<string, string> {\n  return buildServiceRequestHeaders(\n    \"gateway\",\n    SDK_HEADER_VALUE,\n    config,\n    options,\n    {\n      client: options?.client ?? config.client ?? \"DEFAULT_CLIENT\",\n      stripNulls: options?.stripNulls ?? true,\n    }\n  );\n}\n\nfunction toInvalidUrlResponse<T>(\n  error: unknown,\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod\n): AthenaGatewayResponse<T> {\n  const message = error instanceof Error ? error.message : String(error);\n  const gatewayError =\n    error instanceof AthenaGatewayError\n      ? error\n      : new AthenaGatewayError({\n          cause: message,\n          code: \"INVALID_URL\",\n          endpoint,\n          hint: \"Set ATHENA_URL to a full http(s) URL before running queries.\",\n          message,\n          method,\n          status: 0,\n        });\n\n  return {\n    data: null,\n    error: gatewayError.message,\n    errorDetails: detailsFromError(\n      new AthenaGatewayError({\n        cause: gatewayError.causeDetail,\n        code: gatewayError.code,\n        endpoint,\n        hint: gatewayError.hint,\n        message: gatewayError.message,\n        method,\n        requestId: gatewayError.requestId,\n        status: gatewayError.status,\n      })\n    ),\n    ok: false,\n    raw: null,\n    status: 0,\n    statusText: null,\n  };\n}\n\nfunction resolveGatewayBaseUrl(input?: string | null) {\n  return normalizeAthenaGatewayBaseUrl(input, {\n    defaultBaseUrl: ATHENA_DEFAULT_BASE_URL,\n  });\n}\n\nfunction resolveProbePath(path?: string) {\n  if (!path) {\n    return \"/\";\n  }\n  if (!path.startsWith(\"/\")) {\n    throw new AthenaGatewayError({\n      code: \"INVALID_URL\",\n      hint: 'Use a leading slash such as \"/\" or \"/health\".',\n      message: `Athena gateway probe path must start with \"/\". Received ${JSON.stringify(path)}.`,\n      status: 0,\n    });\n  }\n  return path;\n}\n\nfunction mergeConnectionHeaders(\n  baseHeaders: Record<string, string>,\n  headers?: Record<string, string>\n): Record<string, string> {\n  const merged = {\n    ...baseHeaders,\n    ...(headers ?? {}),\n  };\n\n  if (!(merged[\"X-Athena-Sdk\"] || merged[\"x-athena-sdk\"])) {\n    merged[\"X-Athena-Sdk\"] = SDK_HEADER_VALUE;\n  }\n\n  return merged;\n}\n\nasync function performConnectionCheck(\n  baseUrl: string,\n  requestHeaders: Record<string, string>,\n  options?: AthenaGatewayConnectionOptions\n): Promise<AthenaGatewayConnectionResult> {\n  const path = resolveProbePath(options?.path);\n  const url = buildAthenaGatewayUrl(baseUrl, path);\n\n  try {\n    const response = await fetch(url, {\n      headers: mergeConnectionHeaders(requestHeaders, options?.headers),\n      method: \"GET\",\n      signal: options?.signal,\n    });\n    const rawText = await response.text();\n    const requestId = resolveRequestId(response.headers);\n    const parsedBody = parseResponseBody(\n      rawText ?? \"\",\n      response.headers.get(\"content-type\")\n    );\n\n    if (parsedBody.parseFailed) {\n      const invalidJsonError = new AthenaGatewayError({\n        cause: rawText.slice(0, 300),\n        code: \"INVALID_JSON\",\n        hint: \"Verify the gateway response body is valid JSON.\",\n        message: \"Gateway probe returned malformed JSON\",\n        method: \"GET\",\n        requestId,\n        status: response.status,\n      });\n      return {\n        baseUrl,\n        error: invalidJsonError.message,\n        errorDetails: detailsFromError(invalidJsonError),\n        ok: false,\n        raw: parsedBody.parsed,\n        reachable: true,\n        status: response.status,\n        statusText: resolveStatusText(response, parsedBody.parsed),\n        url,\n      };\n    }\n\n    const parsed = parsedBody.parsed;\n    if (!response.ok) {\n      const httpError = new AthenaGatewayError({\n        code: \"HTTP_ERROR\",\n        hint: resolveErrorHint(parsed),\n        message: resolveErrorMessage(\n          parsed,\n          `Athena gateway GET ${path} failed with status ${response.status}`\n        ),\n        method: \"GET\",\n        requestId,\n        status: response.status,\n      });\n\n      return {\n        baseUrl,\n        error: httpError.message,\n        errorDetails: detailsFromError(httpError),\n        ok: false,\n        raw: parsed,\n        reachable: true,\n        status: response.status,\n        statusText: resolveStatusText(response, parsed),\n        url,\n      };\n    }\n\n    return {\n      baseUrl,\n      error: undefined,\n      errorDetails: null,\n      ok: true,\n      raw: parsed,\n      reachable: true,\n      status: response.status,\n      statusText: resolveStatusText(response, parsed),\n      url,\n    };\n  } catch (callError) {\n    const message =\n      callError instanceof Error ? callError.message : String(callError);\n    const networkError = new AthenaGatewayError({\n      cause: message,\n      code: \"NETWORK_ERROR\",\n      hint: \"Check gateway URL, DNS, and network reachability.\",\n      message: `Network error while probing Athena gateway ${url}: ${message}`,\n      method: \"GET\",\n    });\n    return {\n      baseUrl,\n      error: networkError.message,\n      errorDetails: detailsFromError(networkError),\n      ok: false,\n      raw: null,\n      reachable: false,\n      status: 0,\n      statusText: null,\n      url,\n    };\n  }\n}\n\nexport async function verifyAthenaGatewayUrl(\n  baseUrl: string,\n  options?: AthenaGatewayConnectionOptions\n): Promise<AthenaGatewayConnectionResult> {\n  const normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(baseUrl);\n  return performConnectionCheck(\n    normalizedBaseUrl,\n    { \"X-Athena-Sdk\": SDK_HEADER_VALUE },\n    options\n  );\n}\n\nasync function callAthena<T>(\n  config: AthenaGatewayBaseOptions,\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod,\n  payload: unknown,\n  options?: AthenaGatewayCallOptions\n): Promise<AthenaGatewayResponse<T>> {\n  let baseUrl: string;\n  try {\n    baseUrl = resolveGatewayBaseUrl(options?.baseUrl ?? config.baseUrl);\n  } catch (error) {\n    return toInvalidUrlResponse<T>(error, endpoint, method);\n  }\n\n  const url = buildAthenaGatewayUrl(baseUrl, endpoint);\n  const headers = buildHeaders(config, options);\n\n  try {\n    const requestInit: RequestInit = {\n      headers,\n      method,\n    };\n    if (method !== \"GET\") {\n      requestInit.body = JSON.stringify(payload);\n    }\n\n    const response = await fetch(url, requestInit);\n\n    const rawText = await response.text();\n    const requestId = resolveRequestId(response.headers);\n    const parsedBody = parseResponseBody(\n      rawText ?? \"\",\n      response.headers.get(\"content-type\")\n    );\n\n    if (parsedBody.parseFailed) {\n      const invalidJsonError = new AthenaGatewayError({\n        cause: rawText.slice(0, 300),\n        code: \"INVALID_JSON\",\n        endpoint,\n        hint: \"Verify the gateway response body is valid JSON.\",\n        message: \"Gateway returned malformed JSON\",\n        method,\n        requestId,\n        status: response.status,\n      });\n      return {\n        data: null,\n        error: invalidJsonError.message,\n        errorDetails: detailsFromError(invalidJsonError),\n        ok: false,\n        raw: parsedBody.parsed,\n        status: response.status,\n        statusText: resolveStatusText(response, parsedBody.parsed),\n      };\n    }\n\n    const parsed = parsedBody.parsed;\n    const parsedPayload = isRecord(parsed) ? parsed : null;\n\n    if (!response.ok) {\n      const httpError = new AthenaGatewayError({\n        code: \"HTTP_ERROR\",\n        endpoint,\n        hint: resolveErrorHint(parsed),\n        message: resolveErrorMessage(\n          parsed,\n          `Athena gateway ${method} ${endpoint} failed with status ${response.status}`\n        ),\n        method,\n        requestId,\n        status: response.status,\n      });\n\n      return {\n        data: null,\n        error: httpError.message,\n        errorDetails: detailsFromError(httpError),\n        ok: false,\n        raw: parsed,\n        status: response.status,\n        statusText: resolveStatusText(response, parsed),\n      };\n    }\n\n    // Unwrap envelope: API may return { data: [...], error: null } (e.g. when cached)\n    // vs raw array when uncached. Use inner data when present to avoid double nesting.\n    const payloadData =\n      parsedPayload && \"data\" in parsedPayload\n        ? (parsedPayload.data as T)\n        : (parsed as T);\n    const payloadCount =\n      parsedPayload && \"count\" in parsedPayload\n        ? typeof parsedPayload.count === \"number\" ||\n          parsedPayload.count === null\n          ? (parsedPayload.count as number | null)\n          : undefined\n        : undefined;\n\n    return {\n      count: payloadCount,\n      data: payloadData ?? null,\n      error: undefined,\n      errorDetails: null,\n      ok: true,\n      raw: parsed,\n      status: response.status,\n      statusText: resolveStatusText(response, parsed),\n    };\n  } catch (callError) {\n    const message =\n      callError instanceof Error ? callError.message : String(callError);\n    const networkError = new AthenaGatewayError({\n      cause: message,\n      code: \"NETWORK_ERROR\",\n      endpoint,\n      hint: \"Check gateway URL, DNS, and network reachability.\",\n      message: `Network error while calling ${method} ${endpoint}: ${message}`,\n      method,\n    });\n    return {\n      data: null,\n      error: networkError.message,\n      errorDetails: detailsFromError(networkError),\n      ok: false,\n      raw: null,\n      status: 0,\n      statusText: null,\n    };\n  }\n}\n\nexport interface AthenaGatewayClient {\n  baseUrl: string;\n  buildHeaders: (options?: AthenaGatewayCallOptions) => Record<string, string>;\n  deleteGateway: <T>(\n    payload: AthenaDeletePayload,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaGatewayResponse<T>>;\n  fetchGateway: <T>(\n    payload: AthenaFetchPayload | AthenaFindManyAstPayload,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaGatewayResponse<T>>;\n  insertGateway: <T>(\n    payload: AthenaInsertPayload,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaGatewayResponse<T>>;\n  queryGateway: <T>(\n    payload: AthenaQueryPayload,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaGatewayResponse<T>>;\n  resolveCallOptions: (\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaGatewayCallOptions | undefined>;\n  rpcGateway: <T>(\n    payload: AthenaRpcPayload,\n    options?: AthenaRpcCallOptions\n  ) => Promise<AthenaGatewayResponse<T>>;\n  updateGateway: <T>(\n    payload: AthenaUpdatePayload,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaGatewayResponse<T>>;\n  verifyConnection: (\n    options?: AthenaGatewayConnectionOptions\n  ) => Promise<AthenaGatewayConnectionResult>;\n}\n\nexport function createAthenaGatewayClient(\n  config: AthenaGatewayBaseOptions = {}\n): AthenaGatewayClient {\n  const normalizedBaseUrl = resolveGatewayBaseUrl(config.baseUrl);\n  const normalizedConfig: AthenaGatewayBaseOptions = {\n    ...config,\n    baseUrl: normalizedBaseUrl,\n  };\n\n  return {\n    baseUrl: normalizedBaseUrl,\n    buildHeaders(options) {\n      return buildHeaders(normalizedConfig, options);\n    },\n    deleteGateway(payload, options) {\n      return callAthena(\n        normalizedConfig,\n        \"/gateway/delete\",\n        \"DELETE\",\n        payload,\n        options\n      );\n    },\n    fetchGateway(payload, options) {\n      return callAthena(\n        normalizedConfig,\n        \"/gateway/fetch\",\n        \"POST\",\n        payload,\n        options\n      );\n    },\n    insertGateway(payload, options) {\n      return callAthena(\n        normalizedConfig,\n        \"/gateway/insert\",\n        \"PUT\",\n        payload,\n        options\n      );\n    },\n    queryGateway(payload, options) {\n      return callAthena(\n        normalizedConfig,\n        \"/gateway/query\",\n        \"POST\",\n        payload,\n        options\n      );\n    },\n    async resolveCallOptions(options) {\n      return options;\n    },\n    rpcGateway(payload, options) {\n      if (options?.get) {\n        const endpoint = buildRpcGetEndpoint(payload);\n        return callAthena(normalizedConfig, endpoint, \"GET\", null, options);\n      }\n      return callAthena(\n        normalizedConfig,\n        \"/gateway/rpc\",\n        \"POST\",\n        payload,\n        options\n      );\n    },\n    updateGateway(payload, options) {\n      return callAthena(\n        normalizedConfig,\n        \"/gateway/update\",\n        \"POST\",\n        payload,\n        options\n      );\n    },\n    verifyConnection(options) {\n      return performConnectionCheck(\n        normalizedBaseUrl,\n        buildHeaders(normalizedConfig),\n        options\n      );\n    },\n  };\n}\n\ntype AthenaGatewayCallOptionsResolver = () =>\n  | AthenaGatewayCallOptions\n  | undefined\n  | Promise<AthenaGatewayCallOptions | undefined>;\n\nfunction mergeGatewayCallOptions(\n  base?: AthenaGatewayCallOptions,\n  override?: AthenaGatewayCallOptions\n): AthenaGatewayCallOptions | undefined {\n  if (!(base || override)) {\n    return;\n  }\n  return {\n    ...base,\n    ...override,\n    headers:\n      base?.headers || override?.headers\n        ? { ...(base?.headers ?? {}), ...(override?.headers ?? {}) }\n        : undefined,\n  };\n}\n\n/**\n * Creates a request-context view over one immutable gateway transport.\n * The resolver runs once for every operation; the underlying transport and\n * normalized route configuration are never reconstructed.\n */\nexport function createAthenaGatewayClientView(\n  transport: AthenaGatewayClient,\n  resolveContext: AthenaGatewayCallOptionsResolver\n): AthenaGatewayClient {\n  const resolveCallOptions = async (\n    options?: AthenaGatewayCallOptions\n  ): Promise<AthenaGatewayCallOptions | undefined> =>\n    mergeGatewayCallOptions(await resolveContext(), options);\n\n  return {\n    baseUrl: transport.baseUrl,\n    buildHeaders(options) {\n      return transport.buildHeaders(options);\n    },\n    async deleteGateway(payload, options) {\n      return transport.deleteGateway(\n        payload,\n        await resolveCallOptions(options)\n      );\n    },\n    async fetchGateway(payload, options) {\n      return transport.fetchGateway(payload, await resolveCallOptions(options));\n    },\n    async insertGateway(payload, options) {\n      return transport.insertGateway(\n        payload,\n        await resolveCallOptions(options)\n      );\n    },\n    async queryGateway(payload, options) {\n      return transport.queryGateway(payload, await resolveCallOptions(options));\n    },\n    resolveCallOptions,\n    async rpcGateway(payload, options) {\n      return transport.rpcGateway(payload, await resolveCallOptions(options));\n    },\n    async updateGateway(payload, options) {\n      return transport.updateGateway(\n        payload,\n        await resolveCallOptions(options)\n      );\n    },\n    async verifyConnection(options) {\n      const context = await resolveCallOptions();\n      const contextHeaders = transport.buildHeaders(context);\n      return transport.verifyConnection({\n        ...options,\n        headers: {\n          ...contextHeaders,\n          ...(options?.headers ?? {}),\n        },\n      });\n    },\n  };\n}\n","import type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCondition,\n  AthenaInsertPayload,\n  AthenaJsonObject,\n  AthenaRpcFilter,\n  AthenaRpcPayload,\n  AthenaSortBy,\n  AthenaUpdatePayload,\n} from \"./gateway/types.ts\";\nimport type {\n  AthenaFindManyOptions,\n  AthenaOrderBy,\n  AthenaSelectShape,\n  AthenaWhere,\n} from \"./query-ast.ts\";\nimport type {\n  AthenaFindManyAstPayload,\n  AthenaSelectTransportPlan,\n} from \"./query-transport.ts\";\n\nconst ATHENA_DEBUG_AST_KEY = \"__athenaDebugAst\" as const;\n\nexport interface AthenaTableBuilderStateAst {\n  conditions: AthenaGatewayCondition[];\n  currentPage?: number;\n  limit?: number;\n  offset?: number;\n  order?: AthenaSortBy;\n  pageSize?: number;\n  totalPages?: number;\n}\n\nexport interface AthenaRpcBuilderStateAst {\n  filters: AthenaRpcFilter[];\n  limit?: number;\n  offset?: number;\n  order?: {\n    column: string;\n    ascending?: boolean;\n  };\n}\n\nexport type AthenaDebugQueryEndpoint =\n  | \"/gateway/fetch\"\n  | \"/gateway/insert\"\n  | \"/gateway/update\"\n  | \"/gateway/delete\"\n  | \"/gateway/rpc\"\n  | \"/gateway/query\"\n  | `/rpc/${string}`;\n\ninterface AthenaDebugAstBase<TKind extends string> {\n  kind: TKind;\n  version: 1;\n}\n\nexport type AthenaSelectDebugTransport =\n  | {\n      mode: \"compiled-fetch\" | \"structured-fetch\";\n      endpoint: \"/gateway/fetch\";\n      payload: AthenaFetchPayload;\n    }\n  | {\n      mode: \"typed-query\";\n      endpoint: \"/gateway/query\";\n      payload: {\n        query: string;\n      };\n    };\n\nexport interface AthenaSelectDebugAst extends AthenaDebugAstBase<\"select\"> {\n  input: {\n    columns: string | string[];\n    state: AthenaTableBuilderStateAst;\n  };\n  tableName: string;\n  transport: AthenaSelectDebugTransport;\n}\n\nexport type AthenaFindManyDebugTransport<\n  Row = Record<string, unknown>,\n  TSelect extends AthenaSelectShape = AthenaSelectShape,\n> =\n  | {\n      mode: \"direct-ast-fetch\";\n      endpoint: \"/gateway/fetch\";\n      payload: AthenaFindManyAstPayload<Row, TSelect>;\n    }\n  | {\n      mode: \"compiled-fetch\" | \"structured-fetch\";\n      endpoint: \"/gateway/fetch\";\n      payload: AthenaFetchPayload;\n    }\n  | {\n      mode: \"compiled-query\";\n      endpoint: \"/gateway/query\";\n      payload: {\n        query: string;\n      };\n    };\n\nexport interface AthenaFindManyDebugAst<\n  Row = Record<string, unknown>,\n  TSelect extends AthenaSelectShape = AthenaSelectShape,\n> extends AthenaDebugAstBase<\"findMany\"> {\n  compiled: {\n    columns: string;\n    baseState: AthenaTableBuilderStateAst;\n    executionState: AthenaTableBuilderStateAst;\n  };\n  input: {\n    select: TSelect;\n    where?: AthenaWhere<Row>;\n    orderBy?: AthenaOrderBy<Row>;\n    limit?: number;\n  };\n  tableName: string;\n  transport: AthenaFindManyDebugTransport<Row, TSelect>;\n}\n\nexport interface AthenaInsertDebugAst extends AthenaDebugAstBase<\"insert\"> {\n  input: {\n    values: AthenaInsertPayload[\"insert_body\"];\n    returning?: AthenaInsertPayload[\"columns\"];\n    count?: AthenaInsertPayload[\"count\"];\n    head?: boolean;\n    defaultToNull?: boolean;\n  };\n  tableName: string;\n  transport: {\n    mode: \"insert\";\n    endpoint: \"/gateway/insert\";\n    payload: AthenaInsertPayload;\n  };\n}\n\nexport interface AthenaUpsertDebugAst extends AthenaDebugAstBase<\"upsert\"> {\n  input: {\n    values: AthenaInsertPayload[\"insert_body\"];\n    updateBody?: AthenaInsertPayload[\"update_body\"];\n    onConflict?: AthenaInsertPayload[\"on_conflict\"];\n    returning?: AthenaInsertPayload[\"columns\"];\n    count?: AthenaInsertPayload[\"count\"];\n    head?: boolean;\n    defaultToNull?: boolean;\n  };\n  tableName: string;\n  transport: {\n    mode: \"upsert\";\n    endpoint: \"/gateway/insert\";\n    payload: AthenaInsertPayload;\n  };\n}\n\nexport interface AthenaUpdateDebugAst extends AthenaDebugAstBase<\"update\"> {\n  input: {\n    values: AthenaUpdatePayload[\"update_body\"];\n    state: AthenaTableBuilderStateAst;\n    returning?: AthenaUpdatePayload[\"columns\"];\n  };\n  tableName: string;\n  transport: {\n    mode: \"update\";\n    endpoint: \"/gateway/update\";\n    payload: AthenaUpdatePayload;\n  };\n}\n\nexport interface AthenaDeleteDebugAst extends AthenaDebugAstBase<\"delete\"> {\n  input: {\n    resourceId?: AthenaDeletePayload[\"resource_id\"];\n    state: AthenaTableBuilderStateAst;\n    returning?: AthenaDeletePayload[\"columns\"];\n  };\n  tableName: string;\n  transport: {\n    mode: \"delete\";\n    endpoint: \"/gateway/delete\";\n    payload: AthenaDeletePayload;\n  };\n}\n\nexport interface AthenaRpcDebugAst extends AthenaDebugAstBase<\"rpc\"> {\n  functionName: string;\n  input: {\n    args?: AthenaJsonObject;\n    select?: string | string[];\n    state: AthenaRpcBuilderStateAst;\n  };\n  transport: {\n    mode: \"rpc-post\" | \"rpc-get\";\n    endpoint: \"/gateway/rpc\" | `/rpc/${string}`;\n    payload: AthenaRpcPayload;\n  };\n}\n\nexport interface AthenaRawQueryDebugAst extends AthenaDebugAstBase<\"query\"> {\n  input: {\n    query: string;\n  };\n  transport: {\n    mode: \"raw-query\";\n    endpoint: \"/gateway/query\";\n    payload: {\n      query: string;\n    };\n  };\n}\n\nexport type AthenaQueryDebugAst =\n  | AthenaSelectDebugAst\n  | AthenaFindManyDebugAst\n  | AthenaInsertDebugAst\n  | AthenaUpsertDebugAst\n  | AthenaUpdateDebugAst\n  | AthenaDeleteDebugAst\n  | AthenaRpcDebugAst\n  | AthenaRawQueryDebugAst;\n\nfunction cloneConditions(\n  conditions: AthenaGatewayCondition[]\n): AthenaGatewayCondition[] {\n  return conditions.map((condition) => ({ ...condition }));\n}\n\nexport function cloneTableBuilderStateAst(\n  state: AthenaTableBuilderStateAst\n): AthenaTableBuilderStateAst {\n  return {\n    conditions: cloneConditions(state.conditions),\n    currentPage: state.currentPage,\n    limit: state.limit,\n    offset: state.offset,\n    order: state.order ? { ...state.order } : undefined,\n    pageSize: state.pageSize,\n    totalPages: state.totalPages,\n  };\n}\n\nexport function cloneRpcBuilderStateAst(\n  state: AthenaRpcBuilderStateAst\n): AthenaRpcBuilderStateAst {\n  return {\n    filters: state.filters.map((filter) => ({ ...filter })),\n    limit: state.limit,\n    offset: state.offset,\n    order: state.order ? { ...state.order } : undefined,\n  };\n}\n\nfunction toSelectTransportAst(\n  plan: AthenaSelectTransportPlan\n): AthenaSelectDebugTransport {\n  if (plan.kind === \"query\") {\n    return {\n      endpoint: \"/gateway/query\",\n      mode: \"typed-query\",\n      payload: plan.payload,\n    };\n  }\n\n  return {\n    endpoint: \"/gateway/fetch\",\n    mode:\n      plan.payload.select === undefined ? \"compiled-fetch\" : \"structured-fetch\",\n    payload: plan.payload,\n  };\n}\n\nfunction resolveDebugTableName(tableName: string | undefined): string {\n  return tableName ?? \"__unknown_table__\";\n}\n\nexport function buildSelectDebugAst(input: {\n  tableName: string;\n  columns: string | string[];\n  state: AthenaTableBuilderStateAst;\n  plan: AthenaSelectTransportPlan;\n}): AthenaSelectDebugAst {\n  return {\n    input: {\n      columns: input.columns,\n      state: cloneTableBuilderStateAst(input.state),\n    },\n    kind: \"select\",\n    tableName: input.tableName,\n    transport: toSelectTransportAst(input.plan),\n    version: 1,\n  };\n}\n\nexport function buildFindManyCompiledDebugAst<\n  Row,\n  TSelect extends AthenaSelectShape,\n>(input: {\n  tableName: string;\n  /** Already validated at the public `findMany` callsite. */\n  options: AthenaFindManyOptions<Row, TSelect>;\n  compiledColumns: string;\n  baseState: AthenaTableBuilderStateAst;\n  executionState: AthenaTableBuilderStateAst;\n  plan: AthenaSelectTransportPlan;\n}): AthenaFindManyDebugAst<Row, TSelect> {\n  return {\n    compiled: {\n      baseState: cloneTableBuilderStateAst(input.baseState),\n      columns: input.compiledColumns,\n      executionState: cloneTableBuilderStateAst(input.executionState),\n    },\n    input: {\n      limit: input.options.limit,\n      orderBy: input.options.orderBy,\n      select: input.options.select,\n      where: input.options.where,\n    },\n    kind: \"findMany\",\n    tableName: input.tableName,\n    transport: planToFindManyTransport<Row, TSelect>(input.plan),\n    version: 1,\n  };\n}\n\nexport function buildFindManyDirectDebugAst<\n  Row,\n  TSelect extends AthenaSelectShape,\n>(input: {\n  tableName: string;\n  /** Already validated at the public `findMany` callsite. */\n  options: AthenaFindManyOptions<Row, TSelect>;\n  compiledColumns: string;\n  baseState: AthenaTableBuilderStateAst;\n  executionState: AthenaTableBuilderStateAst;\n  payload: AthenaFindManyAstPayload<Row, TSelect>;\n}): AthenaFindManyDebugAst<Row, TSelect> {\n  return {\n    compiled: {\n      baseState: cloneTableBuilderStateAst(input.baseState),\n      columns: input.compiledColumns,\n      executionState: cloneTableBuilderStateAst(input.executionState),\n    },\n    input: {\n      limit: input.options.limit,\n      orderBy: input.options.orderBy,\n      select: input.options.select,\n      where: input.options.where,\n    },\n    kind: \"findMany\",\n    tableName: input.tableName,\n    transport: {\n      endpoint: \"/gateway/fetch\",\n      mode: \"direct-ast-fetch\",\n      payload: input.payload,\n    },\n    version: 1,\n  };\n}\n\nfunction planToFindManyTransport<Row, TSelect extends AthenaSelectShape>(\n  plan: AthenaSelectTransportPlan\n): AthenaFindManyDebugTransport<Row, TSelect> {\n  if (plan.kind === \"query\") {\n    return {\n      endpoint: \"/gateway/query\",\n      mode: \"compiled-query\",\n      payload: plan.payload,\n    };\n  }\n\n  return {\n    endpoint: \"/gateway/fetch\",\n    mode:\n      plan.payload.select === undefined ? \"compiled-fetch\" : \"structured-fetch\",\n    payload: plan.payload,\n  };\n}\n\nexport function buildInsertDebugAst(\n  payload: AthenaInsertPayload\n): AthenaInsertDebugAst {\n  return {\n    input: {\n      count: payload.count,\n      defaultToNull: payload.default_to_null,\n      head: payload.head,\n      returning: payload.columns,\n      values: payload.insert_body,\n    },\n    kind: \"insert\",\n    tableName: payload.table_name,\n    transport: {\n      endpoint: \"/gateway/insert\",\n      mode: \"insert\",\n      payload,\n    },\n    version: 1,\n  };\n}\n\nexport function buildUpsertDebugAst(\n  payload: AthenaInsertPayload\n): AthenaUpsertDebugAst {\n  return {\n    input: {\n      count: payload.count,\n      defaultToNull: payload.default_to_null,\n      head: payload.head,\n      onConflict: payload.on_conflict,\n      returning: payload.columns,\n      updateBody: payload.update_body,\n      values: payload.insert_body,\n    },\n    kind: \"upsert\",\n    tableName: payload.table_name,\n    transport: {\n      endpoint: \"/gateway/insert\",\n      mode: \"upsert\",\n      payload,\n    },\n    version: 1,\n  };\n}\n\nexport function buildUpdateDebugAst(input: {\n  state: AthenaTableBuilderStateAst;\n  payload: AthenaUpdatePayload;\n}): AthenaUpdateDebugAst {\n  return {\n    input: {\n      returning: input.payload.columns,\n      state: cloneTableBuilderStateAst(input.state),\n      values: input.payload.update_body,\n    },\n    kind: \"update\",\n    tableName: resolveDebugTableName(input.payload.table_name),\n    transport: {\n      endpoint: \"/gateway/update\",\n      mode: \"update\",\n      payload: input.payload,\n    },\n    version: 1,\n  };\n}\n\nexport function buildDeleteDebugAst(input: {\n  state: AthenaTableBuilderStateAst;\n  payload: AthenaDeletePayload;\n}): AthenaDeleteDebugAst {\n  return {\n    input: {\n      resourceId: input.payload.resource_id,\n      returning: input.payload.columns,\n      state: cloneTableBuilderStateAst(input.state),\n    },\n    kind: \"delete\",\n    tableName: input.payload.table_name,\n    transport: {\n      endpoint: \"/gateway/delete\",\n      mode: \"delete\",\n      payload: input.payload,\n    },\n    version: 1,\n  };\n}\n\nexport function buildRpcDebugAst(input: {\n  functionName: string;\n  args?: AthenaJsonObject;\n  selectedColumns?: string | string[];\n  state: AthenaRpcBuilderStateAst;\n  payload: AthenaRpcPayload;\n  endpoint: \"/gateway/rpc\" | `/rpc/${string}`;\n}): AthenaRpcDebugAst {\n  return {\n    functionName: input.functionName,\n    input: {\n      args: input.args,\n      select: input.selectedColumns,\n      state: cloneRpcBuilderStateAst(input.state),\n    },\n    kind: \"rpc\",\n    transport: {\n      endpoint: input.endpoint,\n      mode: input.endpoint === \"/gateway/rpc\" ? \"rpc-post\" : \"rpc-get\",\n      payload: input.payload,\n    },\n    version: 1,\n  };\n}\n\nexport function buildRawQueryDebugAst(query: string): AthenaRawQueryDebugAst {\n  return {\n    input: {\n      query,\n    },\n    kind: \"query\",\n    transport: {\n      endpoint: \"/gateway/query\",\n      mode: \"raw-query\",\n      payload: {\n        query,\n      },\n    },\n    version: 1,\n  };\n}\n\nexport function attachAthenaDebugAst(\n  target: unknown,\n  ast: AthenaQueryDebugAst | undefined\n): void {\n  if (!ast) {\n    return;\n  }\n  if (!target || (typeof target !== \"object\" && typeof target !== \"function\")) {\n    return;\n  }\n  Object.defineProperty(target, ATHENA_DEBUG_AST_KEY, {\n    configurable: true,\n    enumerable: false,\n    value: ast,\n    writable: false,\n  });\n}\n\nexport function getAthenaDebugAst(value: unknown): AthenaQueryDebugAst | null {\n  if (!value || (typeof value !== \"object\" && typeof value !== \"function\")) {\n    return null;\n  }\n  return (\n    ((value as Record<string, unknown>)[ATHENA_DEBUG_AST_KEY] as\n      | AthenaQueryDebugAst\n      | undefined) ?? null\n  );\n}\n","import type {\n  AthenaQueryTraceCallsite,\n  AthenaQueryTraceEvent,\n  InternalClientBehaviorOptions,\n} from \"./client.ts\";\nimport type { AthenaResult } from \"./client-result.ts\";\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaRpcCallOptions,\n} from \"./gateway/types.ts\";\nimport type { AthenaQueryDebugAst } from \"./query-debug-ast.ts\";\nimport { attachAthenaDebugAst } from \"./query-debug-ast.ts\";\n\nconst QUERY_TRACE_STACK_SKIP_PATTERNS = [\n  \"src\\\\client.ts\",\n  \"src/client.ts\",\n  \"src\\\\query-tracing.ts\",\n  \"src/query-tracing.ts\",\n  \"src\\\\v3-client.ts\",\n  \"src/v3-client.ts\",\n  \"dist\\\\client.\",\n  \"dist/client.\",\n  \"dist\\\\query-tracing.\",\n  \"dist/query-tracing.\",\n  \"dist\\\\v3-client.\",\n  \"dist/v3-client.\",\n  \"node_modules\\\\@xylex-group\\\\athena\",\n  \"node_modules/@xylex-group/athena\",\n  \"node:internal\",\n  \"internal/process\",\n] as const;\n\ntype AthenaTraceOperation = AthenaQueryTraceEvent[\"operation\"];\ntype AthenaTraceEndpoint = AthenaQueryTraceEvent[\"endpoint\"];\n\nexport interface AthenaTraceContext {\n  ast?: AthenaQueryDebugAst;\n  endpoint: AthenaTraceEndpoint;\n  functionName?: string;\n  operation: AthenaTraceOperation;\n  options?: AthenaGatewayCallOptions | AthenaRpcCallOptions;\n  payload: unknown;\n  sql: string;\n  table?: string;\n}\n\nexport interface AthenaQueryTracer {\n  captureCallsite: () => AthenaQueryTraceCallsite | null;\n  publishFailure: (\n    context: AthenaTraceContext,\n    error: unknown,\n    durationMs: number,\n    callsite: AthenaQueryTraceCallsite | null\n  ) => void;\n  publishSuccess: <T>(\n    context: AthenaTraceContext,\n    result: AthenaResult<T>,\n    durationMs: number,\n    callsite: AthenaQueryTraceCallsite | null\n  ) => void;\n}\n\nexport interface AthenaTraceCallsiteStore {\n  resolve: (\n    callsite?: AthenaQueryTraceCallsite | null\n  ) => AthenaQueryTraceCallsite | null;\n}\n\nfunction parseQueryTraceCallsiteFrame(\n  frame: string\n): AthenaQueryTraceCallsite | null {\n  const trimmed = frame.trim();\n  if (!trimmed) {\n    return null;\n  }\n\n  let body = trimmed.replace(/^at\\s+/, \"\");\n  if (body.startsWith(\"async \")) {\n    body = body.slice(6);\n  }\n\n  let functionName: string | undefined;\n  let location = body;\n  const wrappedMatch = body.match(/^(.*?)\\s+\\((.*)\\)$/);\n  if (wrappedMatch) {\n    functionName = wrappedMatch[1].trim() || undefined;\n    location = wrappedMatch[2].trim();\n  }\n\n  const locationMatch = location.match(/^(.*):(\\d+):(\\d+)$/);\n  if (!locationMatch) {\n    return null;\n  }\n\n  const filePath = locationMatch[1].replace(/^file:\\/\\//, \"\");\n  const line = Number(locationMatch[2]);\n  const column = Number(locationMatch[3]);\n  if (!(Number.isFinite(line) && Number.isFinite(column))) {\n    return null;\n  }\n\n  const normalizedPath = filePath.replace(/\\\\/g, \"/\");\n  const fileName = normalizedPath.split(\"/\").at(-1) ?? filePath;\n  return {\n    column,\n    fileName,\n    filePath,\n    frame: trimmed,\n    functionName,\n    line,\n  };\n}\n\nfunction captureQueryTraceCallsite(): AthenaQueryTraceCallsite | null {\n  const stack = new Error(\"query trace stack capture\").stack;\n  if (!stack) {\n    return null;\n  }\n  const frames = stack\n    .split(\"\\n\")\n    .slice(2)\n    .map((frame) => frame.trim())\n    .filter(Boolean);\n\n  for (const frame of frames) {\n    if (\n      QUERY_TRACE_STACK_SKIP_PATTERNS.some((pattern) => frame.includes(pattern))\n    ) {\n      continue;\n    }\n    const callsite = parseQueryTraceCallsiteFrame(frame);\n    if (callsite) {\n      return callsite;\n    }\n  }\n\n  const fallback = frames.find(\n    (frame) => !frame.includes(\"captureQueryTraceCallsite\")\n  );\n  return fallback ? parseQueryTraceCallsiteFrame(fallback) : null;\n}\n\nfunction defaultQueryTraceLogger(event: AthenaQueryTraceEvent): void {\n  const target = event.table ?? event.functionName ?? \"gateway\";\n  const outcomeState = event.outcome?.error ? \"error\" : \"ok\";\n  const banner = `[athena-js][trace] ${event.operation.toUpperCase()} ${event.endpoint} ${target} ${event.durationMs}ms ${outcomeState}`;\n  console.info(banner, event);\n}\n\nexport function captureTraceCallsite(\n  tracer?: AthenaQueryTracer\n): AthenaQueryTraceCallsite | null {\n  return tracer?.captureCallsite() ?? null;\n}\n\nexport function createTraceCallsiteStore(\n  tracer?: AthenaQueryTracer,\n  initialCallsite?: AthenaQueryTraceCallsite | null\n): AthenaTraceCallsiteStore {\n  let storedCallsite = initialCallsite ?? undefined;\n\n  return {\n    resolve(callsite) {\n      if (callsite) {\n        storedCallsite = callsite;\n        return callsite;\n      }\n      if (storedCallsite !== undefined) {\n        return storedCallsite;\n      }\n      const capturedCallsite = captureTraceCallsite(tracer);\n      if (capturedCallsite) {\n        storedCallsite = capturedCallsite;\n      }\n      return capturedCallsite;\n    },\n  };\n}\n\nexport function createQueryTracer(\n  behavior?: InternalClientBehaviorOptions\n): AthenaQueryTracer | undefined {\n  const traceOption = behavior?.traceQueries;\n  if (!traceOption) {\n    return;\n  }\n\n  const logger =\n    typeof traceOption === \"object\" && traceOption.logger\n      ? traceOption.logger\n      : defaultQueryTraceLogger;\n\n  const emit = (event: AthenaQueryTraceEvent) => {\n    try {\n      logger(event);\n    } catch (error) {\n      console.warn(\"[athena-js][trace] logger failed\", error);\n    }\n  };\n\n  return {\n    captureCallsite: captureQueryTraceCallsite,\n    publishFailure(\n      context: AthenaTraceContext,\n      error: unknown,\n      durationMs: number,\n      callsite: AthenaQueryTraceCallsite | null\n    ) {\n      emit({\n        ast: context.ast,\n        callsite,\n        durationMs,\n        endpoint: context.endpoint,\n        functionName: context.functionName,\n        operation: context.operation,\n        options: context.options,\n        payload: context.payload,\n        sql: context.sql,\n        table: context.table,\n        thrownError: error,\n        timestamp: new Date().toISOString(),\n      });\n    },\n    publishSuccess<T>(\n      context: AthenaTraceContext,\n      result: AthenaResult<T>,\n      durationMs: number,\n      callsite: AthenaQueryTraceCallsite | null\n    ) {\n      emit({\n        ast: context.ast,\n        callsite,\n        durationMs,\n        endpoint: context.endpoint,\n        functionName: context.functionName,\n        operation: context.operation,\n        options: context.options,\n        outcome: {\n          count: result.count ?? null,\n          data: result.data,\n          error: result.error,\n          errorDetails: result.errorDetails ?? null,\n          raw: result.raw,\n          status: result.status,\n        },\n        payload: context.payload,\n        sql: context.sql,\n        table: context.table,\n        timestamp: new Date().toISOString(),\n      });\n    },\n  };\n}\n\nexport async function executeWithQueryTrace<T>(\n  tracer: AthenaQueryTracer | undefined,\n  context: AthenaTraceContext,\n  runner: () => Promise<AthenaResult<T>>,\n  callsiteOverride?: AthenaQueryTraceCallsite | null\n): Promise<AthenaResult<T>> {\n  const callsite = tracer\n    ? (callsiteOverride ?? tracer.captureCallsite())\n    : null;\n  const startedAt = tracer ? Date.now() : 0;\n  try {\n    const result = await runner();\n    attachAthenaDebugAst(result, context.ast);\n    if (tracer) {\n      tracer.publishSuccess(context, result, Date.now() - startedAt, callsite);\n    }\n    return result;\n  } catch (error) {\n    attachAthenaDebugAst(error, context.ast);\n    if (tracer) {\n      tracer.publishFailure(context, error, Date.now() - startedAt, callsite);\n    }\n    throw error;\n  }\n}\n","import type { AthenaModelTarget } from \"./types.ts\";\n\ninterface ResolveAthenaModelTargetTableNameOptions {\n  fallbackModel?: string;\n  fallbackSchema?: string;\n}\n\nfunction normalizeOptionalName(value: string | undefined): string | undefined {\n  const normalized = value?.trim();\n  return normalized ? normalized : undefined;\n}\n\nexport function isAthenaModelTarget(\n  value: unknown\n): value is AthenaModelTarget {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n\n  const candidate = value as { meta?: { primaryKey?: unknown } };\n  return Boolean(candidate.meta && Array.isArray(candidate.meta.primaryKey));\n}\n\nexport function resolveAthenaModelTargetTableName(\n  target: AthenaModelTarget,\n  options: ResolveAthenaModelTargetTableNameOptions = {}\n): string {\n  const explicitTableName = normalizeOptionalName(target.meta.tableName);\n  if (explicitTableName) {\n    return explicitTableName;\n  }\n\n  const schemaName = normalizeOptionalName(\n    target.meta.schema ?? options.fallbackSchema\n  );\n  const modelName = normalizeOptionalName(\n    target.meta.model ?? options.fallbackModel\n  );\n\n  if (!modelName) {\n    throw new Error(\n      \"Athena model target is missing meta.model or meta.tableName. Provide one of those before calling from(model).\"\n    );\n  }\n\n  return schemaName ? `${schemaName}.${modelName}` : modelName;\n}\n","/**\n * Shared query-string builder for path + optional object of primitives.\n */\n\nexport interface AppendHttpQueryOptions {\n  /**\n   * When true, skip empty-string values (admin/backup style).\n   * Default: only skip null/undefined.\n   */\n  skipEmptyString?: boolean;\n}\n\n/**\n * Append `query` object as `?k=v` on `path`. Omits null/undefined (and empty\n * strings when `skipEmptyString` is set).\n */\nexport function appendHttpQuery(\n  path: string,\n  query?: object,\n  options?: AppendHttpQueryOptions\n): string {\n  if (!query) {\n    return path;\n  }\n  const params = new URLSearchParams();\n  for (const [key, value] of Object.entries(query)) {\n    if (value === undefined || value === null) {\n      continue;\n    }\n    if (options?.skipEmptyString && value === \"\") {\n      continue;\n    }\n    params.set(key, String(value));\n  }\n  const text = params.toString();\n  return text ? `${path}?${text}` : path;\n}\n","/**\n * Shared Athena storage error types and factory.\n *\n * Extracted from `module.ts` so `backup.ts` (and other storage submodules) can\n * throw real {@link AthenaStorageError} instances with `onError` observers\n * without a circular import against the storage module surface.\n */\n\nimport type {\n  AthenaErrorCategory,\n  AthenaErrorCode,\n  AthenaErrorKind,\n  NormalizedAthenaError,\n} from \"../auxiliaries.ts\";\nimport { normalizeAthenaError } from \"../auxiliaries.ts\";\nimport type {\n  AthenaGatewayEndpointPath,\n  AthenaGatewayErrorCode,\n  AthenaGatewayMethod,\n} from \"../gateway/types.ts\";\n\nexport type AthenaStorageErrorHandler = (\n  error: AthenaStorageError\n) => void | Promise<void>;\n\nexport type AthenaStorageErrorCode =\n  | \"INVALID_URL\"\n  | \"NETWORK_ERROR\"\n  | \"HTTP_ERROR\"\n  | \"INVALID_JSON\"\n  | \"INVALID_ATHENA_ENVELOPE\"\n  | \"UNKNOWN_ERROR\";\n\nexport const AthenaStorageErrorCode = {\n  HttpError: \"HTTP_ERROR\",\n  InvalidAthenaEnvelope: \"INVALID_ATHENA_ENVELOPE\",\n  InvalidJson: \"INVALID_JSON\",\n  InvalidUrl: \"INVALID_URL\",\n  NetworkError: \"NETWORK_ERROR\",\n  UnknownError: \"UNKNOWN_ERROR\",\n} as const satisfies Record<string, AthenaStorageErrorCode>;\n\nexport interface AthenaStorageErrorDetails {\n  athenaCode: AthenaErrorCode;\n  category: AthenaErrorCategory;\n  cause?: string;\n  code: AthenaStorageErrorCode;\n  endpoint: AthenaGatewayEndpointPath;\n  hint?: string;\n  kind: AthenaErrorKind;\n  message: string;\n  method: AthenaGatewayMethod;\n  raw: unknown;\n  requestId?: string;\n  retryable: boolean;\n  status: number;\n}\n\nexport interface AthenaStorageErrorInput {\n  cause?: unknown;\n  code: AthenaStorageErrorCode;\n  endpoint: AthenaGatewayEndpointPath;\n  hint?: string;\n  message: string;\n  method: AthenaGatewayMethod;\n  raw?: unknown;\n  requestId?: string;\n  status: number;\n}\n\n/** Minimal runtime knobs needed to notify error observers. */\nexport interface AthenaStorageErrorRuntimeOptions {\n  onError?: AthenaStorageErrorHandler;\n}\n\n/** Route row used only for normalized-error `operation` labels. */\nexport interface StorageErrorRouteRef {\n  method: string;\n  name: string;\n  path: string;\n}\n\nlet storageErrorRoutes: readonly StorageErrorRouteRef[] = [];\n\n/**\n * Bind storage SDK route names so normalized errors can resolve\n * `operation` (e.g. `listStorageFiles`). Called once from `module.ts`\n * after `storageSdkManifest` is defined.\n */\nexport function bindStorageErrorRoutes(\n  routes: readonly StorageErrorRouteRef[]\n): void {\n  storageErrorRoutes = routes;\n}\n\nfunction causeToString(cause: unknown): string | undefined {\n  if (cause === undefined || cause === null) {\n    return;\n  }\n  if (typeof cause === \"string\") {\n    return cause;\n  }\n  if (cause instanceof Error && cause.message.trim()) {\n    return cause.message.trim();\n  }\n  try {\n    return JSON.stringify(cause);\n  } catch {\n    return String(cause);\n  }\n}\n\nfunction storageGatewayCode(\n  code: AthenaStorageErrorCode\n): AthenaGatewayErrorCode {\n  if (code === \"INVALID_URL\") {\n    return \"INVALID_URL\";\n  }\n  if (code === \"NETWORK_ERROR\") {\n    return \"NETWORK_ERROR\";\n  }\n  if (code === \"INVALID_JSON\" || code === \"INVALID_ATHENA_ENVELOPE\") {\n    return \"INVALID_JSON\";\n  }\n  if (code === \"HTTP_ERROR\") {\n    return \"HTTP_ERROR\";\n  }\n  return \"UNKNOWN_ERROR\";\n}\n\nfunction storageOperationFromEndpoint(\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod\n): string {\n  const endpointPath = String(endpoint).split(\"?\")[0];\n  for (const candidate of storageErrorRoutes) {\n    if (candidate.method !== method) {\n      continue;\n    }\n    const pattern = `^${candidate.path.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\").replace(/\\\\\\{[^/]+\\\\\\}/g, \"[^/]+\")}$`;\n    if (new RegExp(pattern).test(endpointPath)) {\n      return candidate.name;\n    }\n  }\n  return `storage:${method.toLowerCase()}`;\n}\n\nfunction normalizeStorageErrorInput(\n  input: AthenaStorageErrorInput\n): NormalizedAthenaError {\n  return normalizeAthenaError(\n    {\n      data: null,\n      error: {\n        gatewayCode: storageGatewayCode(input.code),\n        message: input.message,\n        raw: input.raw ?? input.cause ?? null,\n        status: input.status,\n      },\n      errorDetails: {\n        cause: causeToString(input.cause),\n        code: storageGatewayCode(input.code),\n        endpoint: input.endpoint,\n        hint: input.hint,\n        message: input.message,\n        method: input.method,\n        requestId: input.requestId,\n        status: input.status,\n      },\n      raw: input.raw ?? input.cause ?? null,\n      status: input.status,\n    },\n    { operation: storageOperationFromEndpoint(input.endpoint, input.method) }\n  );\n}\n\nexport class AthenaStorageError extends Error {\n  readonly code: AthenaStorageErrorCode;\n  readonly athenaCode: AthenaErrorCode;\n  readonly kind: AthenaErrorKind;\n  readonly category: AthenaErrorCategory;\n  readonly retryable: boolean;\n  readonly status: number;\n  readonly endpoint: AthenaGatewayEndpointPath;\n  readonly method: AthenaGatewayMethod;\n  readonly requestId?: string;\n  readonly hint?: string;\n  readonly causeDetail?: string;\n  readonly raw: unknown;\n  readonly normalized: NormalizedAthenaError;\n  readonly __athenaNormalizedError: NormalizedAthenaError;\n\n  constructor(input: AthenaStorageErrorInput) {\n    super(input.message, { cause: input.cause });\n    this.name = \"AthenaStorageError\";\n    this.code = input.code;\n    this.status = input.status;\n    this.endpoint = input.endpoint;\n    this.method = input.method;\n    this.requestId = input.requestId;\n    this.hint = input.hint;\n    this.causeDetail = causeToString(input.cause);\n    this.raw = input.raw ?? null;\n    this.normalized = normalizeStorageErrorInput(input);\n    this.__athenaNormalizedError = this.normalized;\n    this.athenaCode = this.normalized.code;\n    this.kind = this.normalized.kind;\n    this.category = this.normalized.category;\n    this.retryable = this.normalized.retryable;\n    Object.defineProperty(this, \"__athenaNormalizedError\", {\n      configurable: false,\n      enumerable: false,\n      value: this.normalized,\n      writable: false,\n    });\n  }\n\n  toDetails(): AthenaStorageErrorDetails {\n    return {\n      athenaCode: this.athenaCode,\n      category: this.category,\n      cause: this.causeDetail,\n      code: this.code,\n      endpoint: this.endpoint,\n      hint: this.hint,\n      kind: this.kind,\n      message: this.message,\n      method: this.method,\n      raw: this.raw,\n      requestId: this.requestId,\n      retryable: this.retryable,\n      status: this.status,\n    };\n  }\n}\n\nexport function createAthenaStorageError(\n  input: AthenaStorageErrorInput\n): AthenaStorageError {\n  return new AthenaStorageError(input);\n}\n\nfunction readOnErrorHandler(\n  source: unknown\n): AthenaStorageErrorHandler | undefined {\n  if (!source || typeof source !== \"object\") {\n    return;\n  }\n  const handler = (source as { onError?: unknown }).onError;\n  return typeof handler === \"function\"\n    ? (handler as AthenaStorageErrorHandler)\n    : undefined;\n}\n\n/**\n * Notify runtime + per-call `onError` observers.\n * `options` is intentionally wide so gateway-resolved call options\n * (without `onError`) remain assignable at call sites.\n */\nexport async function notifyStorageError(\n  error: AthenaStorageError,\n  options: unknown,\n  runtimeOptions: AthenaStorageErrorRuntimeOptions | undefined\n): Promise<void> {\n  const handlers = [\n    runtimeOptions?.onError,\n    readOnErrorHandler(options),\n  ].filter(\n    (handler): handler is AthenaStorageErrorHandler =>\n      typeof handler === \"function\"\n  );\n  for (const handler of handlers) {\n    try {\n      await handler(error);\n    } catch {\n      // Error observers must not mask the original storage failure.\n    }\n  }\n}\n\nexport async function rejectStorageError(\n  input: AthenaStorageErrorInput,\n  options: unknown,\n  runtimeOptions: AthenaStorageErrorRuntimeOptions | undefined\n): Promise<never> {\n  const error = createAthenaStorageError(input);\n  await notifyStorageError(error, options, runtimeOptions);\n  throw error;\n}\n","/**\n * Admin backup surface exposed under `client.storage.backup.*`.\n *\n * Routes live at `/admin/backups*` (admin / elevated key). Archives land in the\n * server-configured S3 or R2 profile (`ATHENA_BACKUP_S3_*` including provider + account_id).\n *\n * HTTP transport is injected from `module.ts` (`callStorageEndpoint`) so backup\n * failures share real {@link AthenaStorageError}, request ids, and `onError`.\n */\n\nimport type { AthenaGatewayClient } from \"../gateway/client.ts\";\nimport type { AthenaGatewayMethod } from \"../gateway/types.ts\";\nimport { appendHttpQuery } from \"../http/append-query.ts\";\nimport { createAthenaStorageError } from \"./errors.ts\";\nimport type {\n  AthenaStorageCallOptions,\n  AthenaStorageClientConfig,\n} from \"./module.ts\";\n\nexport type BackupRecoveryStrategy = \"none\" | \"repair_missing_role_oids\";\n\nexport interface StorageBackupRecord {\n  client_name: string;\n  completed_at: string;\n  execution_daemon_id?: string | null;\n  job_id: number;\n  /** Alias of s3_key for convenience */\n  key: string;\n  label?: string | null;\n  s3_bucket: string;\n  s3_key: string;\n  size_bytes: number;\n}\n\nexport interface StorageBackupListPage {\n  backups: StorageBackupRecord[];\n  next_cursor: string | null;\n}\n\nexport interface StorageBackupListQuery {\n  client_name?: string;\n  cursor?: string | null;\n  limit?: number;\n}\n\nexport interface StorageBackupCreateRequest {\n  client_name: string;\n  label?: string;\n  pg_uri?: string;\n  recovery_strategy?: BackupRecoveryStrategy;\n}\n\nexport interface StorageBackupQueuedJob {\n  client_name: string;\n  job_id: number;\n  key?: string;\n  status: string;\n}\n\nexport interface StorageBackupRestoreRequest {\n  client_name: string;\n  pg_uri?: string;\n}\n\nexport interface StorageBackupJob {\n  client_name?: string | null;\n  completed_at?: string | null;\n  created_at?: string;\n  error_message?: string | null;\n  id: number;\n  job_type: string;\n  label?: string | null;\n  progress_pct?: number | null;\n  progress_stage?: string | null;\n  s3_bucket?: string | null;\n  s3_key?: string | null;\n  status: string;\n  updated_at?: string;\n  [key: string]: unknown;\n}\n\nexport interface StorageBackupSchedule {\n  client_name: string;\n  enabled?: boolean;\n  frequency?: string;\n  id: number;\n  label?: string | null;\n  [key: string]: unknown;\n}\n\nexport interface StorageBackupScheduleCreateRequest {\n  client_name: string;\n  day_of_month?: number;\n  day_of_week?: number;\n  enabled?: boolean;\n  execution_daemon_id?: string;\n  frequency: string;\n  label?: string;\n  time_of_day?: string;\n  [key: string]: unknown;\n}\n\nexport interface AthenaStorageBackupNamespace {\n  /** `POST /admin/backups` — queue a backup job */\n  create: (\n    input: StorageBackupCreateRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageBackupQueuedJob>;\n  /** `DELETE /admin/backups/{key}` */\n  delete: (key: string, options?: AthenaStorageCallOptions) => Promise<void>;\n  /** Build a browser download URL for `GET /admin/backups/{key}/download` */\n  downloadUrl: (key: string, options?: { apiKey?: string }) => string;\n  jobs: {\n    list: (\n      query?: { limit?: number; status?: string; client_name?: string },\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageBackupJob[]>;\n    get: (\n      jobId: number | string,\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageBackupJob>;\n    cancel: (\n      jobId: number | string,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    delete: (\n      jobId: number | string,\n      options?: AthenaStorageCallOptions\n    ) => Promise<void>;\n    /** Presigned/console open link for the job archive object (S3 or R2) */\n    openObjectUrl: (\n      jobId: number | string,\n      options?: AthenaStorageCallOptions\n    ) => Promise<string>;\n  };\n  /** `GET /admin/backups` */\n  list: (\n    query?: StorageBackupListQuery,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageBackupListPage>;\n  /** `POST /admin/backups/{key}/restore` */\n  restore: (\n    key: string,\n    input: StorageBackupRestoreRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageBackupQueuedJob>;\n  schedules: {\n    list: (\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageBackupSchedule[]>;\n    create: (\n      input: StorageBackupScheduleCreateRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageBackupSchedule>;\n    update: (\n      id: number | string,\n      input: Partial<StorageBackupScheduleCreateRequest>,\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageBackupSchedule>;\n    delete: (\n      id: number | string,\n      options?: AthenaStorageCallOptions\n    ) => Promise<void>;\n  };\n}\n\n/**\n * Shared JSON caller injected by `createStorageModule` — typically\n * `callStorageEndpoint` with envelope `\"raw\"`. Avoids a parallel fetch stack\n * and circular imports with `module.ts`.\n */\nexport type StorageBackupJsonCaller = <T>(\n  path: string,\n  method: AthenaGatewayMethod,\n  payload: unknown | undefined,\n  options: AthenaStorageCallOptions | undefined\n) => Promise<T>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction appendQuery(path: string, query?: object): string {\n  return appendHttpQuery(path, query, { skipEmptyString: true });\n}\n\n/** Soft-unwrap Athena `{ data }` envelopes while accepting raw admin payloads. */\nfunction unwrapAthenaData<T>(payload: unknown): T {\n  if (isRecord(payload) && \"data\" in payload) {\n    return payload.data as T;\n  }\n  return payload as T;\n}\n\nfunction requireKey(key: string, method: AthenaGatewayMethod): string {\n  const trimmed = key.trim();\n  if (!trimmed || trimmed === \"undefined\" || trimmed === \"null\") {\n    throw createAthenaStorageError({\n      code: \"HTTP_ERROR\",\n      endpoint: \"/admin/backups/{key}\",\n      message: \"Backup object key is required\",\n      method,\n      status: 400,\n    });\n  }\n  return trimmed;\n}\n\n/**\n * Create the `storage.backup` namespace bound to an Athena gateway client.\n *\n * @param callJson - Shared storage JSON transport (from `callStorageEndpoint`).\n */\nexport function createStorageBackupModule(\n  gateway: AthenaGatewayClient,\n  _runtimeOptions: AthenaStorageClientConfig | undefined,\n  callJson: StorageBackupJsonCaller\n): AthenaStorageBackupNamespace {\n  const resolvedBaseUrl = () =>\n    String(gateway.baseUrl ?? \"\").replace(/\\/+$/, \"\");\n\n  /** Product-level unwrap only — HTTP/error path is the injected shared caller. */\n  async function callAdminJson<T>(\n    path: string,\n    method: AthenaGatewayMethod,\n    payload: unknown | undefined,\n    options: AthenaStorageCallOptions | undefined\n  ): Promise<T> {\n    const parsed = await callJson<unknown>(path, method, payload, options);\n    return unwrapAthenaData<T>(parsed);\n  }\n\n  return {\n    async create(input, options) {\n      const data = await callAdminJson<{\n        job_id?: number;\n        client_name?: string;\n        status?: string;\n      }>(\"/admin/backups\", \"POST\", input, options);\n      return {\n        client_name: String(data?.client_name ?? input.client_name),\n        job_id: Number(data?.job_id ?? 0),\n        status: String(data?.status ?? \"pending\"),\n      };\n    },\n\n    async delete(key, options) {\n      const backupKey = requireKey(key, \"DELETE\");\n      await callAdminJson(\n        `/admin/backups/${encodeURIComponent(backupKey)}`,\n        \"DELETE\",\n        undefined,\n        options\n      );\n    },\n\n    downloadUrl(key, options) {\n      const backupKey = requireKey(key, \"GET\");\n      const base = `${resolvedBaseUrl()}/admin/backups/${encodeURIComponent(backupKey)}/download`;\n      return options?.apiKey\n        ? `${base}?api_key=${encodeURIComponent(options.apiKey)}`\n        : base;\n    },\n\n    jobs: {\n      async cancel(jobId, options) {\n        return callAdminJson(\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}/cancel`,\n          \"POST\",\n          {},\n          options\n        );\n      },\n      async delete(jobId, options) {\n        await callAdminJson(\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}`,\n          \"DELETE\",\n          undefined,\n          options\n        );\n      },\n      async get(jobId, options) {\n        return callAdminJson(\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}`,\n          \"GET\",\n          undefined,\n          options\n        );\n      },\n      async list(query, options) {\n        const path = appendQuery(\"/admin/backups/jobs\", query ?? {});\n        const data = await callAdminJson<\n          StorageBackupJob[] | { jobs?: StorageBackupJob[] }\n        >(path, \"GET\", undefined, options);\n        if (Array.isArray(data)) {\n          return data;\n        }\n        if (isRecord(data) && Array.isArray(data.jobs)) {\n          return data.jobs;\n        }\n        return [];\n      },\n      async openObjectUrl(jobId, options) {\n        const data = await callAdminJson<{ url?: string }>(\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}/s3-open`,\n          \"GET\",\n          undefined,\n          options\n        );\n        return String(data?.url ?? \"\");\n      },\n    },\n    async list(query, options) {\n      const path = appendQuery(\"/admin/backups\", {\n        client_name: query?.client_name,\n        cursor: query?.cursor ?? undefined,\n        limit: query?.limit ?? 10,\n      });\n      const data = await callAdminJson<{\n        backups?: Array<Omit<StorageBackupRecord, \"key\"> & { key?: string }>;\n        next_cursor?: string | null;\n      }>(path, \"GET\", undefined, options);\n\n      const backups = (data?.backups ?? []).map((row) => ({\n        ...row,\n        key: row.key ?? row.s3_key,\n      }));\n      return {\n        backups,\n        next_cursor: data?.next_cursor ?? null,\n      };\n    },\n\n    async restore(key, input, options) {\n      const backupKey = requireKey(key, \"POST\");\n      const path = `/admin/backups/${encodeURIComponent(backupKey)}/restore`;\n      const data = await callAdminJson<{\n        job_id?: number;\n        key?: string;\n        client_name?: string;\n        status?: string;\n      }>(path, \"POST\", input, options);\n      return {\n        client_name: String(data?.client_name ?? input.client_name),\n        job_id: Number(data?.job_id ?? 0),\n        key: String(data?.key ?? backupKey),\n        status: String(data?.status ?? \"pending\"),\n      };\n    },\n\n    schedules: {\n      async create(input, options) {\n        return callAdminJson(\n          \"/admin/backups/schedules\",\n          \"POST\",\n          input,\n          options\n        );\n      },\n      async delete(id, options) {\n        await callAdminJson(\n          `/admin/backups/schedules/${encodeURIComponent(String(id))}`,\n          \"DELETE\",\n          undefined,\n          options\n        );\n      },\n      async list(options) {\n        const data = await callAdminJson<\n          StorageBackupSchedule[] | { schedules?: StorageBackupSchedule[] }\n        >(\"/admin/backups/schedules\", \"GET\", undefined, options);\n        if (Array.isArray(data)) {\n          return data;\n        }\n        if (isRecord(data) && Array.isArray(data.schedules)) {\n          return data.schedules;\n        }\n        return [];\n      },\n      async update(id, input, options) {\n        return callAdminJson(\n          `/admin/backups/schedules/${encodeURIComponent(String(id))}`,\n          \"PATCH\",\n          input,\n          options\n        );\n      },\n    },\n  };\n}\n","/**\n * Shared XHR PUT helper for browser uploads (presigned + direct SigV4).\n * Keeps progress/abort/status handling consistent across file and direct-upload.\n */\n\nexport type AthenaStorageXhrPutBody =\n  | Blob\n  | ArrayBuffer\n  | ArrayBufferView\n  | ReadableStream<Uint8Array>\n  | null\n  | undefined;\n\nexport interface AthenaStorageXhrPutOptions {\n  body: AthenaStorageXhrPutBody;\n  /** Final progress loaded value on success (defaults to 0 when unknown). */\n  completeLoaded?: number;\n  headers: Headers | Record<string, string>;\n  onProgress: (progress: { loaded: number }) => void;\n  /** Error message prefix for status/network failures. */\n  operationLabel?: string;\n  signal?: AbortSignal;\n  url: string;\n}\n\ninterface AthenaStorageXhrLike {\n  abort: () => void;\n  getAllResponseHeaders: () => string;\n  onabort: (() => void) | null;\n  onerror: (() => void) | null;\n  onload: (() => void) | null;\n  open: (method: string, url: string) => void;\n  readonly response: unknown;\n  send: (body: unknown) => void;\n  setRequestHeader: (key: string, value: string) => void;\n  readonly status: number;\n  readonly statusText: string;\n  readonly upload: {\n    onprogress: ((event: { loaded: number }) => void) | null;\n  };\n}\n\ndeclare const XMLHttpRequest: (new () => AthenaStorageXhrLike) | undefined;\n\n/**\n * True when the runtime exposes XMLHttpRequest (browsers).\n */\nexport function canUseStorageXhrPut(): boolean {\n  return typeof XMLHttpRequest !== \"undefined\";\n}\n\n/**\n * PUT `body` to `url` with XHR so `upload.onprogress` works.\n * Rejects with AbortError on abort; network/status errors include `operationLabel`.\n */\nexport function putStorageBodyWithXhr(\n  options: AthenaStorageXhrPutOptions\n): Promise<Response> {\n  const label = options.operationLabel ?? \"athena.storage.file.upload\";\n  const Xhr = XMLHttpRequest;\n  if (Xhr === undefined) {\n    return Promise.reject(\n      new Error(`${label} requires XMLHttpRequest in this runtime`)\n    );\n  }\n\n  return new Promise((resolve, reject) => {\n    const xhr = new Xhr();\n    const abort = () => xhr.abort();\n    xhr.open(\"PUT\", options.url);\n    if (options.headers instanceof Headers) {\n      options.headers.forEach((value, key) => {\n        xhr.setRequestHeader(key, value);\n      });\n    } else {\n      for (const [key, value] of Object.entries(options.headers)) {\n        xhr.setRequestHeader(key, value);\n      }\n    }\n    xhr.upload.onprogress = (event) => {\n      options.onProgress({ loaded: event.loaded });\n    };\n    xhr.onload = () => {\n      options.signal?.removeEventListener(\"abort\", abort);\n      if (xhr.status < 200 || xhr.status >= 300) {\n        reject(new Error(`${label} failed with status ${xhr.status}`));\n        return;\n      }\n      options.onProgress({\n        loaded: options.completeLoaded ?? 0,\n      });\n      resolve(\n        new Response(\n          xhr.response as ConstructorParameters<typeof Response>[0],\n          {\n            headers: parseXhrHeaders(xhr.getAllResponseHeaders()),\n            status: xhr.status,\n            statusText: xhr.statusText,\n          }\n        )\n      );\n    };\n    xhr.onerror = () => {\n      options.signal?.removeEventListener(\"abort\", abort);\n      reject(new Error(`${label} failed with a network error`));\n    };\n    xhr.onabort = () => {\n      options.signal?.removeEventListener(\"abort\", abort);\n      reject(new DOMException(\"Upload aborted\", \"AbortError\"));\n    };\n    if (options.signal) {\n      if (options.signal.aborted) {\n        abort();\n        return;\n      }\n      options.signal.addEventListener(\"abort\", abort, { once: true });\n    }\n    xhr.send(options.body);\n  });\n}\n\n/**\n * Parse `XMLHttpRequest#getAllResponseHeaders()` into a Headers object.\n */\nexport function parseXhrHeaders(rawHeaders: string): Headers {\n  const headers = new Headers();\n  for (const line of rawHeaders.trim().split(/[\\r\\n]+/)) {\n    const index = line.indexOf(\":\");\n    if (index === -1) {\n      continue;\n    }\n    headers.set(line.slice(0, index).trim(), line.slice(index + 1).trim());\n  }\n  return headers;\n}\n","import type {\n  AthenaStorageDirectUploadConfig,\n  AthenaStoragePutBody,\n} from \"./module.ts\";\nimport { canUseStorageXhrPut, putStorageBodyWithXhr } from \"./xhr-put.ts\";\n\ninterface DirectUploadProgress {\n  loaded: number;\n}\n\nconst SERVICE = \"s3\";\nconst TERMINATOR = \"aws4_request\";\n\nexport async function putDirectStorageUploadBody(\n  config: AthenaStorageDirectUploadConfig,\n  bucket: string | undefined,\n  storageKey: string,\n  body: AthenaStoragePutBody,\n  uploadHeaders: Record<string, string>,\n  signal: AbortSignal | undefined,\n  onProgress: (progress: DirectUploadProgress) => void\n): Promise<Response> {\n  if (config.bucket && bucket && config.bucket !== bucket) {\n    throw new Error(\n      `athena.storage.file.upload direct mode bucket mismatch: configured ${config.bucket} but Athena returned ${bucket}`\n    );\n  }\n  const target = createDirectUploadTarget(config, bucket, storageKey);\n  const bytes = await bodyToArrayBuffer(body);\n  const payloadHash = await sha256Hex(bytes);\n  const headers = new Headers(uploadHeaders);\n  if (isBlobBody(body) && body.type && !headers.has(\"Content-Type\")) {\n    headers.set(\"Content-Type\", body.type);\n  }\n\n  const signed = await signDirectUploadRequest(\n    config,\n    target,\n    headers,\n    payloadHash\n  );\n  if (canUseStorageXhrPut()) {\n    return putStorageBodyWithXhr({\n      body,\n      completeLoaded: bodySize(body),\n      headers: signed.requestHeaders,\n      onProgress,\n      operationLabel: \"athena.storage.file.upload\",\n      signal,\n      url: target.toString(),\n    });\n  }\n\n  onProgress({ loaded: 0 });\n  const response = await fetch(target, {\n    body: body as RequestInit[\"body\"],\n    headers: signed.requestHeaders,\n    method: \"PUT\",\n    signal,\n  });\n  if (!response.ok) {\n    throw new Error(\n      `athena.storage.file.upload failed with status ${response.status}`\n    );\n  }\n  onProgress({ loaded: bytes.byteLength });\n  return response;\n}\n\nfunction createDirectUploadTarget(\n  config: AthenaStorageDirectUploadConfig,\n  bucket: string | undefined,\n  storageKey: string\n): URL {\n  const resolvedBucket = config.bucket ?? bucket;\n  if (!resolvedBucket?.trim()) {\n    throw new Error(\n      \"athena.storage.file.upload direct mode requires a bucket in storage.directUpload or the server upload response\"\n    );\n  }\n  if (!storageKey.trim()) {\n    throw new Error(\n      \"athena.storage.file.upload direct mode requires a storage key\"\n    );\n  }\n\n  let endpoint: URL;\n  try {\n    endpoint = new URL(config.endpoint);\n  } catch (error) {\n    throw new Error(\n      `athena.storage.file.upload direct mode received an invalid endpoint: ${error instanceof Error ? error.message : String(error)}`,\n      { cause: error }\n    );\n  }\n  if (endpoint.search || endpoint.hash) {\n    throw new Error(\n      \"athena.storage.file.upload direct mode endpoint must not contain a query or hash\"\n    );\n  }\n\n  const endpointPath = endpoint.pathname.replace(/\\/+$/, \"\");\n  const pathParts =\n    config.forcePathStyle === false\n      ? [endpointPath, storageKey]\n      : [endpointPath, resolvedBucket, storageKey];\n  if (config.forcePathStyle === false) {\n    endpoint.hostname = `${resolvedBucket}.${endpoint.hostname}`;\n  }\n  endpoint.pathname = pathParts\n    .filter(Boolean)\n    .flatMap((part) => part.split(\"/\"))\n    .map(awsEncode)\n    .join(\"/\")\n    .replace(/^([^/])/, \"/$1\");\n  return endpoint;\n}\n\nasync function signDirectUploadRequest(\n  config: AthenaStorageDirectUploadConfig,\n  target: URL,\n  inputHeaders: Headers,\n  payloadHash: string\n): Promise<{ requestHeaders: Record<string, string> }> {\n  const accessKeyId = config.accessKeyId.trim();\n  const secretAccessKey = config.secretAccessKey.trim();\n  if (!(accessKeyId && secretAccessKey)) {\n    throw new Error(\n      \"athena.storage.file.upload direct mode requires accessKeyId and secretAccessKey\"\n    );\n  }\n\n  const now = new Date();\n  const amzDate = formatAmzDate(now);\n  const shortDate = amzDate.slice(0, 8);\n  const region = config.region?.trim() || \"auto\";\n  const headers: Record<string, string> = {};\n  inputHeaders.forEach((value, key) => {\n    if (key.toLowerCase() !== \"authorization\" && key.toLowerCase() !== \"host\") {\n      headers[key.toLowerCase()] = value.trim().replace(/\\s+/g, \" \");\n    }\n  });\n  headers[\"x-amz-content-sha256\"] = payloadHash;\n  headers[\"x-amz-date\"] = amzDate;\n  if (config.sessionToken?.trim()) {\n    headers[\"x-amz-security-token\"] = config.sessionToken.trim();\n  }\n\n  const canonicalHeaders = Object.keys(headers)\n    .sort()\n    .map((key) => `${key}:${headers[key]}\\n`)\n    .join(\"\");\n  const signedHeaders = Object.keys(headers).sort().join(\";\");\n  const canonicalRequest = [\n    \"PUT\",\n    target.pathname,\n    \"\",\n    `host:${target.host}\\n${canonicalHeaders}`,\n    `host;${signedHeaders}`,\n    payloadHash,\n  ].join(\"\\n\");\n  const credentialScope = `${shortDate}/${region}/${SERVICE}/${TERMINATOR}`;\n  const stringToSign = [\n    \"AWS4-HMAC-SHA256\",\n    amzDate,\n    credentialScope,\n    await sha256Hex(canonicalRequest),\n  ].join(\"\\n\");\n  const dateKey = await hmac(`AWS4${secretAccessKey}`, shortDate);\n  const regionKey = await hmac(dateKey, region);\n  const serviceKey = await hmac(regionKey, SERVICE);\n  const signingKey = await hmac(serviceKey, TERMINATOR);\n  const signature = await hmacHex(signingKey, stringToSign);\n  headers.authorization = `AWS4-HMAC-SHA256 Credential=${accessKeyId}/${credentialScope}, SignedHeaders=host;${signedHeaders}, Signature=${signature}`;\n\n  return { requestHeaders: headers };\n}\n\nfunction isBlobBody(body: AthenaStoragePutBody): body is Blob {\n  return typeof Blob !== \"undefined\" && body instanceof Blob;\n}\n\nasync function bodyToArrayBuffer(\n  body: AthenaStoragePutBody\n): Promise<ArrayBuffer> {\n  if (isBlobBody(body)) {\n    return body.arrayBuffer();\n  }\n  if (body instanceof ArrayBuffer) {\n    return body;\n  }\n  if (ArrayBuffer.isView(body)) {\n    return body.buffer.slice(\n      body.byteOffset,\n      body.byteOffset + body.byteLength\n    ) as ArrayBuffer;\n  }\n  throw new Error(\n    \"athena.storage.file.upload direct mode does not support ReadableStream bodies\"\n  );\n}\n\nfunction bodySize(body: AthenaStoragePutBody): number {\n  if (isBlobBody(body)) {\n    return body.size;\n  }\n  if (body instanceof ArrayBuffer) {\n    return body.byteLength;\n  }\n  if (ArrayBuffer.isView(body)) {\n    return body.byteLength;\n  }\n  return 0;\n}\n\nfunction awsEncode(value: string): string {\n  return encodeURIComponent(value).replace(\n    /[!'()*]/g,\n    (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`\n  );\n}\n\nfunction formatAmzDate(date: Date): string {\n  return date.toISOString().replace(/[:-]|\\.\\d{3}/g, \"\");\n}\n\nasync function sha256Hex(value: string | ArrayBuffer): Promise<string> {\n  const bytes =\n    typeof value === \"string\" ? new TextEncoder().encode(value) : value;\n  const digest = await crypto.subtle.digest(\"SHA-256\", bytes);\n  return toHex(new Uint8Array(digest));\n}\n\nasync function hmac(\n  key: string | ArrayBuffer,\n  value: string\n): Promise<ArrayBuffer> {\n  const keyBytes =\n    typeof key === \"string\" ? new TextEncoder().encode(key) : key;\n  const cryptoKey = await crypto.subtle.importKey(\n    \"raw\",\n    keyBytes,\n    { hash: \"SHA-256\", name: \"HMAC\" },\n    false,\n    [\"sign\"]\n  );\n  return crypto.subtle.sign(\"HMAC\", cryptoKey, new TextEncoder().encode(value));\n}\n\nasync function hmacHex(key: ArrayBuffer, value: string): Promise<string> {\n  return toHex(new Uint8Array(await hmac(key, value)));\n}\n\nfunction toHex(bytes: Uint8Array): string {\n  return Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\n    \"\"\n  );\n}\n","import { putDirectStorageUploadBody } from \"./direct-upload.ts\";\nimport type {\n  AthenaStorageBinaryCallOptions,\n  AthenaStorageCallOptions,\n  AthenaStorageDirectUploadConfig,\n  CreateStorageUploadUrlRequest,\n  GetStorageFileUrlQuery,\n  ListStorageFilesRequest,\n  ManagedFileRecord,\n  StorageBatchUploadUrlResponse,\n  StorageFileMutationResponse,\n  StorageListFilesResponse,\n  StorageMultipartAbortRequest,\n  StorageMultipartCompleteRequest,\n  StorageMultipartCreateRequest,\n  StorageMultipartSignPartRequest,\n  StorageServerSideEncryptionOptions,\n  StorageUploadUrlResponse,\n} from \"./module.ts\";\nimport {\n  type AthenaStorageXhrPutBody,\n  canUseStorageXhrPut,\n  putStorageBodyWithXhr,\n} from \"./xhr-put.ts\";\n\n/** Files at or above this size use multipart unless `forceSinglePut` is set. */\nexport const DEFAULT_MULTIPART_THRESHOLD_BYTES = 32 * 1024 * 1024;\n/** Chunk size for multipart uploads (S3 requires >= 5 MiB except the last part). */\nexport const DEFAULT_MULTIPART_PART_SIZE_BYTES = 8 * 1024 * 1024;\nconst MIN_MULTIPART_PART_SIZE_BYTES = 5 * 1024 * 1024;\n\nexport type AthenaStorageTemplateValue =\n  | string\n  | number\n  | boolean\n  | null\n  | undefined;\nexport type AthenaStorageTemplateVars = Record<\n  string,\n  AthenaStorageTemplateValue\n>;\nexport type AthenaStorageEnv = Record<string, string | undefined>;\nexport type AthenaStorageUploadHeaders = ConstructorParameters<\n  typeof Headers\n>[0];\nexport type AthenaStoragePrefixPath =\n  | string\n  | ((context: AthenaStoragePathContext) => string | null | undefined);\n\nexport interface AthenaStoragePathContext {\n  env: AthenaStorageEnv;\n  organization_id?: string;\n  organizationId?: string;\n  resource_id?: string;\n  resourceId?: string;\n  user_id?: string;\n  userId?: string;\n  vars: AthenaStorageTemplateVars;\n}\n\nexport interface AthenaStorageFileConfig {\n  directUpload?: AthenaStorageDirectUploadConfig;\n  env?: AthenaStorageEnv;\n  /**\n   * Prefix applied by high-level file helpers before storage keys are sent to Athena.\n   * Supports tokens such as `{organization_id}`, `{organizationId}`, `{env.NODE_ENV}`,\n   * and `${ATHENA_STORAGE_PREFIX}`.\n   */\n  prefixPath?: AthenaStoragePrefixPath;\n  vars?: AthenaStorageTemplateVars;\n}\n\nexport type AthenaStorageUploadSource = Blob | ArrayBuffer | Uint8Array;\n\nexport interface AthenaStorageUploadConstraints {\n  allowedExtensions?: readonly string[];\n  extensions?: readonly string[];\n  maxFileSizeBytes?: number;\n  maxFileSizeMb?: number;\n  maxFiles?: number;\n}\n\nexport interface AthenaStorageUploadProgress {\n  aggregateLoaded: number;\n  aggregatePercent: number;\n  aggregateTotal: number;\n  fileCount: number;\n  fileIndex: number;\n  fileName: string;\n  loaded: number;\n  /** Present when the active file is uploading via multipart. */\n  multipart?: {\n    uploadId: string;\n    partNumber: number;\n    partCount: number;\n  };\n  percent: number;\n  phase: \"preparing\" | \"uploading\" | \"complete\";\n  total: number;\n}\n\nexport type AthenaStorageUploadProgressHandler = (\n  progress: AthenaStorageUploadProgress\n) => void;\n\nexport interface AthenaStorageFileUploadInput\n  extends AthenaStorageUploadConstraints,\n    StorageServerSideEncryptionOptions {\n  bucket?: string;\n  content_type?: string;\n  env?: AthenaStorageEnv;\n  fileName?: string;\n  files:\n    | AthenaStorageUploadSource\n    | ArrayLike<AthenaStorageUploadSource>\n    | readonly AthenaStorageUploadSource[];\n  /** Always use multipart even when the file is below the threshold. */\n  forceMultipart?: boolean;\n  /** Always use a single PUT even when the file exceeds the multipart threshold. */\n  forceSinglePut?: boolean;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  /** Override multipart chunk size (default 8 MiB, minimum 5 MiB). */\n  multipartPartSizeBytes?: number;\n  /** Override auto-multipart threshold (default 32 MiB). */\n  multipartThresholdBytes?: number;\n  name?: string;\n  onProgress?: AthenaStorageUploadProgressHandler;\n  organization_id?: string;\n  organizationId?: string;\n  original_name?: string;\n  prefixPath?: AthenaStoragePrefixPath;\n  public?: boolean;\n  resource_id?: string;\n  resourceId?: string;\n  s3_id: string;\n  storage_key?: string;\n  storageKey?: string;\n  storageKeyTemplate?: string;\n  uploadHeaders?: AthenaStorageUploadHeaders;\n  user_id?: string;\n  userId?: string;\n  vars?: AthenaStorageTemplateVars;\n}\n\nexport interface AthenaStorageUploadedFile {\n  file: ManagedFileRecord;\n  fileName: string;\n  response: Response;\n  source: AthenaStorageUploadSource;\n  storage_key: string;\n  upload: StorageUploadUrlResponse[\"upload\"];\n}\n\nexport interface AthenaStorageFileUploadResult {\n  count: number;\n  files: AthenaStorageUploadedFile[];\n}\n\nexport interface AthenaStorageFileListInput\n  extends Omit<ListStorageFilesRequest, \"prefix\"> {\n  env?: AthenaStorageEnv;\n  organization_id?: string;\n  organizationId?: string;\n  prefix?: string;\n  prefixPath?: AthenaStoragePrefixPath;\n  resource_id?: string;\n  resourceId?: string;\n  user_id?: string;\n  userId?: string;\n  vars?: AthenaStorageTemplateVars;\n}\n\nexport interface AthenaStorageFileDownloadInput extends GetStorageFileUrlQuery {\n  fileId?: string;\n  fileIds?: readonly string[];\n}\n\nexport type AthenaStorageFileDeleteInput = string | readonly string[];\n\nexport interface AthenaStorageFileModule {\n  delete(\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ): Promise<StorageFileMutationResponse>;\n  delete(\n    fileIds: readonly string[],\n    options?: AthenaStorageCallOptions\n  ): Promise<StorageFileMutationResponse[]>;\n  download(\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions\n  ): Promise<Response>;\n  download(\n    fileIds: readonly string[],\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions\n  ): Promise<Response[]>;\n  download(\n    input: AthenaStorageFileDownloadInput,\n    options?: AthenaStorageBinaryCallOptions\n  ): Promise<Response | Response[]>;\n  list: (\n    input: AthenaStorageFileListInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageListFilesResponse>;\n  upload: (\n    input: AthenaStorageFileUploadInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<AthenaStorageFileUploadResult>;\n  uploadMultipart: (\n    input: AthenaStorageFileUploadInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<AthenaStorageFileUploadResult>;\n}\n\nexport interface AthenaStorageFileBaseModule {\n  createStorageUploadUrl: (\n    input: CreateStorageUploadUrlRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageUploadUrlResponse>;\n  createStorageUploadUrls: (\n    input: { files: CreateStorageUploadUrlRequest[] },\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageBatchUploadUrlResponse>;\n  deleteStorageFile: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  getStorageFileProxy: (\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions\n  ) => Promise<Response>;\n  listStorageFiles: (\n    input: ListStorageFilesRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageListFilesResponse>;\n}\n\nexport interface AthenaStorageMultipartClient {\n  abort: (\n    input: StorageMultipartAbortRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  complete: (\n    input: StorageMultipartCompleteRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  create: (\n    input: StorageMultipartCreateRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  signPart: (\n    input: StorageMultipartSignPartRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\ninterface NormalizedUploadSource {\n  contentType?: string;\n  fileName: string;\n  sizeBytes: number;\n  source: AthenaStorageUploadSource;\n}\n\ninterface ResolvedUploadRequest {\n  source: NormalizedUploadSource;\n  uploadRequest: CreateStorageUploadUrlRequest;\n}\n\nfunction mergeUploadHeaders(\n  serverHeaders: Record<string, string>,\n  inputHeaders: AthenaStorageUploadHeaders | undefined\n): Record<string, string> {\n  const headers: Record<string, string> = { ...serverHeaders };\n  new Headers(inputHeaders).forEach((value, key) => {\n    headers[key] = value;\n  });\n  return headers;\n}\n\nexport function createStorageFileModule(\n  base: AthenaStorageFileBaseModule,\n  config: AthenaStorageFileConfig = {},\n  multipart?: AthenaStorageMultipartClient\n): AthenaStorageFileModule {\n  const uploadSinglePut = async (\n    input: AthenaStorageFileUploadInput,\n    sources: NormalizedUploadSource[],\n    options?: AthenaStorageCallOptions\n  ): Promise<AthenaStorageFileUploadResult> => {\n    const uploadRequests = sources.map(\n      (source, index): ResolvedUploadRequest => {\n        const storageKey = resolveUploadStorageKey(\n          input,\n          source,\n          index,\n          options,\n          config\n        );\n        return {\n          source,\n          uploadRequest: {\n            bucket: input.bucket,\n            bucket_key_enabled: input.bucket_key_enabled,\n            content_type: input.content_type ?? source.contentType,\n            kms_key_id: input.kms_key_id,\n            metadata: input.metadata,\n            mime_type: input.mime_type ?? source.contentType,\n            name: input.name ?? source.fileName,\n            original_name: input.original_name ?? source.fileName,\n            public: input.public,\n            resource_id: input.resource_id ?? input.resourceId,\n            s3_id: input.s3_id,\n            server_side_encryption: input.server_side_encryption,\n            size_bytes: source.sizeBytes,\n            sse: input.sse,\n            ssekms_key_id: input.ssekms_key_id,\n            storage_key: storageKey,\n          },\n        };\n      }\n    );\n\n    input.onProgress?.(createProgressSnapshot(\"preparing\", sources, 0, 0, 0));\n\n    const uploadUrls =\n      uploadRequests.length === 1\n        ? [\n            await base.createStorageUploadUrl(\n              uploadRequests[0].uploadRequest,\n              options\n            ),\n          ]\n        : (\n            await base.createStorageUploadUrls(\n              { files: uploadRequests.map((request) => request.uploadRequest) },\n              options\n            )\n          ).files;\n\n    const aggregateLoaded = new Array(uploadRequests.length).fill(\n      0\n    ) as number[];\n    const uploaded: AthenaStorageUploadedFile[] = [];\n\n    for (let index = 0; index < uploadRequests.length; index += 1) {\n      const request = uploadRequests[index];\n      const uploadUrl = uploadUrls[index];\n      const aggregateProgress = (progress: { loaded: number }) => {\n        aggregateLoaded[index] = progress.loaded;\n        input.onProgress?.(\n          createProgressSnapshot(\n            \"uploading\",\n            sources,\n            index,\n            progress.loaded,\n            sum(aggregateLoaded)\n          )\n        );\n      };\n      const response = config.directUpload\n        ? await putDirectStorageUploadBody(\n            config.directUpload,\n            uploadUrl.upload.bucket,\n            uploadUrl.upload.storage_key,\n            request.source.source,\n            mergeUploadHeaders(\n              uploadUrl.upload.headers ?? {},\n              input.uploadHeaders\n            ),\n            options?.signal,\n            aggregateProgress\n          )\n        : await putUploadBody(\n            uploadUrl.upload.url,\n            uploadUrl.upload.headers ?? {},\n            request.source,\n            input,\n            options,\n            aggregateProgress\n          );\n      uploaded.push({\n        file: uploadUrl.file,\n        fileName: request.source.fileName,\n        response,\n        source: request.source.source,\n        storage_key: request.uploadRequest.storage_key,\n        upload: uploadUrl.upload,\n      });\n      aggregateLoaded[index] = request.source.sizeBytes;\n      input.onProgress?.(\n        createProgressSnapshot(\n          \"complete\",\n          sources,\n          index,\n          request.source.sizeBytes,\n          sum(aggregateLoaded)\n        )\n      );\n    }\n\n    return {\n      count: uploaded.length,\n      files: uploaded,\n    };\n  };\n\n  const uploadMultipart: AthenaStorageFileModule[\"uploadMultipart\"] = async (\n    input,\n    options\n  ) => {\n    if (!multipart) {\n      throw new Error(\n        \"athena.storage.file.uploadMultipart requires the multipart namespace\"\n      );\n    }\n    const sources = normalizeUploadSources(input);\n    validateUploadConstraints(sources, input);\n    const partSize = Math.max(\n      input.multipartPartSizeBytes ?? DEFAULT_MULTIPART_PART_SIZE_BYTES,\n      MIN_MULTIPART_PART_SIZE_BYTES\n    );\n\n    input.onProgress?.(createProgressSnapshot(\"preparing\", sources, 0, 0, 0));\n\n    const aggregateLoaded = new Array(sources.length).fill(0) as number[];\n    const uploaded: AthenaStorageUploadedFile[] = [];\n\n    for (let index = 0; index < sources.length; index += 1) {\n      const source = sources[index];\n      const storageKey = resolveUploadStorageKey(\n        input,\n        source,\n        index,\n        options,\n        config\n      );\n      const uploadUrl = await base.createStorageUploadUrl(\n        {\n          bucket: input.bucket,\n          bucket_key_enabled: input.bucket_key_enabled,\n          content_type: input.content_type ?? source.contentType,\n          kms_key_id: input.kms_key_id,\n          metadata: input.metadata,\n          mime_type: input.mime_type ?? source.contentType,\n          name: input.name ?? source.fileName,\n          original_name: input.original_name ?? source.fileName,\n          public: input.public,\n          resource_id: input.resource_id ?? input.resourceId,\n          s3_id: input.s3_id,\n          server_side_encryption: input.server_side_encryption,\n          size_bytes: source.sizeBytes,\n          sse: input.sse,\n          ssekms_key_id: input.ssekms_key_id,\n          storage_key: storageKey,\n        },\n        options\n      );\n\n      const fileId = uploadUrl.file.id;\n      let uploadId = \"\";\n      try {\n        const created = await multipart.create(\n          {\n            bucket_key_enabled: input.bucket_key_enabled,\n            content_type: input.content_type ?? source.contentType,\n            file_id: fileId,\n            kms_key_id: input.kms_key_id,\n            server_side_encryption: input.server_side_encryption,\n            sse: input.sse,\n            ssekms_key_id: input.ssekms_key_id,\n          },\n          options\n        );\n        uploadId = readStringField(created, [\"upload_id\", \"uploadId\"]);\n        if (!uploadId) {\n          throw new Error(\n            \"athena.storage.file.uploadMultipart did not receive an upload_id\"\n          );\n        }\n\n        const partCount = Math.max(1, Math.ceil(source.sizeBytes / partSize));\n        const completedParts: Array<{ part_number: number; etag: string }> = [];\n        let fileLoaded = 0;\n\n        for (let partNumber = 1; partNumber <= partCount; partNumber += 1) {\n          const start = (partNumber - 1) * partSize;\n          const end = Math.min(start + partSize, source.sizeBytes);\n          const chunk = sliceUploadSource(source.source, start, end);\n          const signed = await multipart.signPart(\n            {\n              file_id: fileId,\n              part_number: partNumber,\n              upload_id: uploadId,\n            },\n            options\n          );\n          const partUrl = readStringField(signed, [\"url\"]);\n          if (!partUrl) {\n            throw new Error(\n              `athena.storage.file.uploadMultipart missing part URL for part ${partNumber}`\n            );\n          }\n          const partHeaders = readHeadersField(signed);\n          const response = await putUploadBody(\n            partUrl,\n            partHeaders,\n            {\n              contentType: source.contentType,\n              fileName: source.fileName,\n              sizeBytes: end - start,\n              source: chunk,\n            },\n            input,\n            options,\n            (progress) => {\n              const loaded = fileLoaded + progress.loaded;\n              aggregateLoaded[index] = loaded;\n              input.onProgress?.(\n                createProgressSnapshot(\n                  \"uploading\",\n                  sources,\n                  index,\n                  loaded,\n                  sum(aggregateLoaded),\n                  {\n                    partCount,\n                    partNumber,\n                    uploadId,\n                  }\n                )\n              );\n            }\n          );\n          const etag = extractEtag(response);\n          if (!etag) {\n            throw new Error(\n              `athena.storage.file.uploadMultipart missing ETag for part ${partNumber}`\n            );\n          }\n          completedParts.push({ etag, part_number: partNumber });\n          fileLoaded = end;\n          aggregateLoaded[index] = fileLoaded;\n          input.onProgress?.(\n            createProgressSnapshot(\n              \"uploading\",\n              sources,\n              index,\n              fileLoaded,\n              sum(aggregateLoaded),\n              {\n                partCount,\n                partNumber,\n                uploadId,\n              }\n            )\n          );\n        }\n\n        const completed = await multipart.complete(\n          {\n            file_id: fileId,\n            parts: completedParts,\n            upload_id: uploadId,\n          },\n          options\n        );\n\n        uploaded.push({\n          file: completed.file ?? uploadUrl.file,\n          fileName: source.fileName,\n          response: new Response(null, { status: 200 }),\n          source: source.source,\n          storage_key: storageKey,\n          upload: uploadUrl.upload,\n        });\n        aggregateLoaded[index] = source.sizeBytes;\n        input.onProgress?.(\n          createProgressSnapshot(\n            \"complete\",\n            sources,\n            index,\n            source.sizeBytes,\n            sum(aggregateLoaded),\n            {\n              partCount,\n              partNumber: partCount,\n              uploadId,\n            }\n          )\n        );\n      } catch (error) {\n        if (uploadId) {\n          try {\n            await multipart.abort(\n              { file_id: fileId, upload_id: uploadId },\n              options\n            );\n          } catch {\n            // Best-effort abort; surface the original upload error.\n          }\n        }\n        throw error;\n      }\n    }\n\n    return {\n      count: uploaded.length,\n      files: uploaded,\n    };\n  };\n\n  const upload: AthenaStorageFileModule[\"upload\"] = async (input, options) => {\n    const sources = normalizeUploadSources(input);\n    validateUploadConstraints(sources, input);\n\n    const threshold =\n      input.multipartThresholdBytes ?? DEFAULT_MULTIPART_THRESHOLD_BYTES;\n    const useMultipart =\n      Boolean(multipart) &&\n      !input.forceSinglePut &&\n      !config.directUpload &&\n      (input.forceMultipart ||\n        sources.some((source) => source.sizeBytes >= threshold));\n\n    if (useMultipart) {\n      const multipartSources = sources.filter(\n        (source) => input.forceMultipart || source.sizeBytes >= threshold\n      );\n      const singleSources = sources.filter(\n        (source) => !(input.forceMultipart || source.sizeBytes >= threshold)\n      );\n\n      if (multipartSources.length === sources.length) {\n        return uploadMultipart(input, options);\n      }\n\n      // Mixed batch: upload large files via multipart, small via single PUT.\n      const multipartResult =\n        multipartSources.length > 0\n          ? await uploadMultipart(\n              {\n                ...input,\n                files: multipartSources.map((source) => source.source),\n                maxFiles: multipartSources.length,\n              },\n              options\n            )\n          : { count: 0, files: [] };\n      const singleResult =\n        singleSources.length > 0\n          ? await uploadSinglePut(\n              {\n                ...input,\n                files: singleSources.map((source) => source.source),\n                maxFiles: singleSources.length,\n              },\n              singleSources,\n              options\n            )\n          : { count: 0, files: [] };\n      const files = [...multipartResult.files, ...singleResult.files];\n      return { count: files.length, files };\n    }\n\n    return uploadSinglePut(input, sources, options);\n  };\n\n  const download = ((\n    input: string | readonly string[] | AthenaStorageFileDownloadInput,\n    queryOrOptions?: GetStorageFileUrlQuery | AthenaStorageBinaryCallOptions,\n    maybeOptions?: AthenaStorageBinaryCallOptions\n  ): Promise<Response | Response[]> => {\n    const { fileIds, query, options } = normalizeDownloadArgs(\n      input,\n      queryOrOptions,\n      maybeOptions\n    );\n    const downloads = fileIds.map((fileId) =>\n      base.getStorageFileProxy(fileId, query, options)\n    );\n    return Array.isArray(input) ||\n      (isRecord(input) && Array.isArray(input.fileIds))\n      ? Promise.all(downloads)\n      : downloads[0];\n  }) as AthenaStorageFileModule[\"download\"];\n\n  const deleteFile = ((\n    input: string | readonly string[],\n    options?: AthenaStorageCallOptions\n  ): Promise<StorageFileMutationResponse | StorageFileMutationResponse[]> => {\n    if (Array.isArray(input)) {\n      return Promise.all(\n        input.map((fileId) => base.deleteStorageFile(fileId, options))\n      );\n    }\n    return base.deleteStorageFile(input as string, options);\n  }) as AthenaStorageFileModule[\"delete\"];\n\n  return {\n    delete: deleteFile,\n    download,\n\n    list(input, options) {\n      const prefix = resolveStoragePath(\n        input.prefix ?? \"\",\n        input,\n        options,\n        config\n      );\n      // Strip path-templating helpers; forward every ListStorageFilesRequest field.\n      const {\n        env: _env,\n        organization_id: _organization_id,\n        organizationId: _organizationId,\n        prefix: _prefix,\n        prefixPath: _prefixPath,\n        resourceId: _resourceId,\n        user_id: _user_id,\n        userId: _userId,\n        vars: _vars,\n        ...listRequest\n      } = input;\n      return base.listStorageFiles(\n        {\n          ...listRequest,\n          prefix,\n          s3_id: input.s3_id,\n        },\n        options\n      );\n    },\n    upload,\n    uploadMultipart,\n  };\n}\n\nexport function resolveStoragePath(\n  path: string,\n  input: {\n    prefixPath?: AthenaStoragePrefixPath;\n    vars?: AthenaStorageTemplateVars;\n    env?: AthenaStorageEnv;\n    organization_id?: string;\n    organizationId?: string;\n    user_id?: string;\n    userId?: string;\n    resource_id?: string;\n    resourceId?: string;\n  },\n  options: AthenaStorageCallOptions | undefined,\n  config: AthenaStorageFileConfig = {}\n): string {\n  const context = createPathContext(input, options, config);\n  const prefixPath = input.prefixPath ?? config.prefixPath;\n  const prefix =\n    typeof prefixPath === \"function\" ? prefixPath(context) : prefixPath;\n  return joinStoragePath(\n    renderStorageTemplate(prefix ?? \"\", context),\n    renderStorageTemplate(path, context)\n  );\n}\n\nfunction resolveUploadStorageKey(\n  input: AthenaStorageFileUploadInput,\n  source: NormalizedUploadSource,\n  index: number,\n  options: AthenaStorageCallOptions | undefined,\n  config: AthenaStorageFileConfig\n): string {\n  const explicitKey = input.storage_key ?? input.storageKey;\n  const keyTemplate = input.storageKeyTemplate;\n  const fallbackName = source.fileName;\n  const context = createPathContext(input, options, config);\n  const key = keyTemplate\n    ? renderStorageTemplate(keyTemplate, {\n        ...context,\n        vars: {\n          ...context.vars,\n          fileName: source.fileName,\n          index,\n          name: source.fileName,\n        },\n      })\n    : (explicitKey ?? fallbackName);\n  return resolveStoragePath(key, input, options, config);\n}\n\nfunction normalizeUploadSources(\n  input: AthenaStorageFileUploadInput\n): NormalizedUploadSource[] {\n  const files = toArray(input.files);\n  if (files.length === 0) {\n    throw new Error(\"athena.storage.file.upload requires at least one file\");\n  }\n  return files.map((source, index) => {\n    const fileName =\n      input.fileName ?? sourceName(source) ?? `file-${index + 1}`;\n    const sizeBytes = sourceSize(source);\n    const contentType =\n      input.content_type ?? input.mime_type ?? sourceContentType(source);\n    return {\n      contentType,\n      fileName,\n      sizeBytes,\n      source,\n    };\n  });\n}\n\nfunction validateUploadConstraints(\n  sources: readonly NormalizedUploadSource[],\n  input: AthenaStorageFileUploadInput\n): void {\n  const maxFiles = input.maxFiles ?? 1;\n  if (sources.length > maxFiles) {\n    throw new Error(\n      `athena.storage.file.upload accepts at most ${maxFiles} file${maxFiles === 1 ? \"\" : \"s\"} for this call`\n    );\n  }\n\n  const maxFileSizeBytes =\n    input.maxFileSizeBytes ??\n    (input.maxFileSizeMb === undefined\n      ? undefined\n      : Math.floor(input.maxFileSizeMb * 1024 * 1024));\n  if (maxFileSizeBytes !== undefined) {\n    const tooLarge = sources.find(\n      (source) => source.sizeBytes > maxFileSizeBytes\n    );\n    if (tooLarge) {\n      throw new Error(\n        `athena.storage.file.upload rejected ${tooLarge.fileName}: file exceeds ${maxFileSizeBytes} bytes`\n      );\n    }\n  }\n\n  const allowedExtensions = normalizeExtensions(\n    input.allowedExtensions ?? input.extensions\n  );\n  if (allowedExtensions.size > 0) {\n    const invalid = sources.find(\n      (source) => !allowedExtensions.has(fileExtension(source.fileName))\n    );\n    if (invalid) {\n      throw new Error(\n        `athena.storage.file.upload rejected ${invalid.fileName}: extension is not allowed`\n      );\n    }\n  }\n}\n\nasync function putUploadBody(\n  url: string,\n  uploadHeaders: Record<string, string>,\n  source: NormalizedUploadSource,\n  input: AthenaStorageFileUploadInput,\n  options: AthenaStorageCallOptions | undefined,\n  onProgress: (progress: { loaded: number }) => void\n): Promise<Response> {\n  const headers = new Headers(uploadHeaders);\n  new Headers(input.uploadHeaders).forEach((value, key) => {\n    headers.set(key, value);\n  });\n  if (source.contentType && !headers.has(\"Content-Type\")) {\n    headers.set(\"Content-Type\", source.contentType);\n  }\n  if (canUseStorageXhrPut()) {\n    return putStorageBodyWithXhr({\n      body: source.source as AthenaStorageXhrPutBody,\n      completeLoaded: source.sizeBytes,\n      headers,\n      onProgress,\n      operationLabel: \"athena.storage.file.upload\",\n      signal: options?.signal,\n      url,\n    });\n  }\n  onProgress({ loaded: 0 });\n  const response = await fetch(url, {\n    body: source.source as RequestInit[\"body\"],\n    headers,\n    method: \"PUT\",\n    signal: options?.signal,\n  });\n  if (!response.ok) {\n    throw new Error(\n      `athena.storage.file.upload failed with status ${response.status}`\n    );\n  }\n  onProgress({ loaded: source.sizeBytes });\n  return response;\n}\n\nfunction normalizeDownloadArgs(\n  input: string | readonly string[] | AthenaStorageFileDownloadInput,\n  queryOrOptions?: GetStorageFileUrlQuery | AthenaStorageBinaryCallOptions,\n  maybeOptions?: AthenaStorageBinaryCallOptions\n): {\n  fileIds: string[];\n  query?: GetStorageFileUrlQuery;\n  options?: AthenaStorageBinaryCallOptions;\n} {\n  if (typeof input === \"string\") {\n    return {\n      fileIds: [input],\n      options: maybeOptions,\n      query: queryOrOptions as GetStorageFileUrlQuery | undefined,\n    };\n  }\n  if (Array.isArray(input)) {\n    return {\n      fileIds: [...input],\n      options: maybeOptions,\n      query: queryOrOptions as GetStorageFileUrlQuery | undefined,\n    };\n  }\n  const downloadInput = input as AthenaStorageFileDownloadInput;\n  const { fileId, fileIds, ...query } = downloadInput;\n  return {\n    fileIds: fileIds ? [...fileIds] : fileId ? [fileId] : [],\n    options: queryOrOptions as AthenaStorageBinaryCallOptions | undefined,\n    query,\n  };\n}\n\nfunction createPathContext(\n  input: {\n    vars?: AthenaStorageTemplateVars;\n    env?: AthenaStorageEnv;\n    organization_id?: string;\n    organizationId?: string;\n    user_id?: string;\n    userId?: string;\n    resource_id?: string;\n    resourceId?: string;\n  },\n  options: AthenaStorageCallOptions | undefined,\n  config: AthenaStorageFileConfig\n): AthenaStoragePathContext {\n  const organizationId =\n    input.organizationId ??\n    input.organization_id ??\n    options?.organizationId ??\n    undefined;\n  const userId = input.userId ?? input.user_id ?? options?.userId ?? undefined;\n  const resourceId = input.resourceId ?? input.resource_id ?? undefined;\n  const vars = {\n    ...(config.vars ?? {}),\n    ...(input.vars ?? {}),\n  };\n  if (organizationId !== undefined) {\n    vars.organizationId = organizationId;\n    vars.organization_id = organizationId;\n  }\n  if (userId !== undefined) {\n    vars.userId = userId;\n    vars.user_id = userId;\n  }\n  if (resourceId !== undefined) {\n    vars.resourceId = resourceId;\n    vars.resource_id = resourceId;\n  }\n  return {\n    env: {\n      ...readProcessEnv(),\n      ...(config.env ?? {}),\n      ...(input.env ?? {}),\n    },\n    organization_id: organizationId,\n    organizationId,\n    resource_id: resourceId,\n    resourceId,\n    user_id: userId,\n    userId,\n    vars,\n  };\n}\n\nfunction renderStorageTemplate(\n  template: string,\n  context: AthenaStoragePathContext\n): string {\n  return template.replace(\n    /\\$\\{([^}]+)\\}|\\{([^}]+)\\}/g,\n    (\n      _match,\n      shellToken: string | undefined,\n      braceToken: string | undefined\n    ) => {\n      const token = (shellToken ?? braceToken ?? \"\").trim();\n      if (!token) {\n        return \"\";\n      }\n      const value = resolveTemplateToken(token, context);\n      return value === undefined || value === null ? \"\" : String(value);\n    }\n  );\n}\n\nfunction resolveTemplateToken(\n  token: string,\n  context: AthenaStoragePathContext\n): AthenaStorageTemplateValue {\n  if (token.startsWith(\"env.\")) {\n    return context.env[token.slice(4)];\n  }\n  if (token in context.vars) {\n    return context.vars[token];\n  }\n  return context.env[token];\n}\n\nfunction joinStoragePath(...parts: readonly string[]): string {\n  return parts\n    .map((part) => part.trim().replace(/^\\/+|\\/+$/g, \"\"))\n    .filter(Boolean)\n    .join(\"/\");\n}\n\nfunction toArray(\n  files: AthenaStorageFileUploadInput[\"files\"]\n): AthenaStorageUploadSource[] {\n  if (isUploadSource(files)) {\n    return [files];\n  }\n  return Array.from(files);\n}\n\nfunction isUploadSource(value: unknown): value is AthenaStorageUploadSource {\n  return (\n    value instanceof Blob ||\n    value instanceof ArrayBuffer ||\n    value instanceof Uint8Array\n  );\n}\n\nfunction sourceName(source: AthenaStorageUploadSource): string | undefined {\n  return isRecord(source) &&\n    typeof source.name === \"string\" &&\n    source.name.trim()\n    ? source.name.trim()\n    : undefined;\n}\n\nfunction sourceSize(source: AthenaStorageUploadSource): number {\n  if (source instanceof Blob) {\n    return source.size;\n  }\n  return source.byteLength;\n}\n\nfunction sourceContentType(\n  source: AthenaStorageUploadSource\n): string | undefined {\n  return source instanceof Blob && source.type.trim()\n    ? source.type.trim()\n    : undefined;\n}\n\nfunction normalizeExtensions(\n  extensions: readonly string[] | undefined\n): Set<string> {\n  return new Set(\n    (extensions ?? [])\n      .map((extension) => extension.replace(/^\\./, \"\").toLowerCase())\n      .filter(Boolean)\n  );\n}\n\nfunction fileExtension(fileName: string): string {\n  const lastDot = fileName.lastIndexOf(\".\");\n  return lastDot === -1 ? \"\" : fileName.slice(lastDot + 1).toLowerCase();\n}\n\nfunction createProgressSnapshot(\n  phase: AthenaStorageUploadProgress[\"phase\"],\n  sources: readonly NormalizedUploadSource[],\n  fileIndex: number,\n  loaded: number,\n  aggregateLoaded: number,\n  multipartInfo?: AthenaStorageUploadProgress[\"multipart\"]\n): AthenaStorageUploadProgress {\n  const total = sources[fileIndex]?.sizeBytes ?? 0;\n  const aggregateTotal = sources.reduce(\n    (totalBytes, source) => totalBytes + source.sizeBytes,\n    0\n  );\n  return {\n    aggregateLoaded,\n    aggregatePercent:\n      aggregateTotal > 0\n        ? Math.round((aggregateLoaded / aggregateTotal) * 100)\n        : 100,\n    aggregateTotal,\n    fileCount: sources.length,\n    fileIndex,\n    fileName: sources[fileIndex]?.fileName ?? \"\",\n    loaded,\n    percent: total > 0 ? Math.round((loaded / total) * 100) : 100,\n    phase,\n    total,\n    ...(multipartInfo ? { multipart: multipartInfo } : {}),\n  };\n}\n\nfunction sliceUploadSource(\n  source: AthenaStorageUploadSource,\n  start: number,\n  end: number\n): AthenaStorageUploadSource {\n  if (source instanceof Blob) {\n    return source.slice(start, end);\n  }\n  if (source instanceof ArrayBuffer) {\n    return source.slice(start, end);\n  }\n  return source.slice(start, end);\n}\n\nfunction readStringField(value: unknown, keys: readonly string[]): string {\n  if (!isRecord(value)) {\n    return \"\";\n  }\n  for (const key of keys) {\n    const candidate = value[key];\n    if (typeof candidate === \"string\" && candidate.trim()) {\n      return candidate.trim();\n    }\n  }\n  return \"\";\n}\n\nfunction readHeadersField(value: unknown): Record<string, string> {\n  if (!isRecord(value)) {\n    return {};\n  }\n  const headers = value.headers;\n  if (!isRecord(headers)) {\n    return {};\n  }\n  const result: Record<string, string> = {};\n  for (const [key, headerValue] of Object.entries(headers)) {\n    if (typeof headerValue === \"string\") {\n      result[key] = headerValue;\n    }\n  }\n  return result;\n}\n\nfunction extractEtag(response: Response): string {\n  const etag =\n    response.headers.get(\"etag\") ?? response.headers.get(\"ETag\") ?? \"\";\n  return etag.trim();\n}\n\nfunction sum(values: readonly number[]): number {\n  return values.reduce((total, value) => total + value, 0);\n}\n\nfunction readProcessEnv(): AthenaStorageEnv {\n  const processLike = (globalThis as { process?: { env?: AthenaStorageEnv } })\n    .process;\n  return processLike?.env ?? {};\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\";\n}\n","import type { AthenaGatewayClient } from \"../gateway/client.ts\";\nimport { isAthenaGatewayError } from \"../gateway/errors.ts\";\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaGatewayEndpointPath,\n  AthenaGatewayMethod,\n} from \"../gateway/types.ts\";\nimport {\n  buildAthenaGatewayUrl,\n  normalizeAthenaGatewayBaseUrl,\n} from \"../gateway/url.ts\";\nimport { appendHttpQuery as appendQuery } from \"../http/append-query.ts\";\nimport { parseHttpResponseBody as parseResponseBody } from \"../http/parse-response-body.ts\";\nimport type { AthenaStorageBackupNamespace } from \"./backup.ts\";\nimport { createStorageBackupModule } from \"./backup.ts\";\nimport {\n  type AthenaStorageErrorCode,\n  type AthenaStorageErrorHandler,\n  bindStorageErrorRoutes,\n  rejectStorageError,\n} from \"./errors.ts\";\nimport type {\n  AthenaStorageFileConfig,\n  AthenaStorageFileModule,\n} from \"./file.ts\";\nimport { createStorageFileModule } from \"./file.ts\";\nimport storageLiveHttpRoutesDocument from \"./live-http-routes.json\";\n\nexport type {\n  AthenaStorageBackupNamespace,\n  BackupRecoveryStrategy,\n  StorageBackupCreateRequest,\n  StorageBackupJob,\n  StorageBackupListPage,\n  StorageBackupListQuery,\n  StorageBackupQueuedJob,\n  StorageBackupRecord,\n  StorageBackupRestoreRequest,\n  StorageBackupSchedule,\n  StorageBackupScheduleCreateRequest,\n} from \"./backup.ts\";\nexport type {\n  AthenaStorageErrorDetails,\n  AthenaStorageErrorHandler,\n  AthenaStorageErrorInput,\n} from \"./errors.ts\";\nexport {\n  AthenaStorageError,\n  AthenaStorageErrorCode,\n  createAthenaStorageError,\n} from \"./errors.ts\";\n\n/**\n * Live storage METHOD+path inventory (billing-style contract spine).\n * Exact-set parity with `storageSdkManifest` is enforced in\n * `test/storage-route-parity.test.ts`. Keep this JSON and the manifest table\n * in lockstep when adding routes — never shrink product routes to match a thin list.\n */\nexport const storageLiveHttpRoutes = storageLiveHttpRoutesDocument;\n\n/**\n * Storage SDK route table (SSOT for method names, METHOD+path, envelope).\n * Thin JSON routes in `createStorageModule` resolve path/method/envelope via\n * `requireStorageManifestRoute` / `callManifestRoute` so wrappers cannot drift.\n * Binary, multipart upload bodies, dual-visibility verbs, and admin backup\n * helpers keep specialized implementations.\n */\nexport const storageSdkManifest = {\n  basePath: \"/storage\",\n  envelopeKinds: {\n    athena: \"response body is { status, message, data }\",\n    raw: \"response body is the payload\",\n  },\n  methods: [\n    {\n      method: \"GET\",\n      name: \"listCanonicalStorageProviders\",\n      path: \"/storage/providers\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ providers: StorageProviderDescriptor[] }\",\n    },\n    {\n      method: \"GET\",\n      name: \"listCanonicalStorageConnections\",\n      path: \"/storage/connections\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ connections: StorageConnection[] }\",\n    },\n    {\n      method: \"POST\",\n      name: \"createCanonicalStorageConnection\",\n      path: \"/storage/connections\",\n      requestType: \"CreateStorageConnectionInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ connection: StorageConnection }\",\n    },\n    {\n      method: \"POST\",\n      name: \"testCanonicalStorageConnection\",\n      path: \"/storage/connections/test\",\n      requestType: \"TestStorageConnectionInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ ok: boolean; config: PublicStorageConnectionConfig }\",\n    },\n    {\n      method: \"GET\",\n      name: \"getCanonicalStorageConnection\",\n      path: \"/storage/connections/{id}\",\n      pathParams: [\"id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ connection: StorageConnection }\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteCanonicalStorageConnection\",\n      path: \"/storage/connections/{id}\",\n      pathParams: [\"id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ connectionId: string }\",\n    },\n    {\n      method: \"POST\",\n      name: \"uploadCanonicalStorageFile\",\n      path: \"/storage/service/files\",\n      requestType: \"UploadManagedFileInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ file: ManagedFile }\",\n    },\n    {\n      method: \"POST\",\n      name: \"listCanonicalStorageFiles\",\n      path: \"/storage/service/files/list\",\n      requestType: \"ListManagedFilesInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ files: ManagedFile[] }\",\n    },\n    {\n      method: \"GET\",\n      name: \"getCanonicalStorageFile\",\n      path: \"/storage/service/files/{file_id}\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ file: ManagedFile }\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteCanonicalStorageFile\",\n      path: \"/storage/service/files/{file_id}\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ file: ManagedFile }\",\n    },\n    {\n      method: \"POST\",\n      name: \"moveCanonicalStorageFile\",\n      path: \"/storage/service/files/{file_id}/move\",\n      pathParams: [\"file_id\"],\n      requestType: \"MoveManagedFileInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ file: ManagedFile }\",\n    },\n    {\n      method: \"POST\",\n      name: \"restoreCanonicalStorageFile\",\n      path: \"/storage/service/files/{file_id}/restore\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ file: ManagedFile }\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"purgeCanonicalStorageFile\",\n      path: \"/storage/service/files/{file_id}/purge\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ fileId: string }\",\n    },\n    {\n      method: \"POST\",\n      name: \"setCanonicalStorageFileVisibility\",\n      path: \"/storage/service/files/{file_id}/visibility\",\n      pathParams: [\"file_id\"],\n      requestType: \"SetManagedFileVisibilityInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ file: ManagedFile }\",\n    },\n    {\n      method: \"GET\",\n      name: \"listCanonicalStoragePermissions\",\n      path: \"/storage/service/files/{file_id}/permissions\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"{ permissions: FilePermission[] }\",\n    },\n    {\n      method: \"POST\",\n      name: \"grantCanonicalStoragePermission\",\n      path: \"/storage/service/files/{file_id}/permissions/grant\",\n      pathParams: [\"file_id\"],\n      requestType: \"GrantFilePermissionInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ permission: FilePermission }\",\n    },\n    {\n      method: \"POST\",\n      name: \"revokeCanonicalStoragePermission\",\n      path: \"/storage/service/files/{file_id}/permissions/revoke\",\n      pathParams: [\"file_id\"],\n      requestType: \"RevokeFilePermissionInput\",\n      responseEnvelope: \"athena\",\n      responseType: \"{ fileId: string }\",\n    },\n    {\n      method: \"GET\",\n      name: \"listStorageCatalogs\",\n      path: \"/storage/catalogs\",\n      responseEnvelope: \"raw\",\n      responseType: \"{ data: S3CatalogItem[] }\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageCatalog\",\n      path: \"/storage/catalogs\",\n      requestType: \"CreateStorageCatalogRequest\",\n      responseEnvelope: \"raw\",\n      responseType: \"S3CatalogItem\",\n    },\n    {\n      method: \"PATCH\",\n      name: \"updateStorageCatalog\",\n      path: \"/storage/catalogs/{id}\",\n      pathParams: [\"id\"],\n      requestType: \"UpdateStorageCatalogRequest\",\n      responseEnvelope: \"raw\",\n      responseType: \"S3CatalogItem\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteStorageCatalog\",\n      path: \"/storage/catalogs/{id}\",\n      pathParams: [\"id\"],\n      responseEnvelope: \"raw\",\n      responseType: \"{ id: string; deleted: boolean }\",\n    },\n    {\n      method: \"GET\",\n      name: \"listStorageCredentials\",\n      path: \"/storage/credentials\",\n      responseEnvelope: \"raw\",\n      responseType: \"{ data: S3CredentialListItem[] }\",\n    },\n    {\n      method: \"GET\",\n      name: \"backup.list\",\n      note: \"Admin backup archives on server S3/R2 profile\",\n      path: \"/admin/backups\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageBackupListPage\",\n    },\n    {\n      method: \"POST\",\n      name: \"backup.create\",\n      path: \"/admin/backups\",\n      requestType: \"StorageBackupCreateRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageBackupQueuedJob\",\n    },\n    {\n      method: \"POST\",\n      name: \"backup.restore\",\n      path: \"/admin/backups/{key}/restore\",\n      pathParams: [\"key\"],\n      requestType: \"StorageBackupRestoreRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageBackupQueuedJob\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"backup.delete\",\n      path: \"/admin/backups/{key}\",\n      pathParams: [\"key\"],\n      responseEnvelope: \"athena\",\n      responseType: \"void\",\n    },\n    {\n      method: \"GET\",\n      name: \"backup.jobs.list\",\n      path: \"/admin/backups/jobs\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageBackupJob[]\",\n    },\n    {\n      method: \"GET\",\n      name: \"backup.schedules.list\",\n      path: \"/admin/backups/schedules\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageBackupSchedule[]\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageUploadUrl\",\n      path: \"/storage/files/upload-url\",\n      requestType: \"CreateStorageUploadUrlRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageUploadUrlResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageUploadUrls\",\n      path: \"/storage/files/upload-urls\",\n      requestType: \"CreateStorageUploadUrlsRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageBatchUploadUrlResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageFiles\",\n      path: \"/storage/files/list\",\n      requestType: \"ListStorageFilesRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageListFilesResponse\",\n    },\n    {\n      method: \"GET\",\n      name: \"getStorageFile\",\n      path: \"/storage/files/{file_id}\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"GET\",\n      name: \"getStorageFileUrl\",\n      path: \"/storage/files/{file_id}/url\",\n      pathParams: [\"file_id\"],\n      queryParams: [\"purpose\"],\n      responseEnvelope: \"athena\",\n      responseType: \"PresignedFileUrlResponse\",\n    },\n    {\n      binary: true,\n      method: \"GET\",\n      name: \"getStorageFileProxy\",\n      path: \"/storage/files/{file_id}/proxy\",\n      pathParams: [\"file_id\"],\n      queryParams: [\"purpose\"],\n      responseEnvelope: \"raw\",\n      responseType: \"Response\",\n    },\n    {\n      method: \"PATCH\",\n      name: \"updateStorageFile\",\n      path: \"/storage/files/{file_id}\",\n      pathParams: [\"file_id\"],\n      requestType: \"UpdateStorageFileRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteStorageFile\",\n      path: \"/storage/files/{file_id}\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"PATCH\",\n      name: \"setStorageFileVisibility\",\n      path: \"/storage/files/{file_id}/visibility\",\n      pathParams: [\"file_id\"],\n      requestType: \"SetStorageFileVisibilityRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"postStorageFileVisibility\",\n      path: \"/storage/files/{file_id}/visibility\",\n      pathParams: [\"file_id\"],\n      requestType: \"SetStorageFileVisibilityRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"setManyStorageFileVisibility\",\n      path: \"/storage/files/visibility-many\",\n      requestType: \"SetManyStorageFileVisibilityRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationManyResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageFolder\",\n      path: \"/storage/folders/delete\",\n      requestType: \"DeleteStorageFolderRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFolderMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"moveStorageFolder\",\n      path: \"/storage/folders/move\",\n      requestType: \"MoveStorageFolderRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFolderMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"searchStorageFiles\",\n      path: \"/storage/files/search\",\n      requestType: \"SearchStorageFilesRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageListFilesResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"confirmStorageUpload\",\n      path: \"/storage/files/{file_id}/confirm-upload\",\n      pathParams: [\"file_id\"],\n      requestType: \"ConfirmStorageUploadRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      binary: true,\n      method: \"PUT\",\n      name: \"uploadStorageFileBinary\",\n      path: \"/storage/files/{file_id}/upload\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"copyStorageFile\",\n      path: \"/storage/files/{file_id}/copy\",\n      pathParams: [\"file_id\"],\n      requestType: \"CopyStorageFileRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteManyStorageFiles\",\n      path: \"/storage/files/delete-many\",\n      requestType: \"DeleteManyStorageFilesRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationManyResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"updateManyStorageFiles\",\n      path: \"/storage/files/update-many\",\n      requestType: \"UpdateManyStorageFilesRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationManyResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"restoreStorageFile\",\n      path: \"/storage/files/{file_id}/restore\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"purgeStorageFile\",\n      path: \"/storage/files/{file_id}/purge\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"GET\",\n      name: \"getStorageFilePublicUrl\",\n      path: \"/storage/files/{file_id}/public-url\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"GET\",\n      name: \"getStorageFileProxyUrl\",\n      path: \"/storage/files/{file_id}/proxy-url\",\n      pathParams: [\"file_id\"],\n      queryParams: [\"purpose\"],\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"GET\",\n      name: \"listStorageFileVersions\",\n      path: \"/storage/files/{file_id}/versions\",\n      pathParams: [\"file_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"restoreStorageFileVersion\",\n      path: \"/storage/files/{file_id}/versions/{version_id}/restore\",\n      pathParams: [\"file_id\", \"version_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"DELETE\",\n      name: \"deleteStorageFileVersion\",\n      path: \"/storage/files/{file_id}/versions/{version_id}\",\n      pathParams: [\"file_id\", \"version_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"GET\",\n      name: \"getStorageFileRetention\",\n      path: \"/storage/files/{file_id}/retention\",\n      pathParams: [\"file_id\"],\n      queryParams: [\"version_id\"],\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"setStorageFileRetention\",\n      path: \"/storage/files/{file_id}/retention\",\n      pathParams: [\"file_id\"],\n      requestType: \"StorageFileRetentionRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageFolders\",\n      path: \"/storage/folders/list\",\n      requestType: \"ListStorageFoldersRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"treeStorageFolders\",\n      path: \"/storage/folders/tree\",\n      requestType: \"TreeStorageFoldersRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStoragePermissions\",\n      path: \"/storage/permissions/list\",\n      requestType: \"StoragePermissionListRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StoragePermissionListResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"grantStoragePermission\",\n      path: \"/storage/permissions/grant\",\n      requestType: \"StoragePermissionGrantRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"revokeStoragePermission\",\n      path: \"/storage/permissions/revoke\",\n      requestType: \"StoragePermissionRevokeRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"checkStoragePermission\",\n      path: \"/storage/permissions/check\",\n      requestType: \"StoragePermissionCheckRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StoragePermissionCheckResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageObjects\",\n      path: \"/storage/objects\",\n      requestType: \"StorageListObjectsRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"headStorageObject\",\n      path: \"/storage/objects/head\",\n      requestType: \"StorageObjectRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"existsStorageObject\",\n      path: \"/storage/objects/exists\",\n      requestType: \"StorageObjectRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"validateStorageObject\",\n      path: \"/storage/objects/validate\",\n      requestType: \"StorageObjectValidateRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"updateStorageObject\",\n      path: \"/storage/objects/update\",\n      requestType: \"StorageUpdateObjectRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"copyStorageObject\",\n      path: \"/storage/objects/copy\",\n      requestType: \"StorageObjectCopyRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"getStorageObjectUrl\",\n      path: \"/storage/objects/url\",\n      requestType: \"StorageObjectRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"getStorageObjectPublicUrl\",\n      path: \"/storage/objects/public-url\",\n      requestType: \"StorageObjectPublicUrlRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageObject\",\n      path: \"/storage/objects/delete\",\n      requestType: \"StorageObjectRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageObjectUploadUrl\",\n      path: \"/storage/objects/upload-url\",\n      requestType: \"StoragePresignUploadRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageObjectPostPolicy\",\n      path: \"/storage/objects/post-policy\",\n      requestType: \"StorageSignedPostPolicyRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageObjectVersions\",\n      path: \"/storage/objects/versions\",\n      requestType: \"StorageObjectVersionListRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"restoreStorageObjectVersion\",\n      path: \"/storage/objects/versions/restore\",\n      requestType: \"StorageObjectVersionMutationRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageObjectVersion\",\n      path: \"/storage/objects/versions/delete\",\n      requestType: \"StorageObjectVersionMutationRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageObjectFolder\",\n      path: \"/storage/objects/folder\",\n      requestType: \"StorageObjectFolderCreateRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageObjectFolder\",\n      path: \"/storage/objects/folder/delete\",\n      requestType: \"StorageObjectFolderDeleteRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"renameStorageObjectFolder\",\n      path: \"/storage/objects/folder/rename\",\n      requestType: \"StorageObjectFolderRenameRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageBuckets\",\n      path: \"/storage/buckets/list\",\n      requestType: \"Omit<StorageObjectBaseRequest, 'bucket'>\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageBucket\",\n      path: \"/storage/buckets/create\",\n      requestType: \"StorageObjectBaseRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageBucket\",\n      path: \"/storage/buckets/delete\",\n      requestType: \"StorageObjectBaseRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"getStorageBucketLifecycle\",\n      path: \"/storage/buckets/lifecycle\",\n      requestType: \"StorageBucketLifecycleRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"setStorageBucketLifecycle\",\n      path: \"/storage/buckets/lifecycle/set\",\n      requestType: \"StorageSetBucketLifecycleRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageBucketLifecycle\",\n      path: \"/storage/buckets/lifecycle/delete\",\n      requestType: \"StorageBucketLifecycleRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"getStorageBucketPolicy\",\n      path: \"/storage/buckets/policy\",\n      requestType: \"StorageBucketPolicyRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"setStorageBucketPolicy\",\n      path: \"/storage/buckets/policy/set\",\n      requestType: \"StorageSetBucketPolicyRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageBucketPolicy\",\n      path: \"/storage/buckets/policy/delete\",\n      requestType: \"StorageBucketPolicyRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"getStorageBucketPublicAccess\",\n      path: \"/storage/buckets/public-access\",\n      requestType: \"StoragePublicAccessBlockRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"setStorageBucketPublicAccess\",\n      path: \"/storage/buckets/public-access/set\",\n      requestType: \"StorageSetPublicAccessBlockRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageBucketPublicAccess\",\n      path: \"/storage/buckets/public-access/delete\",\n      requestType: \"StoragePublicAccessBlockRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"getStorageBucketCors\",\n      path: \"/storage/buckets/cors\",\n      requestType: \"StorageBucketCorsRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"setStorageBucketCors\",\n      path: \"/storage/buckets/cors/set\",\n      requestType: \"StorageSetBucketCorsRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"deleteStorageBucketCors\",\n      path: \"/storage/buckets/cors/delete\",\n      requestType: \"StorageBucketCorsRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"createStorageMultipartUpload\",\n      path: \"/storage/multipart/create\",\n      requestType: \"StorageMultipartCreateRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"signStorageMultipartPart\",\n      path: \"/storage/multipart/sign-part\",\n      requestType: \"StorageMultipartSignPartRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"completeStorageMultipartUpload\",\n      path: \"/storage/multipart/complete\",\n      requestType: \"StorageMultipartCompleteRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageFileMutationResponse\",\n    },\n    {\n      method: \"POST\",\n      name: \"abortStorageMultipartUpload\",\n      path: \"/storage/multipart/abort\",\n      requestType: \"StorageMultipartAbortRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageMultipartParts\",\n      path: \"/storage/multipart/list-parts\",\n      requestType: \"StorageMultipartListPartsRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"Record<string, unknown>\",\n    },\n    {\n      method: \"POST\",\n      name: \"listStorageAuditEvents\",\n      path: \"/storage/audit/list\",\n      requestType: \"StorageAuditQueryRequest\",\n      responseEnvelope: \"athena\",\n      responseType: \"StorageAuditListResponse\",\n    },\n  ],\n  namespace: \"storage\",\n} as const;\n\n// Bind route names for AthenaStorageError normalized `operation` labels.\nbindStorageErrorRoutes(storageSdkManifest.methods);\n\nexport type StorageSdkManifestMethod =\n  (typeof storageSdkManifest.methods)[number];\nexport type StorageSdkManifestMethodName = StorageSdkManifestMethod[\"name\"];\n\n/** Resolve one storageSdkManifest entry by stable method name (throws if missing). */\nexport function requireStorageManifestRoute(\n  name: StorageSdkManifestMethodName\n): StorageSdkManifestMethod {\n  const route = storageSdkManifest.methods.find(\n    (candidate) => candidate.name === name\n  );\n  if (!route) {\n    throw new Error(`Unknown storageSdkManifest route: ${name}`);\n  }\n  return route;\n}\n\n/** Forward-compatible canonical provider identifier. */\nexport type StorageProviderId =\n  | \"aws_s3\"\n  | \"cloudflare_r2\"\n  | \"minio\"\n  | \"wasabi\"\n  | \"backblaze_b2\"\n  | \"digitalocean_spaces\"\n  | \"custom_s3\"\n  | (string & {});\n\nexport type StorageImplementationStatus =\n  | \"implemented\"\n  | \"stable\"\n  | \"beta\"\n  | \"experimental\"\n  | (string & {});\n\nexport interface StorageProviderConnectionField {\n  allowedValues?: string[];\n  defaultValue?: unknown;\n  description: string;\n  key: string;\n  required: boolean;\n  secret: boolean;\n  valueType: string;\n}\n\n/** Public provider metadata normalized from Athena's provider descriptor. */\nexport interface StorageProviderDescriptor {\n  connectionSchema: { fields: StorageProviderConnectionField[] };\n  defaultEndpointTemplate?: string;\n  defaultRegion: string;\n  forcePathStyleDefault: boolean;\n  id: StorageProviderId;\n  implementationStatus: StorageImplementationStatus;\n  integration?: Record<string, unknown>;\n  protocol: \"s3_compatible\" | (string & {});\n}\n\nexport interface PublicStorageConnectionConfig {\n  bucket: string;\n  defaultPrefix?: string;\n  endpoint: string;\n  forcePathStyle: boolean;\n  metadata: Record<string, unknown>;\n  publicBaseUrl?: string;\n  region: string;\n}\n\nexport interface StorageConnectionCredentialState {\n  activeCredentialId?: string;\n  configured: boolean;\n}\n\n/** Secret-safe connection representation returned by canonical HTTP routes. */\nexport interface StorageConnection {\n  config: PublicStorageConnectionConfig;\n  createdAt?: string;\n  credentialState: StorageConnectionCredentialState;\n  description?: string;\n  id: string;\n  isActive: boolean;\n  name: string;\n  protocol: string;\n  providerId: StorageProviderId;\n  updatedAt?: string;\n  vendor?: string;\n}\n\ninterface StorageConnectionConfigInput {\n  bucket: string;\n  defaultPrefix?: string;\n  endpoint?: string;\n  forcePathStyle?: boolean;\n  metadata?: Record<string, unknown>;\n  publicBaseUrl?: string;\n  region?: string;\n}\n\ninterface StorageConnectionCredentialsInput {\n  accessKeyId: string;\n  secretAccessKey: string;\n  sessionToken?: string;\n}\n\nexport interface CreateAwsS3ConnectionInput {\n  config: StorageConnectionConfigInput & { region: string };\n  credentials: StorageConnectionCredentialsInput;\n  description?: string;\n  name: string;\n  provider: \"aws_s3\";\n}\n\nexport interface CreateCloudflareR2ConnectionInput {\n  config: StorageConnectionConfigInput & { accountId?: string };\n  credentials: StorageConnectionCredentialsInput;\n  description?: string;\n  name: string;\n  provider: \"cloudflare_r2\";\n}\n\nexport interface CreateMinioConnectionInput {\n  config: StorageConnectionConfigInput & { endpoint: string; region: string };\n  credentials: StorageConnectionCredentialsInput;\n  description?: string;\n  name: string;\n  provider: \"minio\";\n}\n\nexport interface CreateCustomS3ConnectionInput {\n  config: StorageConnectionConfigInput & { endpoint: string; region: string };\n  credentials: StorageConnectionCredentialsInput;\n  description?: string;\n  name: string;\n  provider: \"custom_s3\" | (string & {});\n}\n\nexport type CreateStorageConnectionInput =\n  | CreateAwsS3ConnectionInput\n  | CreateCloudflareR2ConnectionInput\n  | CreateMinioConnectionInput\n  | CreateCustomS3ConnectionInput;\n\nexport type TestStorageConnectionInput = CreateStorageConnectionInput;\n\nexport type FileVisibility = \"private\" | \"organization\" | \"public\";\nexport type ManagedFileStatus =\n  | \"requested\"\n  | \"pending\"\n  | \"uploading\"\n  | \"presigned\"\n  | \"available\"\n  | \"failed\"\n  | \"abandoned\"\n  | \"soft_deleted\"\n  | \"purged\"\n  | (string & {});\n\n/** Public managed-file representation from canonical service routes. */\nexport interface ManagedFile {\n  bucket: string;\n  checksumSha256?: string;\n  connectionId?: string;\n  contentType?: string;\n  createdAt?: string;\n  createdByUserId?: string;\n  deletedAt?: string;\n  id: string;\n  key: string;\n  metadata: Record<string, unknown>;\n  name: string;\n  organizationId?: string;\n  sizeBytes?: number;\n  status: ManagedFileStatus;\n  updatedAt?: string;\n  visibility: FileVisibility;\n}\n\nexport interface UploadManagedFileInput {\n  body: Uint8Array;\n  bucket: string;\n  connectionId: string;\n  contentType?: string;\n  idempotencyKey?: string;\n  key: string;\n  organizationId?: string;\n}\n\nexport interface ListManagedFilesInput {\n  connectionId: string;\n  organizationId?: string;\n  prefix?: string;\n}\n\nexport interface MoveManagedFileInput {\n  destinationKey: string;\n}\n\nexport interface SetManagedFileVisibilityInput {\n  visibility: FileVisibility;\n}\n\nexport type FilePermissionAction =\n  | \"read\"\n  | \"write\"\n  | \"delete\"\n  | \"share\"\n  | \"owner\";\n\nexport interface FilePermission {\n  action: FilePermissionAction;\n  expiresAt?: string;\n  fileId: string;\n  grantedByUserId?: string;\n  id: string;\n  metadata: Record<string, unknown>;\n  principalId: string;\n  principalType: string;\n  revokedAt?: string;\n}\n\nexport interface GrantFilePermissionInput {\n  action: FilePermissionAction;\n  principalId: string;\n  principalType: string;\n}\n\nexport type RevokeFilePermissionInput = GrantFilePermissionInput;\n\nexport interface S3CatalogItem {\n  bucket: string;\n  created_at: string;\n  default_prefix?: string | null;\n  endpoint?: string | null;\n  force_path_style: boolean;\n  id: string;\n  is_active: boolean;\n  metadata: Record<string, unknown>;\n  name: string;\n  provider: string;\n  public_base_url?: string | null;\n  region?: string | null;\n  updated_at: string;\n}\n\nexport interface S3CredentialListItem {\n  access_key: string;\n  bucket: string;\n  created_at: string;\n  endpoint?: string | null;\n  id: string;\n  is_active: boolean;\n  name: string;\n  provider: string;\n  region?: string | null;\n  rotated_at?: string | null;\n  s3_id: string;\n}\n\nexport interface ManagedFileRecord {\n  bucket: string;\n  checksum_sha256?: string | null;\n  content_type?: string | null;\n  created_at: string;\n  created_by_user_id?: string | null;\n  deleted_at?: string | null;\n  extension?: string | null;\n  file_name?: string | null;\n  id: string;\n  is_public: boolean;\n  metadata: Record<string, unknown>;\n  mime_type?: string | null;\n  name: string;\n  organization_id?: string | null;\n  original_name?: string | null;\n  prefix_path?: string | null;\n  resource_id?: string | null;\n  s3_id?: string | null;\n  size_bytes?: number | null;\n  status: string;\n  storage_key: string;\n  updated_at: string;\n  uploaded_by_user_id?: string | null;\n  url?: string | null;\n  visibility?: \"private\" | \"organization\" | \"public\";\n}\n\nexport interface PresignedFileUrlResponse {\n  bucket: string;\n  cache_hit: boolean;\n  cache_layer: string;\n  expires_at: string;\n  expires_at_epoch_seconds: number;\n  expires_in: number;\n  file_id: string;\n  headers?: Record<string, string>;\n  purpose: string;\n  storage_key: string;\n  url: string;\n}\n\nexport interface StorageServerSideEncryptionOptions {\n  bucket_key_enabled?: boolean;\n  kms_key_id?: string;\n  server_side_encryption?:\n    | \"AES256\"\n    | \"aws:kms\"\n    | \"aws:kms:dsse\"\n    | (string & {});\n  sse?: \"AES256\" | \"aws:kms\" | \"aws:kms:dsse\" | (string & {});\n  ssekms_key_id?: string;\n}\n\nexport interface CreateStorageCatalogRequest {\n  access_key_id: string;\n  /**\n   * Cloudflare account ID for R2 catalogs when endpoint is omitted.\n   * Also accepted under `metadata.account_id`.\n   */\n  account_id?: string;\n  bucket: string;\n  default_prefix?: string;\n  /**\n   * S3-compatible API endpoint.\n   * Optional when `provider` is R2 and `account_id` (or `metadata.account_id`) is set;\n   * the Athena server derives `https://{account_id}.r2.cloudflarestorage.com`.\n   */\n  endpoint?: string;\n  force_path_style?: boolean;\n  metadata?: Record<string, unknown>;\n  name: string;\n  /** Storage provider: `s3` or `r2`; aliases include `aws`, `aws_s3`, `cloudflare_r2`, and `cloudflare-r2`. */\n  provider?: string;\n  public_base_url?: string;\n  /**\n   * Region. Optional for R2 (server defaults to `auto` after normalize).\n   */\n  region?: string;\n  secret_key: string;\n  session_token?: string;\n}\n\nexport interface UpdateStorageCatalogRequest {\n  access_key_id?: string;\n  /** Cloudflare account ID for R2 (merged into metadata / endpoint derivation). */\n  account_id?: string;\n  bucket?: string;\n  default_prefix?: string | null;\n  endpoint?: string;\n  force_path_style?: boolean;\n  is_active?: boolean;\n  metadata?: Record<string, unknown>;\n  name?: string;\n  provider?: string;\n  public_base_url?: string | null;\n  region?: string;\n  secret_key?: string;\n  session_token?: string;\n}\n\nexport interface CreateStorageUploadUrlRequest\n  extends StorageServerSideEncryptionOptions {\n  bucket?: string;\n  content_type?: string;\n  file_id?: string;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  name?: string;\n  original_name?: string;\n  public?: boolean;\n  resource_id?: string;\n  s3_id: string;\n  size_bytes?: number;\n  storage_key: string;\n  visibility?: \"private\" | \"organization\" | \"public\";\n}\n\nexport interface CreateStorageUploadUrlsRequest {\n  files: CreateStorageUploadUrlRequest[];\n}\n\nexport interface StorageUploadUrlResponse {\n  file: ManagedFileRecord;\n  upload: PresignedFileUrlResponse;\n}\n\nexport interface StorageBatchUploadUrlResponse {\n  files: StorageUploadUrlResponse[];\n}\n\nexport interface ListStorageFilesRequest {\n  bucket?: string;\n  content_type?: string;\n  key_prefix?: string;\n  limit?: number;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  name?: string;\n  offset?: number;\n  prefix?: string;\n  resource_id?: string;\n  s3_id: string;\n  status?: string;\n  visibility?: \"private\" | \"organization\" | \"public\" | (string & {});\n}\n\nexport interface StorageListFilesResponse {\n  count: number;\n  files: ManagedFileRecord[];\n  has_more?: boolean;\n  limit?: number;\n  next_offset?: number | null;\n  offset?: number;\n  total?: number;\n}\n\nexport interface UpdateStorageFileRequest {\n  bucket?: string;\n  checksum_sha256?: string;\n  content_type?: string;\n  file_name?: string;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  name?: string;\n  original_name?: string;\n  resource_id?: string;\n  size_bytes?: number;\n  status?: string;\n  storage_key?: string;\n  visibility?: \"private\" | \"organization\" | \"public\" | (string & {});\n}\n\nexport interface SetStorageFileVisibilityRequest {\n  public?: boolean;\n  visibility?: \"private\" | \"organization\" | \"public\";\n}\n\nexport interface DeleteStorageFolderRequest {\n  prefix: string;\n  s3_id: string;\n}\n\nexport interface MoveStorageFolderRequest {\n  from_prefix: string;\n  s3_id: string;\n  to_prefix: string;\n}\n\nexport interface StorageFileMutationResponse {\n  file: ManagedFileRecord;\n}\n\nexport interface StorageFolderMutationResponse {\n  prefix: string;\n  processed_files: number;\n  s3_id: string;\n}\n\nexport interface StorageFileMutationManyResponse {\n  count: number;\n  files: ManagedFileRecord[];\n}\n\nexport interface StorageFilePermissionRecord {\n  created_at: string;\n  expires_at?: string | null;\n  file_id: string;\n  granted_by_user_id?: string | null;\n  id: string;\n  metadata: Record<string, unknown>;\n  permission: \"read\" | \"write\" | \"delete\" | \"share\" | \"owner\";\n  principal_id: string;\n  principal_type: \"user\" | \"organization\" | \"team\" | \"role\";\n  revoked_at?: string | null;\n}\n\nexport interface StoragePermissionListResponse {\n  count: number;\n  permissions: StorageFilePermissionRecord[];\n}\n\nexport interface StoragePermissionCheckResponse {\n  allowed: boolean;\n  permission: string;\n}\n\nexport interface StorageAuditEventRecord {\n  actor_user_id?: string | null;\n  bucket?: string | null;\n  created_at: string;\n  error?: string | null;\n  file_id?: string | null;\n  id: string;\n  metadata: Record<string, unknown>;\n  operation: string;\n  organization_id?: string | null;\n  s3_id?: string | null;\n  status: \"success\" | \"error\";\n  storage_key?: string | null;\n}\n\nexport interface StorageAuditListResponse {\n  count: number;\n  events: StorageAuditEventRecord[];\n}\n\nexport interface ConfirmStorageUploadRequest {\n  checksum_sha256?: string;\n  content_type?: string;\n  metadata?: Record<string, unknown>;\n  size_bytes?: number;\n}\n\nexport interface SearchStorageFilesRequest {\n  bucket?: string;\n  content_type?: string;\n  key_prefix?: string;\n  limit?: number;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  name?: string;\n  offset?: number;\n  prefix?: string;\n  query?: string;\n  resource_id?: string;\n  s3_id?: string;\n  status?: string;\n  visibility?: \"private\" | \"organization\" | \"public\" | (string & {});\n}\n\nexport interface DeleteManyStorageFilesRequest {\n  file_ids: string[];\n}\n\nexport interface UpdateManyStorageFilesRequest {\n  bucket?: string;\n  checksum_sha256?: string;\n  content_type?: string;\n  file_ids: string[];\n  file_name?: string;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  name?: string;\n  original_name?: string;\n  resource_id?: string;\n  size_bytes?: number;\n  status?: string;\n  storage_key?: string;\n  visibility?: \"private\" | \"organization\" | \"public\" | (string & {});\n}\n\nexport interface SetManyStorageFileVisibilityRequest {\n  file_ids: string[];\n  public?: boolean;\n  visibility?: \"private\" | \"organization\" | \"public\";\n}\n\nexport interface CopyStorageFileRequest\n  extends StorageServerSideEncryptionOptions {\n  bucket?: string;\n  file_name?: string;\n  metadata?: Record<string, unknown>;\n  storage_key: string;\n  visibility?: \"private\" | \"organization\" | \"public\";\n}\n\nexport interface ListStorageFoldersRequest {\n  prefix: string;\n  s3_id: string;\n}\n\nexport interface TreeStorageFoldersRequest {\n  prefix: string;\n  s3_id: string;\n}\n\nexport interface StoragePermissionListRequest {\n  file_id: string;\n}\n\nexport interface StoragePermissionGrantRequest {\n  expires_at?: string;\n  file_id: string;\n  metadata?: Record<string, unknown>;\n  permission: \"read\" | \"write\" | \"delete\" | \"share\" | \"owner\";\n  principal_id: string;\n  principal_type: \"user\" | \"organization\" | \"team\" | \"role\";\n}\n\nexport interface StoragePermissionRevokeRequest {\n  file_id: string;\n  permission: \"read\" | \"write\" | \"delete\" | \"share\" | \"owner\";\n  principal_id: string;\n  principal_type: \"user\" | \"organization\" | \"team\" | \"role\";\n}\n\nexport interface StoragePermissionCheckRequest {\n  file_id: string;\n  permission: \"read\" | \"write\" | \"delete\" | \"share\" | \"owner\";\n}\n\nexport interface StorageMultipartCreateRequest\n  extends StorageServerSideEncryptionOptions {\n  content_type?: string;\n  file_id: string;\n}\n\nexport interface StorageMultipartSignPartRequest {\n  file_id: string;\n  part_number: number;\n  upload_id: string;\n}\n\nexport interface StorageMultipartCompletePartInput {\n  etag: string;\n  part_number: number;\n}\n\nexport interface StorageMultipartCompleteRequest {\n  file_id: string;\n  parts: StorageMultipartCompletePartInput[];\n  upload_id: string;\n}\n\nexport interface StorageMultipartAbortRequest {\n  file_id: string;\n  upload_id: string;\n}\n\nexport interface StorageMultipartListPartsRequest {\n  file_id: string;\n  upload_id: string;\n}\n\nexport interface DeprecatedInlineStorageConnectionFields {\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  access_key_id?: string;\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  endpoint?: string;\n  provider?: string;\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  region?: string;\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  secret_key?: string;\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  session_token?: string;\n}\n\nexport type StorageConnectionSelector =\n  | ({\n      s3_id: string;\n      s3Id?: string;\n    } & DeprecatedInlineStorageConnectionFields)\n  | ({\n      s3_id?: string;\n      s3Id: string;\n    } & DeprecatedInlineStorageConnectionFields)\n  | ({\n      s3_id?: string;\n      s3Id?: string;\n      endpoint: string;\n      region: string;\n      access_key_id: string;\n      secret_key: string;\n    } & DeprecatedInlineStorageConnectionFields);\n\nexport type StorageObjectFolderCreateRequest = StorageConnectionSelector & {\n  bucket: string;\n  prefix: string;\n};\n\nexport type StorageObjectFolderDeleteRequest = StorageObjectFolderCreateRequest;\n\nexport interface StorageObjectFolderRenameRequest\n  extends Omit<StorageObjectFolderCreateRequest, \"prefix\"> {\n  from_prefix: string;\n  to_prefix: string;\n}\n\nexport type StorageObjectBaseRequest = StorageConnectionSelector & {\n  bucket: string;\n};\n\nexport type StorageObjectRequest = StorageObjectBaseRequest & {\n  key: string;\n};\n\nexport type StorageObjectValidateRequest = StorageObjectRequest & {\n  checksum_sha256?: string;\n  etag?: string;\n};\n\nexport type StorageObjectCopyRequest = StorageObjectBaseRequest &\n  StorageServerSideEncryptionOptions & {\n    source_key: string;\n    destination_key: string;\n    destination_bucket?: string;\n  };\n\nexport type StorageObjectPublicUrlRequest = StorageObjectRequest & {\n  public_base_url?: string;\n  force_path_style?: boolean;\n};\n\nexport type StorageListObjectsRequest = StorageObjectBaseRequest & {\n  prefix?: string;\n  delimiter?: string;\n  continuation_token?: string;\n  max_keys?: number;\n};\n\nexport type StorageUpdateObjectRequest = StorageObjectRequest & {\n  acl?: string;\n  content_type?: string;\n  cache_control?: string;\n  content_disposition?: string;\n  content_encoding?: string;\n  content_language?: string;\n  metadata?: Record<string, string>;\n};\n\nexport type StorageObjectVersionListRequest = StorageObjectBaseRequest & {\n  key?: string;\n  max_keys?: number;\n  key_marker?: string;\n  version_id_marker?: string;\n  delimiter?: string;\n};\n\nexport type StorageObjectVersionMutationRequest = StorageObjectRequest & {\n  version_id: string;\n};\n\nexport type StorageSignedPostPolicyRequest = StorageObjectRequest &\n  StorageServerSideEncryptionOptions & {\n    content_type?: string;\n    min_size?: number;\n    max_size?: number;\n    expires_in?: number;\n    public_base_url?: string;\n    force_path_style?: boolean;\n    success_action_status?: string;\n  };\n\nexport type StoragePresignUploadRequest = StorageObjectRequest &\n  StorageServerSideEncryptionOptions & {\n    content_type?: string;\n  };\n\nexport type StorageBucketCorsRequest = StorageObjectBaseRequest;\n\nexport interface StorageBucketCorsRuleInput {\n  allowed_headers?: string[];\n  allowed_methods: string[];\n  allowed_origins: string[];\n  expose_headers?: string[];\n  max_age_seconds?: number;\n}\n\nexport type StorageSetBucketCorsRequest = StorageBucketCorsRequest & {\n  rules: StorageBucketCorsRuleInput[];\n};\n\nexport type StorageBucketLifecycleRequest = StorageObjectBaseRequest;\n\nexport interface StorageBucketLifecycleRuleInput {\n  abort_incomplete_multipart_upload_days?: number;\n  expiration_days?: number;\n  expired_object_delete_marker?: boolean;\n  id?: string;\n  noncurrent_version_expiration_days?: number;\n  prefix?: string;\n  status?: \"Enabled\" | \"Disabled\" | \"enabled\" | \"disabled\" | (string & {});\n}\n\nexport type StorageSetBucketLifecycleRequest = StorageBucketLifecycleRequest & {\n  rules: StorageBucketLifecycleRuleInput[];\n};\n\nexport type StorageBucketPolicyRequest = StorageObjectBaseRequest;\n\nexport type StorageSetBucketPolicyRequest = StorageBucketPolicyRequest & {\n  policy: Record<string, unknown> | string;\n};\n\nexport type StoragePublicAccessBlockRequest = StorageObjectBaseRequest;\n\nexport type StorageSetPublicAccessBlockRequest =\n  StoragePublicAccessBlockRequest & {\n    block_public_acls?: boolean;\n    ignore_public_acls?: boolean;\n    block_public_policy?: boolean;\n    restrict_public_buckets?: boolean;\n  };\n\nexport interface StorageFileVersionPathRequest {\n  file_id: string;\n  version_id: string;\n}\n\nexport interface StorageFileRetentionRequest {\n  bypass_governance?: boolean;\n  mode?: \"GOVERNANCE\" | \"COMPLIANCE\" | (string & {});\n  retain_until?: string;\n  retain_until_date?: string;\n  version_id?: string;\n}\n\nexport interface StorageAuditQueryRequest {\n  file_id?: string;\n  limit?: number;\n  offset?: number;\n}\n\nexport interface AthenaEnvelope<T> {\n  data: T;\n  message: string;\n  status: string;\n}\n\nexport type StorageFileAccessPurpose = \"read\" | \"download\" | \"stream\";\n\nexport interface GetStorageFileUrlQuery {\n  purpose?: StorageFileAccessPurpose | (string & {});\n}\n\nexport interface AthenaStorageClientConfig extends AthenaStorageFileConfig {\n  onError?: AthenaStorageErrorHandler;\n}\n\n/**\n * Credentials for signing the direct upload PUT in the client.\n * The Athena API still creates managed-file metadata so the public upload\n * result remains unchanged; file bytes go directly to this S3-compatible endpoint.\n */\nexport interface AthenaStorageDirectUploadConfig {\n  accessKeyId: string;\n  bucket?: string;\n  endpoint: string;\n  /** R2 uses path-style addressing by default. */\n  forcePathStyle?: boolean;\n  region?: string;\n  secretAccessKey: string;\n  sessionToken?: string;\n}\n\nexport interface AthenaStorageCallOptions extends AthenaGatewayCallOptions {\n  onError?: AthenaStorageErrorHandler;\n  signal?: AbortSignal;\n}\n\nexport type AthenaStorageBinaryCallOptions = AthenaStorageCallOptions;\n\nexport interface AthenaCanonicalStorageProvidersNamespace {\n  list: (options?: AthenaStorageCallOptions) => Promise<StorageProviderDescriptor[]>;\n}\n\nexport interface AthenaCanonicalStorageConnectionsNamespace {\n  create: (\n    input: CreateStorageConnectionInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageConnection>;\n  delete: (\n    id: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ connectionId: string }>;\n  get: (id: string, options?: AthenaStorageCallOptions) => Promise<StorageConnection>;\n  list: (options?: AthenaStorageCallOptions) => Promise<StorageConnection[]>;\n  test: (\n    input: TestStorageConnectionInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ config: PublicStorageConnectionConfig; ok: boolean }>;\n}\n\nexport interface AthenaCanonicalStorageFilesNamespace {\n  delete: (fileId: string, options?: AthenaStorageCallOptions) => Promise<ManagedFile>;\n  get: (fileId: string, options?: AthenaStorageCallOptions) => Promise<ManagedFile>;\n  list: (\n    input: ListManagedFilesInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<ManagedFile[]>;\n  move: (\n    fileId: string,\n    input: MoveManagedFileInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<ManagedFile>;\n  purge: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ fileId: string }>;\n  restore: (fileId: string, options?: AthenaStorageCallOptions) => Promise<ManagedFile>;\n  setVisibility: (\n    fileId: string,\n    input: SetManagedFileVisibilityInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<ManagedFile>;\n  upload: (\n    input: UploadManagedFileInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<ManagedFile>;\n}\n\nexport interface AthenaCanonicalStoragePermissionsNamespace {\n  grant: (\n    fileId: string,\n    input: GrantFilePermissionInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<FilePermission>;\n  list: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<FilePermission[]>;\n  revoke: (\n    fileId: string,\n    input: RevokeFilePermissionInput,\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ fileId: string }>;\n}\n\nexport interface AthenaStorageBaseModule {\n  createStorageCatalog: (\n    input: CreateStorageCatalogRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<S3CatalogItem>;\n  createStorageUploadUrl: (\n    input: CreateStorageUploadUrlRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageUploadUrlResponse>;\n  createStorageUploadUrls: (\n    input: CreateStorageUploadUrlsRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageBatchUploadUrlResponse>;\n  deleteStorageCatalog: (\n    id: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ id: string; deleted: boolean }>;\n  deleteStorageFile: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  deleteStorageFolder: (\n    input: DeleteStorageFolderRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFolderMutationResponse>;\n  getStorageFile: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  getStorageFileProxy: (\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions\n  ) => Promise<Response>;\n  getStorageFileUrl: (\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageCallOptions\n  ) => Promise<PresignedFileUrlResponse>;\n  listStorageCatalogs: (\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ data: S3CatalogItem[] }>;\n  listStorageCredentials: (\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ data: S3CredentialListItem[] }>;\n  listStorageFiles: (\n    input: ListStorageFilesRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageListFilesResponse>;\n  moveStorageFolder: (\n    input: MoveStorageFolderRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFolderMutationResponse>;\n  setStorageFileVisibility: (\n    fileId: string,\n    input: SetStorageFileVisibilityRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  updateStorageCatalog: (\n    id: string,\n    input: UpdateStorageCatalogRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<S3CatalogItem>;\n  updateStorageFile: (\n    fileId: string,\n    input: UpdateStorageFileRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n}\n\nexport type AthenaStoragePutBody =\n  | Blob\n  | ArrayBuffer\n  | Uint8Array\n  | ReadableStream<Uint8Array>;\n\nexport interface AthenaStoragePutOptions {\n  headers?: Record<string, string>;\n  signal?: AbortSignal;\n}\n\nexport interface AthenaStorageManagedUpload extends PresignedFileUrlResponse {\n  expiresAt: string;\n  headers: Record<string, string>;\n  method: \"PUT\";\n  put: (\n    body: AthenaStoragePutBody,\n    options?: AthenaStoragePutOptions\n  ) => Promise<Response>;\n}\n\nexport interface StorageUploadUrlResponseWithPut\n  extends Omit<StorageUploadUrlResponse, \"upload\"> {\n  upload: AthenaStorageManagedUpload;\n}\n\nexport interface StorageBatchUploadUrlResponseWithPut {\n  files: StorageUploadUrlResponseWithPut[];\n}\n\nexport interface AthenaStorageFileUploadRequest\n  extends StorageServerSideEncryptionOptions {\n  bucket?: string;\n  content_type?: string;\n  contentType?: string;\n  file_id?: string;\n  fileId?: string;\n  fileName?: string;\n  metadata?: Record<string, unknown>;\n  mime_type?: string;\n  mimeType?: string;\n  name?: string;\n  original_name?: string;\n  originalName?: string;\n  public?: boolean;\n  resource_id?: string;\n  resourceId?: string;\n  s3_id?: string;\n  s3Id?: string;\n  size_bytes?: number;\n  sizeBytes?: number;\n  storage_key?: string;\n  storageKey?: string;\n  visibility?: \"private\" | \"organization\" | \"public\";\n}\n\nexport interface AthenaStorageFileUploadManyRequest {\n  files: AthenaStorageFileUploadRequest[];\n}\n\nexport interface AthenaStorageFileNamespace extends AthenaStorageFileModule {\n  confirmUpload: (\n    fileId: string,\n    input?: ConfirmStorageUploadRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  copy: (\n    fileId: string,\n    input: CopyStorageFileRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  deleteMany: (\n    input: DeleteManyStorageFilesRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationManyResponse>;\n  deleteVersion: (\n    fileId: string,\n    versionId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  get: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  proxy: (\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions\n  ) => Promise<Response>;\n  proxyUrl: (\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  publicUrl: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  purge: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  restore: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  restoreVersion: (\n    fileId: string,\n    versionId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  retention: {\n    get: (\n      fileId: string,\n      query?: Pick<StorageFileRetentionRequest, \"version_id\">,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    set: (\n      fileId: string,\n      input: StorageFileRetentionRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n  };\n  search: (\n    input: SearchStorageFilesRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageListFilesResponse>;\n  update: (\n    fileId: string,\n    input: UpdateStorageFileRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  updateMany: (\n    input: UpdateManyStorageFilesRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationManyResponse>;\n  upload(\n    input: AthenaStorageFileUploadRequest,\n    options?: AthenaStorageCallOptions\n  ): Promise<StorageUploadUrlResponseWithPut>;\n  upload(\n    input: Parameters<AthenaStorageFileModule[\"upload\"]>[0],\n    options?: AthenaStorageCallOptions\n  ): ReturnType<AthenaStorageFileModule[\"upload\"]>;\n  uploadBinary: (\n    fileId: string,\n    body: AthenaStoragePutBody,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  uploadMany: (\n    input: AthenaStorageFileUploadManyRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageBatchUploadUrlResponseWithPut>;\n  url: (\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageCallOptions\n  ) => Promise<PresignedFileUrlResponse>;\n  versions: (\n    fileId: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  visibility: {\n    update: (\n      fileId: string,\n      input: SetStorageFileVisibilityRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageFileMutationResponse>;\n    set: (\n      fileId: string,\n      input: SetStorageFileVisibilityRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageFileMutationResponse>;\n    setMany: (\n      input: SetManyStorageFileVisibilityRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<StorageFileMutationManyResponse>;\n  };\n}\n\nexport interface AthenaStorageCredentialsNamespace {\n  list: (\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ data: S3CredentialListItem[] }>;\n}\n\nexport interface AthenaStorageCatalogNamespace {\n  create: (\n    input: CreateStorageCatalogRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<S3CatalogItem>;\n  delete: (\n    id: string,\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ id: string; deleted: boolean }>;\n  list: (\n    options?: AthenaStorageCallOptions\n  ) => Promise<{ data: S3CatalogItem[] }>;\n  update: (\n    id: string,\n    input: UpdateStorageCatalogRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<S3CatalogItem>;\n}\n\nexport interface AthenaStorageFolderNamespace {\n  delete: (\n    input: DeleteStorageFolderRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFolderMutationResponse>;\n  list: (\n    input: ListStorageFoldersRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  move: (\n    input: MoveStorageFolderRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFolderMutationResponse>;\n  tree: (\n    input: TreeStorageFoldersRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\nexport interface AthenaStoragePermissionNamespace {\n  check: (\n    input: StoragePermissionCheckRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StoragePermissionCheckResponse>;\n  grant: (\n    input: StoragePermissionGrantRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  list: (\n    input: StoragePermissionListRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StoragePermissionListResponse>;\n  revoke: (\n    input: StoragePermissionRevokeRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\nexport interface AthenaStorageObjectFolderNamespace {\n  create: (\n    input: StorageObjectFolderCreateRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  delete: (\n    input: StorageObjectFolderDeleteRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  rename: (\n    input: StorageObjectFolderRenameRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\nexport interface AthenaStorageObjectNamespace {\n  copy: (\n    input: StorageObjectCopyRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  delete: (\n    input: StorageObjectRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  deleteVersion: (\n    input: StorageObjectVersionMutationRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  exists: (\n    input: StorageObjectRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  folder: AthenaStorageObjectFolderNamespace;\n  head: (\n    input: StorageObjectRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  list: (\n    input: StorageListObjectsRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  postPolicy: (\n    input: StorageSignedPostPolicyRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  publicUrl: (\n    input: StorageObjectPublicUrlRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  restoreVersion: (\n    input: StorageObjectVersionMutationRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  update: (\n    input: StorageUpdateObjectRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  uploadUrl: (\n    input: StoragePresignUploadRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  url: (\n    input: StorageObjectRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  validate: (\n    input: StorageObjectValidateRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  versions: (\n    input: StorageObjectVersionListRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\nexport interface AthenaStorageBucketCorsNamespace {\n  delete: (\n    input: StorageBucketCorsRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  get: (\n    input: StorageBucketCorsRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  set: (\n    input: StorageSetBucketCorsRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\nexport interface AthenaStorageBucketNamespace {\n  cors: AthenaStorageBucketCorsNamespace;\n  create: (\n    input: StorageObjectBaseRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  delete: (\n    input: StorageObjectBaseRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  lifecycle: {\n    get: (\n      input: StorageBucketLifecycleRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    set: (\n      input: StorageSetBucketLifecycleRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    delete: (\n      input: StorageBucketLifecycleRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n  };\n  list: (\n    input: Omit<StorageObjectBaseRequest, \"bucket\">,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  policy: {\n    get: (\n      input: StorageBucketPolicyRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    set: (\n      input: StorageSetBucketPolicyRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    delete: (\n      input: StorageBucketPolicyRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n  };\n  publicAccess: {\n    get: (\n      input: StoragePublicAccessBlockRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    set: (\n      input: StorageSetPublicAccessBlockRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n    delete: (\n      input: StoragePublicAccessBlockRequest,\n      options?: AthenaStorageCallOptions\n    ) => Promise<Record<string, unknown>>;\n  };\n}\n\nexport interface AthenaStorageMultipartNamespace {\n  abort: (\n    input: StorageMultipartAbortRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  complete: (\n    input: StorageMultipartCompleteRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageFileMutationResponse>;\n  create: (\n    input: StorageMultipartCreateRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  listParts: (\n    input: StorageMultipartListPartsRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n  signPart: (\n    input: StorageMultipartSignPartRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<Record<string, unknown>>;\n}\n\nexport interface AthenaStorageAuditNamespace {\n  list: (\n    input: StorageAuditQueryRequest,\n    options?: AthenaStorageCallOptions\n  ) => Promise<StorageAuditListResponse>;\n}\n\nexport interface AthenaStorageModule extends AthenaStorageBaseModule {\n  audit: AthenaStorageAuditNamespace;\n  /**\n   * Database backup / restore admin API (`/admin/backups*`).\n   * Archives are stored in the server S3 or R2 profile (`ATHENA_BACKUP_S3_*`).\n   */\n  backup: AthenaStorageBackupNamespace;\n  bucket: AthenaStorageBucketNamespace;\n  catalog: AthenaStorageCatalogNamespace;\n  /** Canonical service-backed connection API. */\n  connections: AthenaCanonicalStorageConnectionsNamespace;\n  credentials: AthenaStorageCredentialsNamespace;\n  delete: AthenaStorageFileModule[\"delete\"];\n  file: AthenaStorageFileNamespace;\n  /** Canonical service-backed managed-file API. */\n  files: AthenaCanonicalStorageFilesNamespace;\n  folder: AthenaStorageFolderNamespace;\n  multipart: AthenaStorageMultipartNamespace;\n  /** Canonical service-backed managed-file authorization API. */\n  permissions: AthenaCanonicalStoragePermissionsNamespace;\n  /** Canonical provider capability discovery API. */\n  providers: AthenaCanonicalStorageProvidersNamespace;\n  object: AthenaStorageObjectNamespace;\n  permission: AthenaStoragePermissionNamespace;\n}\n\ntype StorageEnvelopeKind = \"raw\" | \"athena\";\n\ninterface StorageModuleRuntimeOptions {\n  baseUrl?: string;\n  onError?: AthenaStorageErrorHandler;\n  stripBasePath?: boolean;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction headerValue(\n  headers: Headers,\n  names: readonly string[]\n): string | undefined {\n  for (const name of names) {\n    const value = headers.get(name);\n    if (value?.trim()) {\n      return value.trim();\n    }\n  }\n  return undefined;\n}\n\nfunction storagePath(path: string): AthenaGatewayEndpointPath {\n  return path as AthenaGatewayEndpointPath;\n}\n\nfunction resolveStorageEndpointPath(\n  endpoint: AthenaGatewayEndpointPath,\n  runtimeOptions?: StorageModuleRuntimeOptions\n): AthenaGatewayEndpointPath {\n  if (!runtimeOptions?.stripBasePath) {\n    return endpoint;\n  }\n\n  const [pathname, queryText] = String(endpoint).split(\"?\", 2);\n  const trimmedPathname = pathname.startsWith(\"/storage/\")\n    ? pathname.slice(\"/storage\".length)\n    : pathname === \"/storage\"\n      ? \"/\"\n      : pathname;\n  const resolvedPath = trimmedPathname.startsWith(\"/\")\n    ? trimmedPathname\n    : `/${trimmedPathname}`;\n  return storagePath(queryText ? `${resolvedPath}?${queryText}` : resolvedPath);\n}\n\nfunction withPathParam(path: string, name: string, value: string): string {\n  return path.replace(`{${name}}`, encodeURIComponent(value));\n}\n\nfunction fillManifestPath(\n  template: string,\n  pathParams?: Record<string, string>\n): string {\n  if (!pathParams) {\n    return template;\n  }\n  let path = template;\n  for (const [key, value] of Object.entries(pathParams)) {\n    path = withPathParam(path, key, value);\n  }\n  return path;\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string): string {\n  if (isRecord(payload)) {\n    const message = payload.message ?? payload.error ?? payload.details;\n    if (typeof message === \"string\" && message.trim()) {\n      return message.trim();\n    }\n  }\n  if (typeof payload === \"string\" && payload.trim()) {\n    return payload.trim();\n  }\n  return fallback;\n}\n\nfunction resolveErrorHint(payload: unknown): string | undefined {\n  if (!isRecord(payload)) {\n    return undefined;\n  }\n  const hint = payload.hint ?? payload.suggestion;\n  return typeof hint === \"string\" && hint.trim() ? hint.trim() : undefined;\n}\n\nfunction resolveErrorCause(payload: unknown): string | undefined {\n  if (!isRecord(payload)) {\n    return undefined;\n  }\n  const cause = payload.cause ?? payload.reason;\n  return typeof cause === \"string\" && cause.trim() ? cause.trim() : undefined;\n}\n\nfunction storageCodeFromUnknown(error: unknown): AthenaStorageErrorCode {\n  if (isAthenaGatewayError(error)) {\n    if (error.code === \"INVALID_URL\") {\n      return \"INVALID_URL\";\n    }\n    if (error.code === \"NETWORK_ERROR\") {\n      return \"NETWORK_ERROR\";\n    }\n    if (error.code === \"INVALID_JSON\") {\n      return \"INVALID_JSON\";\n    }\n    if (error.code === \"HTTP_ERROR\") {\n      return \"HTTP_ERROR\";\n    }\n  }\n  return \"UNKNOWN_ERROR\";\n}\n\nasync function callStorageEndpoint<T>(\n  gateway: AthenaGatewayClient,\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod,\n  envelope: StorageEnvelopeKind,\n  payload?: unknown,\n  options?: AthenaStorageCallOptions,\n  runtimeOptions?: StorageModuleRuntimeOptions\n): Promise<T> {\n  const resolvedOptions = await gateway.resolveCallOptions(options);\n  let url: string;\n  let headers: Record<string, string>;\n  try {\n    const baseUrl = resolvedOptions?.baseUrl\n      ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n      : runtimeOptions?.baseUrl\n        ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\n        : gateway.baseUrl;\n    url = buildAthenaGatewayUrl(\n      baseUrl,\n      resolveStorageEndpointPath(endpoint, runtimeOptions)\n    );\n    headers = gateway.buildHeaders(resolvedOptions);\n  } catch (error) {\n    return rejectStorageError(\n      {\n        cause: error,\n        code: storageCodeFromUnknown(error),\n        endpoint,\n        hint: isAthenaGatewayError(error) ? error.hint : undefined,\n        message:\n          error instanceof Error\n            ? error.message\n            : `Athena storage ${method} ${endpoint} failed before sending the request`,\n        method,\n        raw: error,\n        requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\n        status: isAthenaGatewayError(error) ? error.status : 0,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n  const requestInit: RequestInit = {\n    headers,\n    method,\n    signal: resolvedOptions?.signal,\n  };\n  if (payload !== undefined && method !== \"GET\") {\n    requestInit.body = JSON.stringify(payload);\n  }\n\n  let response: Response;\n  try {\n    response = await fetch(url, requestInit);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return rejectStorageError(\n      {\n        cause: error,\n        code: \"NETWORK_ERROR\",\n        endpoint,\n        message: `Network error while calling Athena storage ${method} ${endpoint}: ${message}`,\n        method,\n        status: 0,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  let rawText: string;\n  try {\n    rawText = await response.text();\n  } catch (error) {\n    return rejectStorageError(\n      {\n        cause: error,\n        code: \"NETWORK_ERROR\",\n        endpoint,\n        message: `Athena storage ${method} ${endpoint} response body could not be read`,\n        method,\n        requestId: headerValue(response.headers, [\n          \"x-athena-request-id\",\n          \"x-request-id\",\n          \"request-id\",\n        ]),\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n  const parsedBody = parseResponseBody(\n    rawText ?? \"\",\n    response.headers.get(\"content-type\")\n  );\n  const requestId = headerValue(response.headers, [\n    \"x-athena-request-id\",\n    \"x-request-id\",\n    \"request-id\",\n  ]);\n  if (parsedBody.parseFailed) {\n    return rejectStorageError(\n      {\n        code: \"INVALID_JSON\",\n        endpoint,\n        message: `Athena storage ${method} ${endpoint} returned malformed JSON`,\n        method,\n        raw: parsedBody.parsed,\n        requestId,\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  if (!response.ok) {\n    return rejectStorageError(\n      {\n        cause: resolveErrorCause(parsedBody.parsed),\n        code: \"HTTP_ERROR\",\n        endpoint,\n        hint: resolveErrorHint(parsedBody.parsed),\n        message: resolveErrorMessage(\n          parsedBody.parsed,\n          `Athena storage ${method} ${endpoint} failed with status ${response.status}`\n        ),\n        method,\n        raw: parsedBody.parsed,\n        requestId,\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  if (envelope === \"athena\") {\n    if (!(isRecord(parsedBody.parsed) && \"data\" in parsedBody.parsed)) {\n      return rejectStorageError(\n        {\n          code: \"INVALID_ATHENA_ENVELOPE\",\n          endpoint,\n          message: `Athena storage ${method} ${endpoint} returned an invalid Athena envelope`,\n          method,\n          raw: parsedBody.parsed,\n          requestId,\n          status: response.status,\n        },\n        resolvedOptions,\n        runtimeOptions\n      );\n    }\n    return parsedBody.parsed.data as T;\n  }\n\n  return parsedBody.parsed as T;\n}\n\nasync function callStorageBinaryEndpoint(\n  gateway: AthenaGatewayClient,\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod,\n  options?: AthenaStorageBinaryCallOptions,\n  runtimeOptions?: StorageModuleRuntimeOptions\n): Promise<Response> {\n  const resolvedOptions = await gateway.resolveCallOptions(options);\n  let url: string;\n  let headers: Record<string, string>;\n  try {\n    const baseUrl = resolvedOptions?.baseUrl\n      ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n      : runtimeOptions?.baseUrl\n        ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\n        : gateway.baseUrl;\n    url = buildAthenaGatewayUrl(\n      baseUrl,\n      resolveStorageEndpointPath(endpoint, runtimeOptions)\n    );\n    headers = gateway.buildHeaders(resolvedOptions);\n  } catch (error) {\n    return rejectStorageError(\n      {\n        cause: error,\n        code: storageCodeFromUnknown(error),\n        endpoint,\n        hint: isAthenaGatewayError(error) ? error.hint : undefined,\n        message:\n          error instanceof Error\n            ? error.message\n            : `Athena storage ${method} ${endpoint} failed before sending the request`,\n        method,\n        raw: error,\n        requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\n        status: isAthenaGatewayError(error) ? error.status : 0,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  let response: Response;\n  try {\n    response = await fetch(url, {\n      headers,\n      method,\n      signal: resolvedOptions?.signal,\n    });\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return rejectStorageError(\n      {\n        cause: error,\n        code: \"NETWORK_ERROR\",\n        endpoint,\n        message: `Network error while calling Athena storage ${method} ${endpoint}: ${message}`,\n        method,\n        status: 0,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  if (response.ok) {\n    return response;\n  }\n\n  const requestId = headerValue(response.headers, [\n    \"x-athena-request-id\",\n    \"x-request-id\",\n    \"request-id\",\n  ]);\n  let rawErrorBody: unknown = null;\n  try {\n    const rawText = await response.text();\n    const parsedBody = parseResponseBody(\n      rawText ?? \"\",\n      response.headers.get(\"content-type\")\n    );\n    rawErrorBody = parsedBody.parsed;\n  } catch (error) {\n    return rejectStorageError(\n      {\n        cause: error,\n        code: \"NETWORK_ERROR\",\n        endpoint,\n        message: `Athena storage ${method} ${endpoint} error response body could not be read`,\n        method,\n        requestId,\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  return rejectStorageError(\n    {\n      cause: resolveErrorCause(rawErrorBody),\n      code: \"HTTP_ERROR\",\n      endpoint,\n      hint: resolveErrorHint(rawErrorBody),\n      message: resolveErrorMessage(\n        rawErrorBody,\n        `Athena storage ${method} ${endpoint} failed with status ${response.status}`\n      ),\n      method,\n      raw: rawErrorBody,\n      requestId,\n      status: response.status,\n    },\n    resolvedOptions,\n    runtimeOptions\n  );\n}\n\nfunction isBlobBody(body: AthenaStoragePutBody): body is Blob {\n  return typeof Blob !== \"undefined\" && body instanceof Blob;\n}\n\nfunction isReadableStreamBody(\n  body: AthenaStoragePutBody\n): body is ReadableStream<Uint8Array> {\n  return (\n    typeof ReadableStream !== \"undefined\" && body instanceof ReadableStream\n  );\n}\n\nasync function putPresignedUploadBody(\n  uploadUrl: string,\n  uploadHeaders: Record<string, string>,\n  body: AthenaStoragePutBody,\n  options?: AthenaStoragePutOptions\n): Promise<Response> {\n  const headers = new Headers(uploadHeaders);\n  for (const [key, value] of Object.entries(options?.headers ?? {})) {\n    headers.set(key, value);\n  }\n  if (!headers.has(\"Content-Type\") && isBlobBody(body) && body.type) {\n    headers.set(\"Content-Type\", body.type);\n  }\n\n  const init: RequestInit & { duplex?: \"half\" } = {\n    body: body as RequestInit[\"body\"],\n    headers,\n    method: \"PUT\",\n    signal: options?.signal,\n  };\n  if (isReadableStreamBody(body)) {\n    init.duplex = \"half\";\n  }\n  return fetch(uploadUrl, init);\n}\n\nfunction attachManagedUpload(\n  upload: PresignedFileUrlResponse\n): AthenaStorageManagedUpload {\n  const headers: Record<string, string> = { ...(upload.headers ?? {}) };\n  return {\n    ...upload,\n    expiresAt: upload.expires_at,\n    headers,\n    method: \"PUT\",\n    put(body, options) {\n      return putPresignedUploadBody(upload.url, headers, body, options);\n    },\n  };\n}\n\nfunction attachUploadHelper(\n  response: StorageUploadUrlResponse\n): StorageUploadUrlResponseWithPut {\n  return {\n    ...response,\n    upload: attachManagedUpload(response.upload),\n  };\n}\n\nfunction attachUploadHelpers(\n  response: StorageBatchUploadUrlResponse\n): StorageBatchUploadUrlResponseWithPut {\n  return {\n    files: response.files.map(attachUploadHelper),\n  };\n}\n\nfunction normalizeUploadUrlRequest(\n  input: AthenaStorageFileUploadRequest\n): CreateStorageUploadUrlRequest {\n  const s3_id = input.s3_id ?? input.s3Id;\n  const storage_key = input.storage_key ?? input.storageKey;\n  if (!s3_id?.trim()) {\n    throw new Error(\"athena.storage.file.upload requires s3_id or s3Id\");\n  }\n  if (!storage_key?.trim()) {\n    throw new Error(\n      \"athena.storage.file.upload requires storage_key or storageKey\"\n    );\n  }\n  const fileName = input.fileName?.trim();\n  const originalName = input.originalName?.trim();\n  return {\n    bucket: input.bucket,\n    bucket_key_enabled: input.bucket_key_enabled,\n    content_type: input.content_type ?? input.contentType,\n    file_id: input.file_id ?? input.fileId,\n    kms_key_id: input.kms_key_id,\n    metadata: input.metadata,\n    mime_type: input.mime_type ?? input.mimeType,\n    name: input.name ?? fileName,\n    original_name: input.original_name ?? originalName ?? fileName,\n    public: input.public,\n    resource_id: input.resource_id ?? input.resourceId,\n    s3_id,\n    server_side_encryption: input.server_side_encryption,\n    size_bytes: input.size_bytes ?? input.sizeBytes,\n    sse: input.sse,\n    ssekms_key_id: input.ssekms_key_id,\n    storage_key,\n    visibility: input.visibility,\n  };\n}\n\nasync function callStorageUploadBinaryEndpoint<T>(\n  gateway: AthenaGatewayClient,\n  endpoint: AthenaGatewayEndpointPath,\n  body: AthenaStoragePutBody,\n  options?: AthenaStorageCallOptions,\n  runtimeOptions?: StorageModuleRuntimeOptions\n): Promise<T> {\n  const resolvedOptions = await gateway.resolveCallOptions(options);\n  let url: string;\n  let headers: Record<string, string>;\n  try {\n    const baseUrl = resolvedOptions?.baseUrl\n      ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n      : runtimeOptions?.baseUrl\n        ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\n        : gateway.baseUrl;\n    url = buildAthenaGatewayUrl(\n      baseUrl,\n      resolveStorageEndpointPath(endpoint, runtimeOptions)\n    );\n    headers = gateway.buildHeaders(resolvedOptions);\n  } catch (error) {\n    return rejectStorageError(\n      {\n        cause: error,\n        code: storageCodeFromUnknown(error),\n        endpoint,\n        hint: isAthenaGatewayError(error) ? error.hint : undefined,\n        message:\n          error instanceof Error\n            ? error.message\n            : `Athena storage PUT ${endpoint} failed before sending the request`,\n        method: \"PUT\",\n        raw: error,\n        requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\n        status: isAthenaGatewayError(error) ? error.status : 0,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  // Clear prior content-type so Blob.type / body can own it (delete is intentional).\n  // biome-ignore lint/performance/noDelete: must remove keys; undefined assign breaks Headers typing\n  delete headers[\"Content-Type\"];\n  // biome-ignore lint/performance/noDelete: must remove keys; undefined assign breaks Headers typing\n  delete headers[\"content-type\"];\n  if (isBlobBody(body) && body.type) {\n    headers[\"Content-Type\"] = body.type;\n  }\n\n  const requestInit: RequestInit & { duplex?: \"half\" } = {\n    body: body as RequestInit[\"body\"],\n    headers,\n    method: \"PUT\",\n    signal: resolvedOptions?.signal,\n  };\n  if (isReadableStreamBody(body)) {\n    requestInit.duplex = \"half\";\n  }\n\n  let response: Response;\n  try {\n    response = await fetch(url, requestInit);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    return rejectStorageError(\n      {\n        cause: error,\n        code: \"NETWORK_ERROR\",\n        endpoint,\n        message: `Network error while calling Athena storage PUT ${endpoint}: ${message}`,\n        method: \"PUT\",\n        status: 0,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  let rawText: string;\n  try {\n    rawText = await response.text();\n  } catch (error) {\n    return rejectStorageError(\n      {\n        cause: error,\n        code: \"NETWORK_ERROR\",\n        endpoint,\n        message: `Athena storage PUT ${endpoint} response body could not be read`,\n        method: \"PUT\",\n        requestId: headerValue(response.headers, [\n          \"x-athena-request-id\",\n          \"x-request-id\",\n          \"request-id\",\n        ]),\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n\n  const parsedBody = parseResponseBody(\n    rawText ?? \"\",\n    response.headers.get(\"content-type\")\n  );\n  const requestId = headerValue(response.headers, [\n    \"x-athena-request-id\",\n    \"x-request-id\",\n    \"request-id\",\n  ]);\n  if (parsedBody.parseFailed) {\n    return rejectStorageError(\n      {\n        code: \"INVALID_JSON\",\n        endpoint,\n        message: `Athena storage PUT ${endpoint} returned malformed JSON`,\n        method: \"PUT\",\n        raw: parsedBody.parsed,\n        requestId,\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n  if (!response.ok) {\n    return rejectStorageError(\n      {\n        cause: resolveErrorCause(parsedBody.parsed),\n        code: \"HTTP_ERROR\",\n        endpoint,\n        hint: resolveErrorHint(parsedBody.parsed),\n        message: resolveErrorMessage(\n          parsedBody.parsed,\n          `Athena storage PUT ${endpoint} failed with status ${response.status}`\n        ),\n        method: \"PUT\",\n        raw: parsedBody.parsed,\n        requestId,\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n  if (!(isRecord(parsedBody.parsed) && \"data\" in parsedBody.parsed)) {\n    return rejectStorageError(\n      {\n        code: \"INVALID_ATHENA_ENVELOPE\",\n        endpoint,\n        message: `Athena storage PUT ${endpoint} returned an invalid Athena envelope`,\n        method: \"PUT\",\n        raw: parsedBody.parsed,\n        requestId,\n        status: response.status,\n      },\n      resolvedOptions,\n      runtimeOptions\n    );\n  }\n  return parsedBody.parsed.data as T;\n}\n\nexport function createStorageModule(\n  gateway: AthenaGatewayClient,\n  runtimeOptions?: AthenaStorageClientConfig\n): AthenaStorageModule {\n  const resolvedRuntimeOptions = runtimeOptions as\n    | StorageModuleRuntimeOptions\n    | undefined;\n  /**\n   * Thin JSON route binder: METHOD+path+envelope come only from storageSdkManifest.\n   * Hand bodies remain for binary, dual-visibility, and specialized upload helpers.\n   */\n  const callManifestRoute = <T>(\n    name: StorageSdkManifestMethodName,\n    args?: {\n      body?: unknown;\n      options?: AthenaStorageCallOptions;\n      pathParams?: Record<string, string>;\n      query?: object;\n    }\n  ): Promise<T> => {\n    const route = requireStorageManifestRoute(name);\n    if (\"binary\" in route && route.binary) {\n      throw new Error(\n        `Storage route ${name} is binary; use specialized binary helpers`\n      );\n    }\n    let path = fillManifestPath(route.path, args?.pathParams);\n    if (args?.query) {\n      path = appendQuery(path, args.query);\n    }\n    const method = route.method as AthenaGatewayMethod;\n    const routeRuntimeOptions = name.includes(\"CanonicalStorage\")\n      ? { ...resolvedRuntimeOptions, stripBasePath: false }\n      : resolvedRuntimeOptions;\n    return callStorageEndpoint<T>(\n      gateway,\n      storagePath(path),\n      method,\n      route.responseEnvelope,\n      args?.body,\n      args?.options,\n      routeRuntimeOptions\n    );\n  };\n\n  const callStorageFileVisibility = (\n    fileId: string,\n    method: Extract<AthenaGatewayMethod, \"PATCH\" | \"POST\">,\n    input: SetStorageFileVisibilityRequest,\n    options?: AthenaStorageCallOptions\n  ) => {\n    const routeName =\n      method === \"PATCH\"\n        ? (\"setStorageFileVisibility\" as const)\n        : (\"postStorageFileVisibility\" as const);\n    return callManifestRoute<StorageFileMutationResponse>(routeName, {\n      body: input,\n      options,\n      pathParams: { file_id: fileId },\n    });\n  };\n\n  const toCanonicalProviderId = (provider: string): StorageProviderId => {\n    if (provider === \"s3\") return \"aws_s3\";\n    if (provider === \"r2\") return \"cloudflare_r2\";\n    return provider;\n  };\n\n  const serializeConnectionInput = (\n    input: CreateStorageConnectionInput\n  ): Record<string, unknown> => ({\n    accessKeyId: input.credentials.accessKeyId,\n    bucket: input.config.bucket,\n    defaultPrefix: input.config.defaultPrefix,\n    description: input.description,\n    endpoint: input.config.endpoint,\n    forcePathStyle: input.config.forcePathStyle,\n    metadata: input.config.metadata,\n    name: input.name,\n    provider: input.provider,\n    publicBaseUrl: input.config.publicBaseUrl,\n    region: input.config.region,\n    secretAccessKey: input.credentials.secretAccessKey,\n    sessionToken: input.credentials.sessionToken,\n  });\n\n  const encodeBase64 = (bytes: Uint8Array): string => {\n    let binary = \"\";\n    for (const byte of bytes) binary += String.fromCharCode(byte);\n    return btoa(binary);\n  };\n\n  const providers: AthenaCanonicalStorageProvidersNamespace = {\n    async list(options) {\n      const result = await callManifestRoute<{\n        providers: Array<\n          Omit<StorageProviderDescriptor, \"id\" | \"protocol\" | \"connectionSchema\"> & {\n            connectionConfig?: { fields?: StorageProviderConnectionField[] };\n            provider: string;\n          }\n        >;\n      }>(\"listCanonicalStorageProviders\", { options });\n      return result.providers.map((provider) => ({\n        connectionSchema: { fields: provider.connectionConfig?.fields ?? [] },\n        defaultEndpointTemplate: provider.defaultEndpointTemplate,\n        defaultRegion: provider.defaultRegion,\n        forcePathStyleDefault: provider.forcePathStyleDefault,\n        id: toCanonicalProviderId(provider.provider),\n        implementationStatus: provider.implementationStatus,\n        integration: provider.integration,\n        protocol: \"s3_compatible\",\n      }));\n    },\n  };\n\n  const connections: AthenaCanonicalStorageConnectionsNamespace = {\n    async create(input, options) {\n      const result = await callManifestRoute<{ connection: StorageConnection }>(\n        \"createCanonicalStorageConnection\",\n        { body: serializeConnectionInput(input), options }\n      );\n      return result.connection;\n    },\n    async delete(id, options) {\n      return callManifestRoute<{ connectionId: string }>(\n        \"deleteCanonicalStorageConnection\",\n        { options, pathParams: { id } }\n      );\n    },\n    async get(id, options) {\n      const result = await callManifestRoute<{ connection: StorageConnection }>(\n        \"getCanonicalStorageConnection\",\n        { options, pathParams: { id } }\n      );\n      return result.connection;\n    },\n    async list(options) {\n      const result = await callManifestRoute<{ connections: StorageConnection[] }>(\n        \"listCanonicalStorageConnections\",\n        { options }\n      );\n      return result.connections;\n    },\n    async test(input, options) {\n      return callManifestRoute<{\n        config: PublicStorageConnectionConfig;\n        ok: boolean;\n      }>(\"testCanonicalStorageConnection\", {\n        body: serializeConnectionInput(input),\n        options,\n      });\n    },\n  };\n\n  const files: AthenaCanonicalStorageFilesNamespace = {\n    async delete(fileId, options) {\n      const result = await callManifestRoute<{ file: ManagedFile }>(\n        \"deleteCanonicalStorageFile\",\n        { options, pathParams: { file_id: fileId } }\n      );\n      return result.file;\n    },\n    async get(fileId, options) {\n      const result = await callManifestRoute<{ file: ManagedFile }>(\n        \"getCanonicalStorageFile\",\n        { options, pathParams: { file_id: fileId } }\n      );\n      return result.file;\n    },\n    async list(input, options) {\n      const result = await callManifestRoute<{ files: ManagedFile[] }>(\n        \"listCanonicalStorageFiles\",\n        { body: input, options }\n      );\n      return result.files;\n    },\n    async move(fileId, input, options) {\n      const result = await callManifestRoute<{ file: ManagedFile }>(\n        \"moveCanonicalStorageFile\",\n        { body: input, options, pathParams: { file_id: fileId } }\n      );\n      return result.file;\n    },\n    purge(fileId, options) {\n      return callManifestRoute<{ fileId: string }>(\"purgeCanonicalStorageFile\", {\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    async restore(fileId, options) {\n      const result = await callManifestRoute<{ file: ManagedFile }>(\n        \"restoreCanonicalStorageFile\",\n        { options, pathParams: { file_id: fileId } }\n      );\n      return result.file;\n    },\n    async setVisibility(fileId, input, options) {\n      const result = await callManifestRoute<{ file: ManagedFile }>(\n        \"setCanonicalStorageFileVisibility\",\n        { body: input, options, pathParams: { file_id: fileId } }\n      );\n      return result.file;\n    },\n    async upload(input, options) {\n      const result = await callManifestRoute<{ file: ManagedFile }>(\n        \"uploadCanonicalStorageFile\",\n        {\n          body: {\n            ...input,\n            body: encodeBase64(input.body),\n          },\n          options,\n        }\n      );\n      return result.file;\n    },\n  };\n\n  const permissions: AthenaCanonicalStoragePermissionsNamespace = {\n    async grant(fileId, input, options) {\n      const result = await callManifestRoute<{ permission: FilePermission }>(\n        \"grantCanonicalStoragePermission\",\n        { body: input, options, pathParams: { file_id: fileId } }\n      );\n      return result.permission;\n    },\n    async list(fileId, options) {\n      const result = await callManifestRoute<{ permissions: FilePermission[] }>(\n        \"listCanonicalStoragePermissions\",\n        { options, pathParams: { file_id: fileId } }\n      );\n      return result.permissions;\n    },\n    revoke(fileId, input, options) {\n      return callManifestRoute<{ fileId: string }>(\n        \"revokeCanonicalStoragePermission\",\n        { body: input, options, pathParams: { file_id: fileId } }\n      );\n    },\n  };\n\n  const base: AthenaStorageBaseModule = {\n    createStorageCatalog(input, options) {\n      return callManifestRoute(\"createStorageCatalog\", {\n        body: input,\n        options,\n      });\n    },\n    createStorageUploadUrl(input, options) {\n      return callManifestRoute(\"createStorageUploadUrl\", {\n        body: input,\n        options,\n      });\n    },\n    createStorageUploadUrls(input, options) {\n      return callManifestRoute(\"createStorageUploadUrls\", {\n        body: input,\n        options,\n      });\n    },\n    deleteStorageCatalog(id, options) {\n      return callManifestRoute(\"deleteStorageCatalog\", {\n        options,\n        pathParams: { id },\n      });\n    },\n    deleteStorageFile(fileId, options) {\n      return callManifestRoute(\"deleteStorageFile\", {\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    deleteStorageFolder(input, options) {\n      return callManifestRoute(\"deleteStorageFolder\", {\n        body: input,\n        options,\n      });\n    },\n    getStorageFile(fileId, options) {\n      return callManifestRoute(\"getStorageFile\", {\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    getStorageFileProxy(fileId, query, options) {\n      const route = requireStorageManifestRoute(\"getStorageFileProxy\");\n      const path = appendQuery(\n        fillManifestPath(route.path, { file_id: fileId }),\n        query\n      );\n      return callStorageBinaryEndpoint(\n        gateway,\n        storagePath(path),\n        route.method as AthenaGatewayMethod,\n        options,\n        resolvedRuntimeOptions\n      );\n    },\n    getStorageFileUrl(fileId, query, options) {\n      return callManifestRoute(\"getStorageFileUrl\", {\n        options,\n        pathParams: { file_id: fileId },\n        query,\n      });\n    },\n    listStorageCatalogs(options) {\n      return callManifestRoute(\"listStorageCatalogs\", { options });\n    },\n    listStorageCredentials(options) {\n      return callManifestRoute(\"listStorageCredentials\", { options });\n    },\n    listStorageFiles(input, options) {\n      return callManifestRoute(\"listStorageFiles\", { body: input, options });\n    },\n    moveStorageFolder(input, options) {\n      return callManifestRoute(\"moveStorageFolder\", { body: input, options });\n    },\n    setStorageFileVisibility(fileId, input, options) {\n      return callStorageFileVisibility(fileId, \"PATCH\", input, options);\n    },\n    updateStorageCatalog(id, input, options) {\n      return callManifestRoute(\"updateStorageCatalog\", {\n        body: input,\n        options,\n        pathParams: { id },\n      });\n    },\n    updateStorageFile(fileId, input, options) {\n      return callManifestRoute(\"updateStorageFile\", {\n        body: input,\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n  };\n  const multipart: AthenaStorageMultipartNamespace = {\n    abort(input, options) {\n      return callManifestRoute(\"abortStorageMultipartUpload\", {\n        body: input,\n        options,\n      });\n    },\n    complete(input, options) {\n      return callManifestRoute(\"completeStorageMultipartUpload\", {\n        body: input,\n        options,\n      });\n    },\n    create(input, options) {\n      return callManifestRoute(\"createStorageMultipartUpload\", {\n        body: input,\n        options,\n      });\n    },\n    listParts(input, options) {\n      return callManifestRoute(\"listStorageMultipartParts\", {\n        body: input,\n        options,\n      });\n    },\n    signPart(input, options) {\n      return callManifestRoute(\"signStorageMultipartPart\", {\n        body: input,\n        options,\n      });\n    },\n  };\n  const fileFacade = createStorageFileModule(base, runtimeOptions, multipart);\n  const fileUpload = ((\n    input:\n      | AthenaStorageFileUploadRequest\n      | Parameters<AthenaStorageFileModule[\"upload\"]>[0],\n    options?: AthenaStorageCallOptions\n  ) => {\n    if (isRecord(input) && \"files\" in input) {\n      return fileFacade.upload(\n        input as unknown as Parameters<AthenaStorageFileModule[\"upload\"]>[0],\n        options\n      );\n    }\n    return base\n      .createStorageUploadUrl(\n        normalizeUploadUrlRequest(input as AthenaStorageFileUploadRequest),\n        options\n      )\n      .then(attachUploadHelper);\n  }) as AthenaStorageFileNamespace[\"upload\"];\n  const fileDelete = ((\n    input: string | readonly string[],\n    options?: AthenaStorageCallOptions\n  ) =>\n    fileFacade.delete(\n      input as unknown as Parameters<AthenaStorageFileModule[\"delete\"]>[0],\n      options\n    )) as AthenaStorageFileNamespace[\"delete\"];\n\n  const file: AthenaStorageFileNamespace = {\n    ...fileFacade,\n    confirmUpload(fileId, input, options) {\n      return callManifestRoute(\"confirmStorageUpload\", {\n        body: input ?? {},\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    copy(fileId, input, options) {\n      return callManifestRoute(\"copyStorageFile\", {\n        body: input,\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    delete: fileDelete,\n    deleteMany(input, options) {\n      return callManifestRoute(\"deleteManyStorageFiles\", {\n        body: input,\n        options,\n      });\n    },\n    deleteVersion(fileId, versionId, options) {\n      return callManifestRoute(\"deleteStorageFileVersion\", {\n        options,\n        pathParams: { file_id: fileId, version_id: versionId },\n      });\n    },\n    get(fileId, options) {\n      return base.getStorageFile(fileId, options);\n    },\n    proxy(fileId, query, options) {\n      return base.getStorageFileProxy(fileId, query, options);\n    },\n    proxyUrl(fileId, query, options) {\n      return callManifestRoute(\"getStorageFileProxyUrl\", {\n        options,\n        pathParams: { file_id: fileId },\n        query,\n      });\n    },\n    publicUrl(fileId, options) {\n      return callManifestRoute(\"getStorageFilePublicUrl\", {\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    purge(fileId, options) {\n      return callManifestRoute(\"purgeStorageFile\", {\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    restore(fileId, options) {\n      return callManifestRoute(\"restoreStorageFile\", {\n        body: {},\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    restoreVersion(fileId, versionId, options) {\n      return callManifestRoute(\"restoreStorageFileVersion\", {\n        body: {},\n        options,\n        pathParams: { file_id: fileId, version_id: versionId },\n      });\n    },\n    retention: {\n      get(fileId, query, options) {\n        return callManifestRoute(\"getStorageFileRetention\", {\n          options,\n          pathParams: { file_id: fileId },\n          query,\n        });\n      },\n      set(fileId, input, options) {\n        return callManifestRoute(\"setStorageFileRetention\", {\n          body: input,\n          options,\n          pathParams: { file_id: fileId },\n        });\n      },\n    },\n    search(input, options) {\n      return callManifestRoute(\"searchStorageFiles\", { body: input, options });\n    },\n    update(fileId, input, options) {\n      return base.updateStorageFile(fileId, input, options);\n    },\n    updateMany(input, options) {\n      return callManifestRoute(\"updateManyStorageFiles\", {\n        body: input,\n        options,\n      });\n    },\n    upload: fileUpload,\n    uploadBinary(fileId, body, options) {\n      const route = requireStorageManifestRoute(\"uploadStorageFileBinary\");\n      return callStorageUploadBinaryEndpoint(\n        gateway,\n        storagePath(fillManifestPath(route.path, { file_id: fileId })),\n        body,\n        options,\n        resolvedRuntimeOptions\n      );\n    },\n    uploadMany(input, options) {\n      return base\n        .createStorageUploadUrls(\n          { files: input.files.map(normalizeUploadUrlRequest) },\n          options\n        )\n        .then(attachUploadHelpers);\n    },\n    url(fileId, query, options) {\n      return base.getStorageFileUrl(fileId, query, options);\n    },\n    versions(fileId, options) {\n      return callManifestRoute(\"listStorageFileVersions\", {\n        options,\n        pathParams: { file_id: fileId },\n      });\n    },\n    visibility: {\n      set(fileId, input, options) {\n        return callStorageFileVisibility(fileId, \"POST\", input, options);\n      },\n      setMany(input, options) {\n        return callManifestRoute(\"setManyStorageFileVisibility\", {\n          body: input,\n          options,\n        });\n      },\n      update(fileId, input, options) {\n        return base.setStorageFileVisibility(fileId, input, options);\n      },\n    },\n  };\n  const credentials: AthenaStorageCredentialsNamespace = {\n    list(options) {\n      return base.listStorageCredentials(options);\n    },\n  };\n  const catalog: AthenaStorageCatalogNamespace = {\n    create(input, options) {\n      return base.createStorageCatalog(input, options);\n    },\n    delete(id, options) {\n      return base.deleteStorageCatalog(id, options);\n    },\n    list(options) {\n      return base.listStorageCatalogs(options);\n    },\n    update(id, input, options) {\n      return base.updateStorageCatalog(id, input, options);\n    },\n  };\n  const folder: AthenaStorageFolderNamespace = {\n    delete(input, options) {\n      return base.deleteStorageFolder(input, options);\n    },\n    list(input, options) {\n      return callManifestRoute(\"listStorageFolders\", { body: input, options });\n    },\n    move(input, options) {\n      return base.moveStorageFolder(input, options);\n    },\n    tree(input, options) {\n      return callManifestRoute(\"treeStorageFolders\", { body: input, options });\n    },\n  };\n  const permission: AthenaStoragePermissionNamespace = {\n    check(input, options) {\n      return callManifestRoute(\"checkStoragePermission\", {\n        body: input,\n        options,\n      });\n    },\n    grant(input, options) {\n      return callManifestRoute(\"grantStoragePermission\", {\n        body: input,\n        options,\n      });\n    },\n    list(input, options) {\n      return callManifestRoute(\"listStoragePermissions\", {\n        body: input,\n        options,\n      });\n    },\n    revoke(input, options) {\n      return callManifestRoute(\"revokeStoragePermission\", {\n        body: input,\n        options,\n      });\n    },\n  };\n  const objectFolder: AthenaStorageObjectFolderNamespace = {\n    create(input, options) {\n      return callManifestRoute(\"createStorageObjectFolder\", {\n        body: input,\n        options,\n      });\n    },\n    delete(input, options) {\n      return callManifestRoute(\"deleteStorageObjectFolder\", {\n        body: input,\n        options,\n      });\n    },\n    rename(input, options) {\n      return callManifestRoute(\"renameStorageObjectFolder\", {\n        body: input,\n        options,\n      });\n    },\n  };\n  const object: AthenaStorageObjectNamespace = {\n    copy(input, options) {\n      return callManifestRoute(\"copyStorageObject\", { body: input, options });\n    },\n    delete(input, options) {\n      return callManifestRoute(\"deleteStorageObject\", { body: input, options });\n    },\n    deleteVersion(input, options) {\n      return callManifestRoute(\"deleteStorageObjectVersion\", {\n        body: input,\n        options,\n      });\n    },\n    exists(input, options) {\n      return callManifestRoute(\"existsStorageObject\", { body: input, options });\n    },\n    folder: objectFolder,\n    head(input, options) {\n      return callManifestRoute(\"headStorageObject\", { body: input, options });\n    },\n    list(input, options) {\n      return callManifestRoute(\"listStorageObjects\", { body: input, options });\n    },\n    postPolicy(input, options) {\n      return callManifestRoute(\"createStorageObjectPostPolicy\", {\n        body: input,\n        options,\n      });\n    },\n    publicUrl(input, options) {\n      return callManifestRoute(\"getStorageObjectPublicUrl\", {\n        body: input,\n        options,\n      });\n    },\n    restoreVersion(input, options) {\n      return callManifestRoute(\"restoreStorageObjectVersion\", {\n        body: input,\n        options,\n      });\n    },\n    update(input, options) {\n      return callManifestRoute(\"updateStorageObject\", { body: input, options });\n    },\n    uploadUrl(input, options) {\n      return callManifestRoute(\"createStorageObjectUploadUrl\", {\n        body: input,\n        options,\n      });\n    },\n    url(input, options) {\n      return callManifestRoute(\"getStorageObjectUrl\", { body: input, options });\n    },\n    validate(input, options) {\n      return callManifestRoute(\"validateStorageObject\", {\n        body: input,\n        options,\n      });\n    },\n    versions(input, options) {\n      return callManifestRoute(\"listStorageObjectVersions\", {\n        body: input,\n        options,\n      });\n    },\n  };\n  const bucket: AthenaStorageBucketNamespace = {\n    cors: {\n      delete(input, options) {\n        return callManifestRoute(\"deleteStorageBucketCors\", {\n          body: input,\n          options,\n        });\n      },\n      get(input, options) {\n        return callManifestRoute(\"getStorageBucketCors\", {\n          body: input,\n          options,\n        });\n      },\n      set(input, options) {\n        return callManifestRoute(\"setStorageBucketCors\", {\n          body: input,\n          options,\n        });\n      },\n    },\n    create(input, options) {\n      return callManifestRoute(\"createStorageBucket\", { body: input, options });\n    },\n    delete(input, options) {\n      return callManifestRoute(\"deleteStorageBucket\", { body: input, options });\n    },\n    lifecycle: {\n      delete(input, options) {\n        return callManifestRoute(\"deleteStorageBucketLifecycle\", {\n          body: input,\n          options,\n        });\n      },\n      get(input, options) {\n        return callManifestRoute(\"getStorageBucketLifecycle\", {\n          body: input,\n          options,\n        });\n      },\n      set(input, options) {\n        return callManifestRoute(\"setStorageBucketLifecycle\", {\n          body: input,\n          options,\n        });\n      },\n    },\n    list(input, options) {\n      return callManifestRoute(\"listStorageBuckets\", { body: input, options });\n    },\n    policy: {\n      delete(input, options) {\n        return callManifestRoute(\"deleteStorageBucketPolicy\", {\n          body: input,\n          options,\n        });\n      },\n      get(input, options) {\n        return callManifestRoute(\"getStorageBucketPolicy\", {\n          body: input,\n          options,\n        });\n      },\n      set(input, options) {\n        return callManifestRoute(\"setStorageBucketPolicy\", {\n          body: input,\n          options,\n        });\n      },\n    },\n    publicAccess: {\n      delete(input, options) {\n        return callManifestRoute(\"deleteStorageBucketPublicAccess\", {\n          body: input,\n          options,\n        });\n      },\n      get(input, options) {\n        return callManifestRoute(\"getStorageBucketPublicAccess\", {\n          body: input,\n          options,\n        });\n      },\n      set(input, options) {\n        return callManifestRoute(\"setStorageBucketPublicAccess\", {\n          body: input,\n          options,\n        });\n      },\n    },\n  };\n  const audit: AthenaStorageAuditNamespace = {\n    list(input, options) {\n      return callManifestRoute(\"listStorageAuditEvents\", {\n        body: input,\n        options,\n      });\n    },\n  };\n  const backup = createStorageBackupModule(\n    gateway,\n    resolvedRuntimeOptions,\n    (path, method, payload, options) =>\n      callStorageEndpoint(\n        gateway,\n        storagePath(path),\n        method,\n        \"raw\",\n        payload,\n        options,\n        resolvedRuntimeOptions\n      )\n  );\n  return {\n    ...base,\n    audit,\n    backup,\n    bucket,\n    catalog,\n    connections,\n    credentials,\n    delete: file.delete,\n    file,\n    files,\n    folder,\n    multipart,\n    object,\n    permission,\n    permissions,\n    providers,\n  };\n}\n","import type {\n  AthenaResult,\n  AthenaResultError,\n  AthenaResultFormatter,\n} from \"./client-result.ts\";\nimport {\n  createResultFormatter,\n  executeRead,\n  toSingleResult,\n} from \"./client-result.ts\";\nimport {\n  buildDebugSelectQuery,\n  buildDeleteDebugSql,\n  buildInsertDebugSql,\n  buildRpcDebugSql,\n  buildTypedSelectQuery,\n  buildUpdateDebugSql,\n  resolveTableNameForCall,\n} from \"./client-sql.ts\";\nimport type {\n  AthenaConditionArrayValue,\n  AthenaConditionCastType,\n  AthenaConditionOperator,\n  AthenaConditionValue,\n  AthenaDeletePayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayCondition,\n  AthenaGatewayConnectionOptions,\n  AthenaGatewayConnectionResult,\n  AthenaGatewayErrorDetails,\n  AthenaInsertPayload,\n  AthenaJsonObject,\n  AthenaJsonValue,\n  AthenaRpcCallOptions,\n  AthenaRpcFilter,\n  AthenaRpcFilterOperator,\n  AthenaRpcPayload,\n  AthenaSortBy,\n  AthenaUpdatePayload,\n  BackendConfig,\n} from \"./gateway/types.ts\";\n\nexport type { AthenaResult, AthenaResultError } from \"./client-result.ts\";\n\nimport type {\n  AthenaRequestOptions,\n  AthenaRequestResponse,\n} from \"./client-request.ts\";\nimport { createAthenaRequest } from \"./client-request.ts\";\n\nexport type {\n  AthenaRequestMethod,\n  AthenaRequestOptions,\n  AthenaRequestQueryValueMap,\n  AthenaRequestResponse,\n  AthenaRequestService,\n} from \"./client-request.ts\";\n\nimport {\n  type AthenaAdminQueryInput,\n  type AthenaAdminQueryResult,\n  classifyRawSqlOperation,\n  createAdminQuery,\n  defaultExpectedShapeForOperation,\n  maybeWarnRawQueryDeprecated,\n} from \"./admin/query.ts\";\nimport { createAuthModule } from \"./auth/client.ts\";\nimport type {\n  AthenaAuthBindings,\n  AthenaAuthClientConfig,\n} from \"./auth/types.ts\";\nimport { createChatModule } from \"./chat/module.ts\";\nimport type {\n  AthenaChatModule,\n  AthenaChatWebSocketFactory,\n} from \"./chat/types.ts\";\nimport {\n  type AthenaCompatibilityCache,\n  type AthenaCompatibilityReport,\n  createCompatibilityCache,\n  discoverCompatibility,\n} from \"./compatibility/report.ts\";\nimport type { AthenaDbModule } from \"./db/module.ts\";\nimport {\n  type AthenaGatewayClient,\n  createAthenaGatewayClient,\n  createAthenaGatewayClientView,\n} from \"./gateway/client.ts\";\nimport { normalizeAthenaGatewayBaseUrl } from \"./gateway/url.ts\";\nimport type {\n  AthenaFindManyOptions,\n  AthenaFindManyResult,\n  AthenaSelectShape,\n  AthenaValidatedSelectShape,\n} from \"./query-ast.ts\";\nimport {\n  compileOrderBy,\n  compileSelectShape,\n  compileWhere,\n  selectShapeUsesRelationSchema,\n  shouldUseUuidTextComparison,\n} from \"./query-ast.ts\";\nimport type { AthenaQueryDebugAst } from \"./query-debug-ast.ts\";\nimport {\n  buildDeleteDebugAst,\n  buildFindManyCompiledDebugAst,\n  buildFindManyDirectDebugAst,\n  buildInsertDebugAst,\n  buildRawQueryDebugAst,\n  buildRpcDebugAst,\n  buildSelectDebugAst,\n  buildUpdateDebugAst,\n  buildUpsertDebugAst,\n} from \"./query-debug-ast.ts\";\nimport type { AthenaQueryTracer } from \"./query-tracing.ts\";\nimport {\n  captureTraceCallsite,\n  createQueryTracer,\n  createTraceCallsiteStore,\n  executeWithQueryTrace,\n} from \"./query-tracing.ts\";\nimport type { AthenaFindManyAstPayload } from \"./query-transport.ts\";\nimport {\n  canUseFindManyAstTransport,\n  createSelectTransportPlan,\n  findManyAstWhereRequiresLegacyTransport,\n  normalizeFindManyAstWhere,\n  toFindManyAstOrder,\n} from \"./query-transport.ts\";\nimport type {\n  AthenaNormalizedHealth,\n  AthenaReleaseIdentity,\n} from \"./release/identity.ts\";\nimport {\n  isAthenaModelTarget,\n  resolveAthenaModelTargetTableName,\n} from \"./schema/model-target.ts\";\nimport type {\n  AthenaSelectInput,\n  AthenaTypecheckedColumnKey,\n  AthenaValidatedSelectInput,\n} from \"./select-column-types.ts\";\nimport type {\n  AthenaStorageClientConfig,\n  AthenaStorageModule,\n} from \"./storage/module.ts\";\nimport { createStorageModule } from \"./storage/module.ts\";\nimport type { AthenaRequestHeaderOverrideFields } from \"./utils/athena-request-headers.ts\";\n\nexport type {\n  AthenaColumnKey,\n  AthenaColumnKeyWithAutocomplete,\n  AthenaResolvedColumnKey,\n  AthenaSelectArrayElement,\n  AthenaSelectColumnsFor,\n  AthenaSelectInput,\n  AthenaSelectInputHints,\n  AthenaTypecheckedColumnKey,\n  AthenaValidatedSelectInput,\n  HasKnownSelectColumns,\n} from \"./select-column-types.ts\";\n\nimport type {\n  AthenaClientModelForTableName,\n  AthenaClientModelsInput,\n  AthenaClientTableName,\n  AthenaModelTarget,\n  InsertOf,\n  RowOf,\n  UpdateOf,\n} from \"./schema/types.ts\";\n\nexport interface InternalClientBehaviorOptions {\n  /**\n   * Build and attach a normalized operation AST for runtime debugging.\n   *\n   * When enabled, successful Athena results expose a non-enumerable debug AST\n   * that can be read with `getAthenaDebugAst(...)`. If tracing is also enabled,\n   * the same AST is included on emitted trace events.\n   */\n  debugAst?: boolean;\n  /**\n   * Send the original `findMany(...)` AST body for clean object-select reads.\n   * This requires gateway support and falls back to legacy compiled transport\n   * when a chain carries filter/pagination state that the AST payload cannot\n   * represent losslessly yet.\n   */\n  findManyAst?: boolean;\n  /**\n   * Control deprecation warnings for root `query()` (ATHENA_RAW_SQL_COMPAT_DEPRECATED).\n   * - `false`: never warn\n   * - `true`: always warn (once per client)\n   * - `auto` / omitted: warn in non-production only (once per client)\n   */\n  rawQueryDiagnostics?: boolean | \"auto\";\n  /**\n   * Retry retryable read failures (`select`, `findMany`, `query`) with a fixed internal policy.\n   *\n   * Applies two additional attempts with exponential backoff and jitter.\n   */\n  retryReads?: boolean;\n  /**\n   * Emit execution diagnostics for every query/mutation/RPC invocation.\n   * Includes payload, synthesized SQL, full outcome, and best-effort callsite metadata.\n   */\n  traceQueries?: boolean | AthenaQueryTraceOptions;\n}\n\nexport interface AthenaQueryTraceOptions {\n  /**\n   * When false, tracing is off even if diagnostics mode would enable it.\n   * When true, tracing stays on even in quiet (`diagnostics: 'auto'`) environments.\n   * When omitted, quiet environments disable object-form trace options.\n   */\n  enabled?: boolean;\n  /**\n   * Custom sink for trace events. Defaults to console.info.\n   */\n  logger?: (event: AthenaQueryTraceEvent) => void;\n}\n\nexport interface AthenaQueryTraceCallsite {\n  column: number;\n  fileName: string;\n  filePath: string;\n  frame?: string;\n  functionName?: string;\n  line: number;\n}\n\nexport interface AthenaQueryTraceEvent {\n  ast?: AthenaQueryDebugAst;\n  callsite: AthenaQueryTraceCallsite | null;\n  durationMs: number;\n  endpoint:\n    | \"/gateway/fetch\"\n    | \"/gateway/insert\"\n    | \"/gateway/update\"\n    | \"/gateway/delete\"\n    | \"/gateway/rpc\"\n    | \"/gateway/query\"\n    | `/rpc/${string}`;\n  functionName?: string;\n  operation:\n    | \"select\"\n    | \"insert\"\n    | \"upsert\"\n    | \"update\"\n    | \"delete\"\n    | \"rpc\"\n    | \"query\";\n  options?: AthenaGatewayCallOptions | AthenaRpcCallOptions;\n  outcome?: {\n    status: number;\n    error: AthenaResultError | null;\n    errorDetails?: AthenaGatewayErrorDetails | null;\n    count?: number | null;\n    data: unknown;\n    raw: unknown;\n  };\n  payload: unknown;\n  sql: string;\n  table?: string;\n  thrownError?: unknown;\n  timestamp: string;\n}\n\ninterface TableBuilderState {\n  conditions: AthenaGatewayCondition[];\n  currentPage?: number;\n  limit?: number;\n  offset?: number;\n  order?: AthenaSortBy;\n  pageSize?: number;\n  totalPages?: number;\n}\n\ninterface ConditionCastHints {\n  columnCast?: AthenaConditionCastType;\n  valueCast?: AthenaConditionCastType;\n}\n\ntype MutationSingleResult<Result> =\n  Result extends Array<infer Item> ? Item | null : Result | null;\ntype MutationResultRow<Result> =\n  Result extends Array<infer Item> ? Item : Result;\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>;\ntype FilterColumnKey<Row> = Extract<keyof NonNullable<Row>, string>;\n/** Known keys when the row shape is concrete; `string` when untyped / index signature. */\ntype ResolvedFilterColumnKey<Row> = [FilterColumnKey<Row>] extends [never]\n  ? string\n  : string extends FilterColumnKey<Row>\n    ? string\n    : FilterColumnKey<Row>;\n/**\n * Table-name argument for free-form `from<Row>(table)`.\n * - No client `models` → `string` (nothing to complete).\n * - With `models` → known bare/qualified names (IntelliSense + reject unknowns).\n *   Prefer `.from(\"users\")` without a row generic so the row type is inferred from the model.\n */\ntype UntypedTableName<TModels> = [TModels] extends [never]\n  ? string\n  : [AthenaClientTableName<TModels>] extends [never]\n    ? string\n    : AthenaClientTableName<TModels>;\ntype ResolvedClientTableModel<TModels, TTableName extends string> = Extract<\n  AthenaClientModelForTableName<TModels, TTableName>,\n  AthenaModelTarget\n>;\ntype ClientTableQueryBuilder<\n  TModels,\n  TTableName extends string,\n> = TableQueryBuilder<\n  RowOf<ResolvedClientTableModel<TModels, TTableName>>,\n  InsertOf<ResolvedClientTableModel<TModels, TTableName>>,\n  UpdateOf<ResolvedClientTableModel<TModels, TTableName>>\n>;\n/**\n * Select/returning/single column input.\n *\n * - Typed row: validates string lists; arrays use the model-key union.\n * - Untyped row: plain `TValue` (`string | string[]`).\n */\ntype SelectColumnsFor<\n  Row,\n  TValue extends AthenaSelectInput,\n> = AthenaValidatedSelectInput<Row, TValue>;\nconst DEFAULT_COLUMNS = \"*\";\n\ntype SelectDebugAstFactory = (input: {\n  tableName: string;\n  columns: string | string[];\n  executionState: TableBuilderState;\n  plan: ReturnType<typeof createSelectTransportPlan>;\n}) => AthenaQueryDebugAst;\n\nexport interface MutationQuery<Result, Row = MutationResultRow<Result>>\n  extends PromiseLike<AthenaResult<Result>> {\n  catch: <TResult = never>(\n    onrejected?:\n      | ((reason: unknown) => TResult | PromiseLike<TResult>)\n      | undefined\n      | null\n  ) => Promise<AthenaResult<Result> | TResult>;\n  finally: (\n    onfinally?: (() => void) | undefined | null\n  ) => Promise<AthenaResult<Result>>;\n  maybeSingle: <const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaResult<MutationSingleResult<Result>>>;\n  returning: <const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaResult<Result>>;\n  select: <const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaResult<Result>>;\n  single: <const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaResult<MutationSingleResult<Result>>>;\n  then: <TResult1 = AthenaResult<Result>, TResult2 = never>(\n    onfulfilled?:\n      | ((value: AthenaResult<Result>) => TResult1 | PromiseLike<TResult1>)\n      | undefined\n      | null,\n    onrejected?:\n      | ((reason: unknown) => TResult2 | PromiseLike<TResult2>)\n      | undefined\n      | null\n  ) => Promise<TResult1 | TResult2>;\n}\n\nfunction mergeOptions<T extends { headers?: Record<string, string> }>(\n  ...options: Array<T | undefined>\n): T | undefined {\n  return options.reduce<T | undefined>((acc, next) => {\n    if (!next) {\n      return acc;\n    }\n    const merged = { ...(acc ?? {}), ...next } as T;\n    if (acc?.headers || next.headers) {\n      merged.headers = {\n        ...(acc?.headers ?? {}),\n        ...(next.headers ?? {}),\n      };\n    }\n    return merged;\n  }, undefined);\n}\n\nfunction asAthenaJsonObject(value: unknown): AthenaJsonObject {\n  return value as unknown as AthenaJsonObject;\n}\n\nfunction asAthenaJsonObjectArray(values: unknown[]): AthenaJsonObject[] {\n  return values as unknown as AthenaJsonObject[];\n}\n\nfunction normalizeSelectColumnsInput(\n  columns?: AthenaSelectInput\n): string | string[] | undefined {\n  if (columns === undefined) {\n    return;\n  }\n  if (typeof columns === \"string\") {\n    return columns;\n  }\n  return [...columns];\n}\n\nfunction createMutationQuery<Result, Row = MutationResultRow<Result>>(\n  executor: (\n    columns?: string | string[],\n    options?: AthenaGatewayCallOptions,\n    callsite?: AthenaQueryTraceCallsite | null\n  ) => Promise<AthenaResult<Result>>,\n  defaultColumns: AthenaSelectInput | null = DEFAULT_COLUMNS,\n  tracer?: AthenaQueryTracer,\n  initialCallsite?: AthenaQueryTraceCallsite | null\n): MutationQuery<Result, Row> {\n  let selectedColumns: AthenaSelectInput | undefined =\n    defaultColumns === null ? undefined : defaultColumns;\n  let selectedOptions: AthenaGatewayCallOptions | undefined;\n  let promise: Promise<AthenaResult<Result>> | null = null;\n  const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite);\n\n  const run = (\n    columns?: AthenaSelectInput,\n    options?: AthenaGatewayCallOptions,\n    callsite?: AthenaQueryTraceCallsite | null\n  ) => {\n    const payloadColumns = columns ?? selectedColumns;\n    const payloadOptions = options ?? selectedOptions;\n    if (!promise) {\n      promise = executor(\n        normalizeSelectColumnsInput(payloadColumns),\n        payloadOptions,\n        callsiteStore.resolve(callsite)\n      );\n    }\n    return promise;\n  };\n\n  const mutationQuery: MutationQuery<Result, Row> = {\n    catch(onrejected) {\n      return run(selectedColumns, selectedOptions).catch(onrejected);\n    },\n    finally(onfinally) {\n      return run(selectedColumns, selectedOptions).finally(onfinally);\n    },\n    maybeSingle(\n      columns?: AthenaSelectInput,\n      options?: AthenaGatewayCallOptions\n    ) {\n      return mutationQuery.single(columns, options);\n    },\n    returning(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n      return mutationQuery.select(columns, options);\n    },\n    select(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n      selectedColumns = columns;\n      selectedOptions = options ?? selectedOptions;\n      return run(columns, options, captureTraceCallsite(tracer));\n    },\n    single(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n      selectedColumns = columns;\n      selectedOptions = options ?? selectedOptions;\n      return run(columns, options, captureTraceCallsite(tracer)).then(\n        toSingleResult\n      );\n    },\n    // Thenable so `await query` resolves the deferred run without an extra API.\n    // biome-ignore lint/suspicious/noThenProperty: intentional thenable query builder\n    then(onfulfilled, onrejected) {\n      return run(selectedColumns, selectedOptions).then(\n        onfulfilled,\n        onrejected\n      );\n    },\n  };\n\n  return mutationQuery;\n}\n\nexport interface OrderOptions {\n  ascending?: boolean;\n}\n\n/** Shared filter chain - supports eq, limit, etc. in any order relative to select/update */\ninterface FilterChain<Self, Row> {\n  containedBy: (\n    column: ResolvedFilterColumnKey<Row>,\n    values: AthenaConditionArrayValue\n  ) => Self;\n  contains: (\n    column: ResolvedFilterColumnKey<Row>,\n    values: AthenaConditionArrayValue\n  ) => Self;\n  currentPage: (value: number) => Self;\n  eq: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  eqCast: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue,\n    cast: AthenaConditionCastType\n  ) => Self;\n  eqUuid: (column: ResolvedFilterColumnKey<Row>, value: string) => Self;\n  gt: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  gte: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  ilike: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  in: (\n    column: ResolvedFilterColumnKey<Row>,\n    values: AthenaConditionArrayValue\n  ) => Self;\n  is: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  like: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  limit: (count: number) => Self;\n  lt: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  lte: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  match: (\n    filters: Partial<Record<ResolvedFilterColumnKey<Row>, AthenaConditionValue>>\n  ) => Self;\n  neq: (\n    column: ResolvedFilterColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  not: (\n    columnOrExpression: ResolvedFilterColumnKey<Row> | string,\n    operator?: AthenaConditionOperator,\n    value?: AthenaConditionValue\n  ) => Self;\n  offset: (count: number) => Self;\n  or: (expression: string) => Self;\n  order: (column: ResolvedFilterColumnKey<Row>, options?: OrderOptions) => Self;\n  pageSize: (value: number) => Self;\n  range: (from: number, to: number) => Self;\n  totalPages: (value: number) => Self;\n}\n\n/** Chain returned by select() - supports filters and single/maybeSingle before execution */\nexport interface SelectChain<Row, SelectedRow = Row>\n  extends FilterChain<SelectChain<Row, SelectedRow>, Row>,\n    PromiseLike<AthenaResult<SelectedRow[]>> {\n  maybeSingle: <\n    T = SelectedRow,\n    const TColumns extends AthenaSelectInput = string,\n  >(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaResult<T | null>>;\n  single: <T = SelectedRow, const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaResult<T | null>>;\n}\n\n/** Chain returned by update() - supports filters before execution, plus select/returning */\nexport interface UpdateChain<Row>\n  extends FilterChain<UpdateChain<Row>, Row>,\n    MutationQuery<Row[], Row> {}\n\ninterface RpcFilterChain<Self, Row> {\n  eq: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  gt: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  gte: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  ilike: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  in: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    values: AthenaConditionArrayValue\n  ) => Self;\n  is: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  like: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  lt: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  lte: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n  neq: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    value: AthenaConditionValue\n  ) => Self;\n}\n\nexport interface RpcOrderOptions {\n  ascending?: boolean;\n}\n\nexport interface RpcQueryBuilder<Row>\n  extends RpcFilterChain<RpcQueryBuilder<Row>, Row>,\n    PromiseLike<AthenaResult<Row[]>> {\n  limit: (count: number) => RpcQueryBuilder<Row>;\n  maybeSingle: <T = Row, const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaRpcCallOptions\n  ) => Promise<AthenaResult<T | null>>;\n  offset: (count: number) => RpcQueryBuilder<Row>;\n  order: (\n    column: AthenaTypecheckedColumnKey<Row>,\n    options?: RpcOrderOptions\n  ) => RpcQueryBuilder<Row>;\n  range: (from: number, to: number) => RpcQueryBuilder<Row>;\n  select: <const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaRpcCallOptions\n  ) => Promise<AthenaResult<Row[]>>;\n  single: <T = Row, const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaRpcCallOptions\n  ) => Promise<AthenaResult<T | null>>;\n}\n\nexport interface AthenaFromOptions {\n  schema?: string;\n}\n\nexport interface TableQueryBuilder<\n  Row,\n  Insert = Partial<Row>,\n  Update = Partial<Insert>,\n  TContext = unknown,\n> extends FilterChain<TableQueryBuilder<Row, Insert, Update, TContext>, Row> {\n  delete: (\n    options?: AthenaGatewayCallOptions & { resourceId?: string }\n  ) => MutationQuery<Row | null, Row>;\n  findMany: <const TSelect extends AthenaSelectShape>(\n    options: AthenaFindManyOptions<Row, TSelect> & {\n      select: AthenaValidatedSelectShape<Row, TSelect>;\n    }\n  ) => Promise<AthenaResult<AthenaFindManyResult<Row, TSelect, TContext>[]>>;\n  insert(\n    values: Insert,\n    options?: AthenaGatewayCallOptions\n  ): MutationQuery<Row, Row>;\n  insert(\n    values: Insert[],\n    options?: AthenaGatewayCallOptions\n  ): MutationQuery<Row[], Row>;\n  maybeSingle: <T = Row, const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaResult<T | null>>;\n  reset: () => TableQueryBuilder<Row, Insert, Update, TContext>;\n  select: <T = Row, const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions\n  ) => SelectChain<Row, T>;\n  single: <T = Row, const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaResult<T | null>>;\n  update: (\n    values: Update,\n    options?: AthenaGatewayCallOptions\n  ) => UpdateChain<Row>;\n  upsert(\n    values: Insert,\n    options?: AthenaGatewayCallOptions & {\n      updateBody?: Update;\n      onConflict?:\n        | ResolvedFilterColumnKey<Row>\n        | ResolvedFilterColumnKey<Row>[]\n        | (string & {})\n        | Array<string & {}>;\n    }\n  ): MutationQuery<Row, Row>;\n  upsert(\n    values: Insert[],\n    options?: AthenaGatewayCallOptions & {\n      updateBody?: Update;\n      onConflict?:\n        | ResolvedFilterColumnKey<Row>\n        | ResolvedFilterColumnKey<Row>[]\n        | (string & {})\n        | Array<string & {}>;\n    }\n  ): MutationQuery<Row[], Row>;\n}\n\nfunction getResourceId(state: TableBuilderState): string | undefined {\n  const candidate = state.conditions.find(\n    (condition) =>\n      condition.operator === \"eq\" &&\n      (condition.column === \"resource_id\" || condition.column === \"id\")\n  );\n  return candidate?.value?.toString();\n}\n\nfunction stringifyFilterValue(\n  value: AthenaConditionValue | AthenaConditionArrayValue | string\n): string {\n  if (Array.isArray(value)) {\n    return value.join(\",\");\n  }\n  return String(value);\n}\n\nfunction createFilterMethods<Self, Row>(\n  state: TableBuilderState,\n  addCondition: (\n    operator: AthenaConditionOperator,\n    column?: string,\n    value?: AthenaConditionValue | AthenaConditionArrayValue | string,\n    hints?: ConditionCastHints\n  ) => void,\n  self: Self\n): FilterChain<Self, Row> {\n  return {\n    containedBy(\n      column: ResolvedFilterColumnKey<Row>,\n      values: AthenaConditionArrayValue\n    ) {\n      addCondition(\"containedBy\", String(column), values);\n      return self;\n    },\n    contains(\n      column: ResolvedFilterColumnKey<Row>,\n      values: AthenaConditionArrayValue\n    ) {\n      addCondition(\"contains\", String(column), values);\n      return self;\n    },\n    currentPage(value: number) {\n      state.currentPage = value;\n      return self;\n    },\n    eq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      const columnName = String(column);\n      if (shouldUseUuidTextComparison(columnName, value)) {\n        addCondition(\"eq\", columnName, value, { columnCast: \"text\" });\n      } else {\n        addCondition(\"eq\", columnName, value);\n      }\n      return self;\n    },\n    eqCast(\n      column: ResolvedFilterColumnKey<Row>,\n      value: AthenaConditionValue,\n      cast: AthenaConditionCastType\n    ) {\n      addCondition(\"eq\", String(column), value, { valueCast: cast });\n      return self;\n    },\n    eqUuid(column: ResolvedFilterColumnKey<Row>, value: string) {\n      addCondition(\"eq\", String(column), value, { valueCast: \"uuid\" });\n      return self;\n    },\n    gt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition(\"gt\", String(column), value);\n      return self;\n    },\n    gte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition(\"gte\", String(column), value);\n      return self;\n    },\n    ilike(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition(\"ilike\", String(column), value);\n      return self;\n    },\n    in(\n      column: ResolvedFilterColumnKey<Row>,\n      values: AthenaConditionArrayValue\n    ) {\n      addCondition(\"in\", String(column), values);\n      return self;\n    },\n    is(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition(\"is\", String(column), value);\n      return self;\n    },\n    like(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition(\"like\", String(column), value);\n      return self;\n    },\n    limit(count: number) {\n      state.limit = count;\n      return self;\n    },\n    lt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition(\"lt\", String(column), value);\n      return self;\n    },\n    lte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition(\"lte\", String(column), value);\n      return self;\n    },\n    match(\n      filters: Partial<\n        Record<ResolvedFilterColumnKey<Row>, AthenaConditionValue>\n      >\n    ) {\n      Object.entries(\n        filters as Record<string, AthenaConditionValue | undefined>\n      ).forEach(([column, value]) => {\n        if (value === undefined) {\n          return;\n        }\n        if (shouldUseUuidTextComparison(column, value)) {\n          addCondition(\"eq\", column, value, { columnCast: \"text\" });\n        } else {\n          addCondition(\"eq\", column, value);\n        }\n      });\n      return self;\n    },\n    neq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition(\"neq\", String(column), value);\n      return self;\n    },\n    not(\n      columnOrExpression: ResolvedFilterColumnKey<Row> | string,\n      operator?: AthenaConditionOperator,\n      value?: AthenaConditionValue\n    ) {\n      const expression = String(columnOrExpression);\n      if (operator !== null && value !== undefined) {\n        addCondition(\n          \"not\",\n          undefined,\n          `${expression}.${operator}.${stringifyFilterValue(value)}`\n        );\n      } else {\n        addCondition(\"not\", undefined, expression);\n      }\n      return self;\n    },\n    offset(count: number) {\n      state.offset = count;\n      return self;\n    },\n    or(expression: string) {\n      addCondition(\"or\", undefined, expression);\n      return self;\n    },\n    order(column: ResolvedFilterColumnKey<Row>, options?: OrderOptions) {\n      state.order = {\n        direction: options?.ascending === false ? \"descending\" : \"ascending\",\n        field: String(column),\n      };\n      return self;\n    },\n    pageSize(value: number) {\n      state.pageSize = value;\n      return self;\n    },\n    range(from: number, to: number) {\n      state.offset = from;\n      state.limit = to - from + 1;\n      return self;\n    },\n    totalPages(value: number) {\n      state.totalPages = value;\n      return self;\n    },\n  };\n}\n\nfunction toRpcSelect(columns?: AthenaSelectInput) {\n  if (!columns) {\n    return;\n  }\n  if (typeof columns === \"string\") {\n    return columns;\n  }\n  return columns.join(\",\");\n}\n\nfunction createRpcFilterMethods<Self>(filters: AthenaRpcFilter[], self: Self) {\n  const addFilter = (\n    operator: AthenaRpcFilterOperator,\n    column: string,\n    value: AthenaConditionValue | AthenaConditionArrayValue | string\n  ) => {\n    filters.push({ column, operator, value });\n  };\n\n  return {\n    eq(column: string, value: AthenaConditionValue) {\n      addFilter(\"eq\", column, value);\n      return self;\n    },\n    gt(column: string, value: AthenaConditionValue) {\n      addFilter(\"gt\", column, value);\n      return self;\n    },\n    gte(column: string, value: AthenaConditionValue) {\n      addFilter(\"gte\", column, value);\n      return self;\n    },\n    ilike(column: string, value: AthenaConditionValue) {\n      addFilter(\"ilike\", column, value);\n      return self;\n    },\n    in(column: string, values: AthenaConditionArrayValue) {\n      addFilter(\"in\", column, values);\n      return self;\n    },\n    is(column: string, value: AthenaConditionValue) {\n      addFilter(\"is\", column, value);\n      return self;\n    },\n    like(column: string, value: AthenaConditionValue) {\n      addFilter(\"like\", column, value);\n      return self;\n    },\n    lt(column: string, value: AthenaConditionValue) {\n      addFilter(\"lt\", column, value);\n      return self;\n    },\n    lte(column: string, value: AthenaConditionValue) {\n      addFilter(\"lte\", column, value);\n      return self;\n    },\n    neq(column: string, value: AthenaConditionValue) {\n      addFilter(\"neq\", column, value);\n      return self;\n    },\n  };\n}\n\nfunction createRpcBuilder<Row>(\n  functionName: string,\n  args: AthenaJsonObject | undefined,\n  baseOptions: AthenaRpcCallOptions | undefined,\n  client: ReturnType<typeof createAthenaGatewayClient>,\n  formatGatewayResult: AthenaResultFormatter,\n  tracer?: AthenaQueryTracer,\n  initialCallsite?: AthenaQueryTraceCallsite | null,\n  debugAstEnabled = false\n): RpcQueryBuilder<Row> {\n  const state: {\n    filters: AthenaRpcFilter[];\n    limit?: number;\n    offset?: number;\n    order?: { column: string; ascending?: boolean };\n  } = {\n    filters: [],\n  };\n\n  let selectedColumns: AthenaSelectInput | undefined;\n  let selectedOptions: AthenaRpcCallOptions | undefined;\n  let promise: Promise<AthenaResult<Row[]>> | null = null;\n  const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite);\n\n  const executeRpc = async <SelectedRow = Row>(\n    columns?: AthenaSelectInput,\n    options?: AthenaRpcCallOptions,\n    callsite?: AthenaQueryTraceCallsite | null\n  ): Promise<AthenaResult<SelectedRow[]>> => {\n    const mergedOptions = mergeOptions(baseOptions, options);\n    const normalizedSelectedColumns = normalizeSelectColumnsInput(columns);\n    const payload: AthenaRpcPayload = {\n      args,\n      count: mergedOptions?.count,\n      filters: state.filters.length ? [...state.filters] : undefined,\n      function: functionName,\n      head: mergedOptions?.head,\n      limit: state.limit,\n      offset: state.offset,\n      order: state.order,\n      schema: mergedOptions?.schema,\n      select: toRpcSelect(columns),\n    };\n    const endpoint: AthenaQueryTraceEvent[\"endpoint\"] = mergedOptions?.get\n      ? `/rpc/${functionName}`\n      : \"/gateway/rpc\";\n    const sql = buildRpcDebugSql(payload);\n    const debugAst = debugAstEnabled\n      ? buildRpcDebugAst({\n          args,\n          endpoint,\n          functionName,\n          payload,\n          selectedColumns: normalizedSelectedColumns,\n          state,\n        })\n      : undefined;\n    return executeWithQueryTrace(\n      tracer,\n      {\n        ast: debugAst,\n        endpoint,\n        functionName,\n        operation: \"rpc\",\n        options: mergedOptions,\n        payload,\n        sql,\n      },\n      async () => {\n        const response = await client.rpcGateway<SelectedRow[]>(\n          payload,\n          mergedOptions\n        );\n        return formatGatewayResult(response, { operation: \"rpc\" });\n      },\n      callsite\n    );\n  };\n\n  const run = (\n    columns?: AthenaSelectInput,\n    options?: AthenaRpcCallOptions,\n    callsite?: AthenaQueryTraceCallsite | null\n  ) => {\n    const payloadColumns = columns ?? selectedColumns;\n    const payloadOptions = options ?? selectedOptions;\n    if (!promise) {\n      promise = executeRpc<Row>(\n        payloadColumns,\n        payloadOptions,\n        callsiteStore.resolve(callsite)\n      );\n    }\n    return promise;\n  };\n\n  const builder = {} as RpcQueryBuilder<Row>;\n  const filterMethods = createRpcFilterMethods(state.filters, builder);\n\n  Object.assign(builder, filterMethods, {\n    catch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\n      return run(selectedColumns, selectedOptions).catch(onrejected);\n    },\n    finally(onfinally?: () => void) {\n      return run(selectedColumns, selectedOptions).finally(onfinally);\n    },\n    limit(count: number) {\n      state.limit = count;\n      return builder;\n    },\n    maybeSingle<T = Row>(\n      columns?: AthenaSelectInput,\n      options?: AthenaRpcCallOptions\n    ) {\n      return builder.single<T, AthenaSelectInput>(columns, options);\n    },\n    offset(count: number) {\n      state.offset = count;\n      return builder;\n    },\n    order(column: string, options?: RpcOrderOptions) {\n      state.order = { ascending: options?.ascending ?? true, column };\n      return builder;\n    },\n    range(from: number, to: number) {\n      state.offset = from;\n      state.limit = to - from + 1;\n      return builder;\n    },\n    select(columns?: AthenaSelectInput, options?: AthenaRpcCallOptions) {\n      selectedColumns = columns;\n      selectedOptions = options ?? selectedOptions;\n      return run(columns, options, captureTraceCallsite(tracer));\n    },\n    async single<T = Row>(\n      columns?: AthenaSelectInput,\n      options?: AthenaRpcCallOptions\n    ) {\n      const result = await run(columns, options, captureTraceCallsite(tracer));\n      return toSingleResult(result) as unknown as AthenaResult<T | null>;\n    },\n    // Thenable so `await query` resolves the deferred run without an extra API.\n    // biome-ignore lint/suspicious/noThenProperty: intentional thenable query builder\n    then<T1 = AthenaResult<Row[]>, T2 = never>(\n      onfulfilled?: (v: AthenaResult<Row[]>) => T1 | PromiseLike<T1>,\n      onrejected?: (reason: unknown) => T2 | PromiseLike<T2>\n    ) {\n      return run(selectedColumns, selectedOptions).then(\n        onfulfilled,\n        onrejected\n      );\n    },\n  });\n\n  return builder;\n}\n\nfunction createTableBuilder<\n  Row,\n  Insert = Partial<Row>,\n  Update = Partial<Insert>,\n  TContext = unknown,\n>(\n  tableName: string,\n  client: ReturnType<typeof createAthenaGatewayClient>,\n  formatGatewayResult: AthenaResultFormatter,\n  tracer?: AthenaQueryTracer,\n  behavior?: InternalClientBehaviorOptions\n): TableQueryBuilder<Row, Insert, Update, TContext> {\n  const state: TableBuilderState = {\n    conditions: [],\n  };\n  const debugAstEnabled = Boolean(behavior?.debugAst);\n\n  const addCondition = (\n    operator: AthenaConditionOperator,\n    column?: string,\n    value?: AthenaConditionValue | AthenaConditionArrayValue | string,\n    hints?: ConditionCastHints\n  ) => {\n    const condition: AthenaGatewayCondition = { operator };\n    if (column) {\n      condition.column = column;\n      if (operator === \"eq\") {\n        // include legacy gateway shape for compatibility\n        condition.eq_column = column;\n      }\n    }\n    if (value !== undefined) {\n      condition.value = value;\n      if (operator === \"eq\") {\n        condition.eq_value = value;\n      }\n    }\n    if (hints?.valueCast) {\n      condition.value_cast = hints.valueCast;\n      if (operator === \"eq\") {\n        condition.eq_value_cast = hints.valueCast;\n      }\n    }\n    if (hints?.columnCast) {\n      condition.column_cast = hints.columnCast;\n      if (operator === \"eq\") {\n        condition.eq_column_cast = hints.columnCast;\n      }\n    }\n    state.conditions.push(condition);\n  };\n\n  const snapshotState = (): TableBuilderState => ({\n    conditions: state.conditions.map((condition) => ({ ...condition })),\n    currentPage: state.currentPage,\n    limit: state.limit,\n    offset: state.offset,\n    order: state.order ? { ...state.order } : undefined,\n    pageSize: state.pageSize,\n    totalPages: state.totalPages,\n  });\n\n  const builder = {} as TableQueryBuilder<Row, Insert, Update, TContext>;\n\n  const filterMethods = createFilterMethods<\n    TableQueryBuilder<Row, Insert, Update, TContext>,\n    Row\n  >(state, addCondition, builder);\n\n  const runSelect = async <T = Row>(\n    columns: AthenaSelectInput = DEFAULT_COLUMNS,\n    options?: AthenaGatewayCallOptions,\n    executionState: TableBuilderState = snapshotState(),\n    callsite?: AthenaQueryTraceCallsite | null,\n    debugAstFactory?: SelectDebugAstFactory\n  ) => {\n    const runtimeColumns =\n      normalizeSelectColumnsInput(columns) ?? DEFAULT_COLUMNS;\n    const resolvedTableName = resolveTableNameForCall(\n      tableName,\n      options?.schema\n    );\n    const plan = createSelectTransportPlan({\n      buildTypedSelectQuery,\n      columns: runtimeColumns,\n      options,\n      state: executionState,\n      tableName: resolvedTableName,\n    });\n    const debugAst = debugAstEnabled\n      ? (debugAstFactory?.({\n          columns: runtimeColumns,\n          executionState,\n          plan,\n          tableName: resolvedTableName,\n        }) ??\n        buildSelectDebugAst({\n          columns: runtimeColumns,\n          plan,\n          state: executionState,\n          tableName: resolvedTableName,\n        }))\n      : undefined;\n\n    if (plan.kind === \"query\") {\n      return executeRead(behavior, () =>\n        executeWithQueryTrace(\n          tracer,\n          {\n            ast: debugAst,\n            endpoint: \"/gateway/query\",\n            operation: \"select\",\n            options,\n            payload: plan.payload,\n            sql: plan.query,\n            table: resolvedTableName,\n          },\n          async () => {\n            const queryResponse = await client.queryGateway<T>(\n              plan.payload,\n              options\n            );\n            return formatGatewayResult(queryResponse, {\n              operation: \"select\",\n              table: resolvedTableName,\n            });\n          },\n          callsite\n        )\n      );\n    }\n\n    const sql = buildDebugSelectQuery({\n      tableName: resolvedTableName,\n      ...plan.debug,\n    });\n    return executeRead(behavior, () =>\n      executeWithQueryTrace(\n        tracer,\n        {\n          ast: debugAst,\n          endpoint: \"/gateway/fetch\",\n          operation: \"select\",\n          options,\n          payload: plan.payload,\n          sql,\n          table: resolvedTableName,\n        },\n        async () => {\n          const response = await client.fetchGateway<T>(plan.payload, options);\n          return formatGatewayResult(response, {\n            operation: \"select\",\n            table: resolvedTableName,\n          });\n        },\n        callsite\n      )\n    );\n  };\n\n  const createSelectChain = <SelectedRow>(\n    columns: AthenaSelectInput,\n    options?: AthenaGatewayCallOptions,\n    initialCallsite?: AthenaQueryTraceCallsite | null\n  ): SelectChain<Row, SelectedRow> => {\n    const chain = {} as SelectChain<Row, SelectedRow>;\n    const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite);\n    const filterMethods = createFilterMethods<\n      SelectChain<Row, SelectedRow>,\n      Row\n    >(state, addCondition, chain);\n    Object.assign(chain, filterMethods, {\n      catch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\n        return runSelect<SelectedRow[]>(\n          columns,\n          options,\n          snapshotState(),\n          callsiteStore.resolve()\n        ).catch(onrejected);\n      },\n      finally(onfinally?: () => void) {\n        return runSelect<SelectedRow[]>(\n          columns,\n          options,\n          snapshotState(),\n          callsiteStore.resolve()\n        ).finally(onfinally);\n      },\n      maybeSingle<T = SelectedRow>(\n        cols?: AthenaSelectInput,\n        opts?: AthenaGatewayCallOptions\n      ) {\n        return chain.single<T, AthenaSelectInput>(cols, opts);\n      },\n      async single<T = SelectedRow>(\n        cols?: AthenaSelectInput,\n        opts?: AthenaGatewayCallOptions\n      ) {\n        const r = await runSelect<T[]>(\n          cols ?? columns,\n          opts ?? options,\n          snapshotState(),\n          callsiteStore.resolve(captureTraceCallsite(tracer))\n        );\n        return toSingleResult(r);\n      },\n      // Thenable so `await query` resolves the deferred run without an extra API.\n      // biome-ignore lint/suspicious/noThenProperty: intentional thenable query builder\n      then<T1 = AthenaResult<SelectedRow[]>, T2 = never>(\n        onfulfilled?: (v: AthenaResult<SelectedRow[]>) => T1 | PromiseLike<T1>,\n        onrejected?: (reason: unknown) => T2 | PromiseLike<T2>\n      ) {\n        return runSelect<SelectedRow[]>(\n          columns,\n          options,\n          snapshotState(),\n          callsiteStore.resolve()\n        ).then(onfulfilled, onrejected);\n      },\n    });\n    return chain;\n  };\n\n  Object.assign(builder, filterMethods, {\n    delete(options?: AthenaGatewayCallOptions & { resourceId?: string }) {\n      const filters = state.conditions.length\n        ? [...state.conditions]\n        : undefined;\n      const resourceId = options?.resourceId ?? getResourceId(state);\n      if (!(resourceId || filters?.length)) {\n        throw new Error(\n          'delete requires a resource_id either via eq(\"resource_id\", ...) or options.resourceId'\n        );\n      }\n      const mutationCallsite = captureTraceCallsite(tracer);\n      const executeDelete = async (\n        columns?: string | string[],\n        selectOptions?: AthenaGatewayCallOptions,\n        callsite?: AthenaQueryTraceCallsite | null\n      ) => {\n        const executionState = snapshotState();\n        const debugState: TableBuilderState = {\n          ...executionState,\n          conditions: filters\n            ? filters.map((condition) => ({ ...condition }))\n            : [],\n        };\n        const mergedOptions = mergeOptions(options, selectOptions);\n        const resolvedTableName = resolveTableNameForCall(\n          tableName,\n          mergedOptions?.schema\n        );\n        const payload: AthenaDeletePayload = {\n          conditions: filters,\n          resource_id: resourceId,\n          table_name: resolvedTableName,\n        };\n        if (executionState.order) {\n          payload.sort_by = executionState.order;\n        }\n        if (executionState.limit !== undefined) {\n          payload.limit = executionState.limit;\n        }\n        if (executionState.offset !== undefined) {\n          payload.offset = executionState.offset;\n        }\n        if (executionState.currentPage !== undefined) {\n          payload.current_page = executionState.currentPage;\n        }\n        if (executionState.pageSize !== undefined) {\n          payload.page_size = executionState.pageSize;\n        }\n        if (executionState.totalPages !== undefined) {\n          payload.total_pages = executionState.totalPages;\n        }\n        if (columns) {\n          payload.columns = columns;\n        }\n        const sql = buildDeleteDebugSql(payload);\n        const debugAst = debugAstEnabled\n          ? buildDeleteDebugAst({\n              payload,\n              state: debugState,\n            })\n          : undefined;\n        return executeWithQueryTrace(\n          tracer,\n          {\n            ast: debugAst,\n            endpoint: \"/gateway/delete\",\n            operation: \"delete\",\n            options: mergedOptions,\n            payload,\n            sql,\n            table: resolvedTableName,\n          },\n          async () => {\n            const response = await client.deleteGateway<Row | null>(\n              payload,\n              mergedOptions\n            );\n            return formatGatewayResult(response, {\n              operation: \"delete\",\n              table: resolvedTableName,\n            });\n          },\n          callsite\n        );\n      };\n      return createMutationQuery<Row | null>(\n        executeDelete,\n        null,\n        tracer,\n        mutationCallsite\n      );\n    },\n    async findMany<const TSelect extends AthenaSelectShape>(\n      options: AthenaFindManyOptions<Row, TSelect> & {\n        select: AthenaValidatedSelectShape<Row, TSelect>;\n      }\n    ) {\n      const columns = compileSelectShape(options.select);\n      const baseState = snapshotState();\n      const executionState = snapshotState();\n      const callsite = captureTraceCallsite(tracer);\n      const compiledWhere = compileWhere(options.where);\n      if (compiledWhere?.length) {\n        executionState.conditions.push(...compiledWhere);\n      }\n      if (options.orderBy !== undefined) {\n        executionState.order = compileOrderBy<Row>(options.orderBy);\n      }\n      if (options.limit !== undefined) {\n        executionState.limit = options.limit;\n      }\n      if (\n        behavior?.findManyAst &&\n        canUseFindManyAstTransport(baseState) &&\n        !selectShapeUsesRelationSchema(options.select) &&\n        !findManyAstWhereRequiresLegacyTransport(options.where)\n      ) {\n        const resolvedTableName = resolveTableNameForCall(tableName, undefined);\n        const payload: AthenaFindManyAstPayload<Row, TSelect> = {\n          select: options.select,\n          table_name: resolvedTableName,\n        };\n        if (options.where !== undefined) {\n          payload.where = normalizeFindManyAstWhere(options.where);\n        }\n        const astOrder = toFindManyAstOrder<Row>(executionState.order);\n        if (astOrder !== undefined) {\n          payload.orderBy = astOrder;\n        }\n        if (executionState.limit !== undefined) {\n          payload.limit = executionState.limit;\n        }\n        const sql = buildDebugSelectQuery({\n          columns,\n          conditions: executionState.conditions,\n          limit: executionState.limit,\n          order: executionState.order,\n          tableName: resolvedTableName,\n        });\n        const debugAst = debugAstEnabled\n          ? buildFindManyDirectDebugAst({\n              baseState,\n              compiledColumns: columns,\n              executionState,\n              options,\n              payload,\n              tableName: resolvedTableName,\n            })\n          : undefined;\n        return executeRead(behavior, () =>\n          executeWithQueryTrace(\n            tracer,\n            {\n              ast: debugAst,\n              endpoint: \"/gateway/fetch\",\n              operation: \"select\",\n              payload,\n              sql,\n              table: resolvedTableName,\n            },\n            async () => {\n              const response =\n                await client.fetchGateway<\n                  AthenaFindManyResult<Row, TSelect, TContext>[]\n                >(payload);\n              return formatGatewayResult(response, {\n                operation: \"select\",\n                table: resolvedTableName,\n              });\n            },\n            callsite\n          )\n        );\n      }\n      return runSelect<AthenaFindManyResult<Row, TSelect, TContext>[]>(\n        columns,\n        undefined,\n        executionState,\n        callsite,\n        debugAstEnabled\n          ? ({\n              tableName: resolvedTableName,\n              executionState: tracedState,\n              plan,\n            }) =>\n              buildFindManyCompiledDebugAst({\n                baseState,\n                compiledColumns: columns,\n                executionState: tracedState,\n                options,\n                plan,\n                tableName: resolvedTableName,\n              })\n          : undefined\n      );\n    },\n    insert(values: Insert | Insert[], options?: AthenaGatewayCallOptions) {\n      const mutationCallsite = captureTraceCallsite(tracer);\n      if (Array.isArray(values)) {\n        const executeInsertMany = async (\n          columns?: string | string[],\n          selectOptions?: AthenaGatewayCallOptions,\n          callsite?: AthenaQueryTraceCallsite | null\n        ) => {\n          const mergedOptions = mergeOptions(options, selectOptions);\n          const resolvedTableName = resolveTableNameForCall(\n            tableName,\n            mergedOptions?.schema\n          );\n          const payload: AthenaInsertPayload = {\n            insert_body: asAthenaJsonObjectArray(values),\n            table_name: resolvedTableName,\n          };\n          if (columns) {\n            payload.columns = columns;\n          }\n          if (mergedOptions?.count) {\n            payload.count = mergedOptions.count;\n          }\n          if (mergedOptions?.head) {\n            payload.head = mergedOptions.head;\n          }\n          if (mergedOptions?.defaultToNull !== undefined) {\n            payload.default_to_null = mergedOptions.defaultToNull;\n          }\n          const sql = buildInsertDebugSql(payload);\n          const debugAst = debugAstEnabled\n            ? buildInsertDebugAst(payload)\n            : undefined;\n          return executeWithQueryTrace(\n            tracer,\n            {\n              ast: debugAst,\n              endpoint: \"/gateway/insert\",\n              operation: \"insert\",\n              options: mergedOptions,\n              payload,\n              sql,\n              table: resolvedTableName,\n            },\n            async () => {\n              const response = await client.insertGateway<Row[]>(\n                payload,\n                mergedOptions\n              );\n              return formatGatewayResult(response, {\n                operation: \"insert\",\n                table: resolvedTableName,\n              });\n            },\n            callsite\n          );\n        };\n        return createMutationQuery<Row[]>(\n          executeInsertMany,\n          DEFAULT_COLUMNS,\n          tracer,\n          mutationCallsite\n        );\n      }\n      const executeInsertOne = async (\n        columns?: string | string[],\n        selectOptions?: AthenaGatewayCallOptions,\n        callsite?: AthenaQueryTraceCallsite | null\n      ) => {\n        const mergedOptions = mergeOptions(options, selectOptions);\n        const resolvedTableName = resolveTableNameForCall(\n          tableName,\n          mergedOptions?.schema\n        );\n        const payload: AthenaInsertPayload = {\n          insert_body: asAthenaJsonObject(values),\n          table_name: resolvedTableName,\n        };\n        if (columns) {\n          payload.columns = columns;\n        }\n        if (mergedOptions?.count) {\n          payload.count = mergedOptions.count;\n        }\n        if (mergedOptions?.head) {\n          payload.head = mergedOptions.head;\n        }\n        if (mergedOptions?.defaultToNull !== undefined) {\n          payload.default_to_null = mergedOptions.defaultToNull;\n        }\n        const sql = buildInsertDebugSql(payload);\n        const debugAst = debugAstEnabled\n          ? buildInsertDebugAst(payload)\n          : undefined;\n        return executeWithQueryTrace(\n          tracer,\n          {\n            ast: debugAst,\n            endpoint: \"/gateway/insert\",\n            operation: \"insert\",\n            options: mergedOptions,\n            payload,\n            sql,\n            table: resolvedTableName,\n          },\n          async () => {\n            const response = await client.insertGateway<Row>(\n              payload,\n              mergedOptions\n            );\n            return formatGatewayResult(response, {\n              operation: \"insert\",\n              table: resolvedTableName,\n            });\n          },\n          callsite\n        );\n      };\n      return createMutationQuery<Row>(\n        executeInsertOne,\n        DEFAULT_COLUMNS,\n        tracer,\n        mutationCallsite\n      );\n    },\n    async maybeSingle<T = Row>(\n      columns?: AthenaSelectInput,\n      options?: AthenaGatewayCallOptions\n    ) {\n      return builder.single<T, AthenaSelectInput>(columns, options);\n    },\n    reset() {\n      state.conditions = [];\n      state.limit = undefined;\n      state.offset = undefined;\n      state.order = undefined;\n      state.currentPage = undefined;\n      state.pageSize = undefined;\n      state.totalPages = undefined;\n      return builder;\n    },\n    select<T = Row>(\n      columns: AthenaSelectInput = DEFAULT_COLUMNS,\n      options?: AthenaGatewayCallOptions\n    ) {\n      return createSelectChain<T>(\n        columns,\n        options,\n        captureTraceCallsite(tracer)\n      );\n    },\n    async single<T = Row>(\n      columns?: AthenaSelectInput,\n      options?: AthenaGatewayCallOptions\n    ) {\n      const response = await runSelect<T[]>(\n        columns ?? DEFAULT_COLUMNS,\n        options,\n        snapshotState(),\n        captureTraceCallsite(tracer)\n      );\n      return toSingleResult(response);\n    },\n    update(values: Update, options?: AthenaGatewayCallOptions) {\n      const mutationCallsite = captureTraceCallsite(tracer);\n      const executeUpdate = async (\n        columns?: string | string[],\n        selectOptions?: AthenaGatewayCallOptions,\n        callsite?: AthenaQueryTraceCallsite | null\n      ) => {\n        const executionState = snapshotState();\n        const filters = executionState.conditions.length\n          ? [...executionState.conditions]\n          : undefined;\n        const mergedOptions = mergeOptions(options, selectOptions);\n        const resolvedTableName = resolveTableNameForCall(\n          tableName,\n          mergedOptions?.schema\n        );\n        const payload: AthenaUpdatePayload = {\n          conditions: filters,\n          strip_nulls: mergedOptions?.stripNulls ?? true,\n          table_name: resolvedTableName,\n          update_body: asAthenaJsonObject(values),\n        };\n        if (executionState.order) {\n          payload.sort_by = executionState.order;\n        }\n        if (executionState.limit !== undefined) {\n          payload.limit = executionState.limit;\n        }\n        if (executionState.offset !== undefined) {\n          payload.offset = executionState.offset;\n        }\n        if (executionState.currentPage !== undefined) {\n          payload.current_page = executionState.currentPage;\n        }\n        if (executionState.pageSize !== undefined) {\n          payload.page_size = executionState.pageSize;\n        }\n        if (executionState.totalPages !== undefined) {\n          payload.total_pages = executionState.totalPages;\n        }\n        if (columns) {\n          payload.columns = columns;\n        }\n        const sql = buildUpdateDebugSql(payload);\n        const debugAst = debugAstEnabled\n          ? buildUpdateDebugAst({\n              payload,\n              state: executionState,\n            })\n          : undefined;\n        return executeWithQueryTrace(\n          tracer,\n          {\n            ast: debugAst,\n            endpoint: \"/gateway/update\",\n            operation: \"update\",\n            options: mergedOptions,\n            payload,\n            sql,\n            table: resolvedTableName,\n          },\n          async () => {\n            const response = await client.updateGateway<Row[]>(\n              payload,\n              mergedOptions\n            );\n            return formatGatewayResult(response, {\n              operation: \"update\",\n              table: resolvedTableName,\n            });\n          },\n          callsite\n        );\n      };\n      const mutation = createMutationQuery<Row[]>(\n        executeUpdate,\n        null,\n        tracer,\n        mutationCallsite\n      );\n      const updateChain = {} as UpdateChain<Row>;\n      const filterMethods = createFilterMethods<UpdateChain<Row>, Row>(\n        state,\n        addCondition,\n        updateChain\n      );\n      Object.assign(updateChain, filterMethods, mutation);\n      return updateChain;\n    },\n    upsert(\n      values: Insert | Insert[],\n      options?: AthenaGatewayCallOptions & {\n        updateBody?: Update;\n        onConflict?: string | string[];\n      }\n    ) {\n      const mutationCallsite = captureTraceCallsite(tracer);\n      if (Array.isArray(values)) {\n        const executeUpsertMany = async (\n          columns?: string | string[],\n          selectOptions?: AthenaGatewayCallOptions,\n          callsite?: AthenaQueryTraceCallsite | null\n        ) => {\n          const mergedOptions = mergeOptions(options, selectOptions);\n          const resolvedTableName = resolveTableNameForCall(\n            tableName,\n            mergedOptions?.schema\n          );\n          const payload: AthenaInsertPayload = {\n            insert_body: asAthenaJsonObjectArray(values),\n            table_name: resolvedTableName,\n            update_body: options?.updateBody\n              ? asAthenaJsonObject(options.updateBody)\n              : undefined,\n          };\n          if (columns) {\n            payload.columns = columns;\n          }\n          if (options?.onConflict) {\n            payload.on_conflict = options.onConflict;\n          }\n          if (mergedOptions?.count) {\n            payload.count = mergedOptions.count;\n          }\n          if (mergedOptions?.head) {\n            payload.head = mergedOptions.head;\n          }\n          if (mergedOptions?.defaultToNull !== undefined) {\n            payload.default_to_null = mergedOptions.defaultToNull;\n          }\n          const sql = buildInsertDebugSql(payload);\n          const debugAst = debugAstEnabled\n            ? buildUpsertDebugAst(payload)\n            : undefined;\n          return executeWithQueryTrace(\n            tracer,\n            {\n              ast: debugAst,\n              endpoint: \"/gateway/insert\",\n              operation: \"upsert\",\n              options: mergedOptions,\n              payload,\n              sql,\n              table: resolvedTableName,\n            },\n            async () => {\n              const response = await client.insertGateway<Row[]>(\n                payload,\n                mergedOptions\n              );\n              return formatGatewayResult(response, {\n                operation: \"insert\",\n                table: resolvedTableName,\n              });\n            },\n            callsite\n          );\n        };\n        return createMutationQuery<Row[]>(\n          executeUpsertMany,\n          DEFAULT_COLUMNS,\n          tracer,\n          mutationCallsite\n        );\n      }\n      const executeUpsertOne = async (\n        columns?: string | string[],\n        selectOptions?: AthenaGatewayCallOptions,\n        callsite?: AthenaQueryTraceCallsite | null\n      ) => {\n        const mergedOptions = mergeOptions(options, selectOptions);\n        const resolvedTableName = resolveTableNameForCall(\n          tableName,\n          mergedOptions?.schema\n        );\n        const payload: AthenaInsertPayload = {\n          insert_body: asAthenaJsonObject(values),\n          table_name: resolvedTableName,\n          update_body: options?.updateBody\n            ? asAthenaJsonObject(options.updateBody)\n            : undefined,\n        };\n        if (columns) {\n          payload.columns = columns;\n        }\n        if (options?.onConflict) {\n          payload.on_conflict = options.onConflict;\n        }\n        if (mergedOptions?.count) {\n          payload.count = mergedOptions.count;\n        }\n        if (mergedOptions?.head) {\n          payload.head = mergedOptions.head;\n        }\n        if (mergedOptions?.defaultToNull !== undefined) {\n          payload.default_to_null = mergedOptions.defaultToNull;\n        }\n        const sql = buildInsertDebugSql(payload);\n        const debugAst = debugAstEnabled\n          ? buildUpsertDebugAst(payload)\n          : undefined;\n        return executeWithQueryTrace(\n          tracer,\n          {\n            ast: debugAst,\n            endpoint: \"/gateway/insert\",\n            operation: \"upsert\",\n            options: mergedOptions,\n            payload,\n            sql,\n            table: resolvedTableName,\n          },\n          async () => {\n            const response = await client.insertGateway<Row>(\n              payload,\n              mergedOptions\n            );\n            return formatGatewayResult(response, {\n              operation: \"insert\",\n              table: resolvedTableName,\n            });\n          },\n          callsite\n        );\n      };\n      return createMutationQuery<Row>(\n        executeUpsertOne,\n        DEFAULT_COLUMNS,\n        tracer,\n        mutationCallsite\n      );\n    },\n  });\n\n  return builder;\n}\n\nfunction createQueryBuilder(\n  client: ReturnType<typeof createAthenaGatewayClient>,\n  formatGatewayResult: AthenaResultFormatter,\n  behavior?: InternalClientBehaviorOptions,\n  tracer?: AthenaQueryTracer,\n  deprecationOwner?: object\n) {\n  const debugAstEnabled = Boolean(behavior?.debugAst);\n  // Legacy root query() historically forwarded multi-statement scripts to the\n  // gateway (migration/seed). Keep that behavior; only explicit admin.query rejects.\n  const adminQuery = createAdminQuery({\n    allowMultiStatement: true,\n    client,\n    formatGatewayResult,\n  });\n  /**\n   * Executes raw SQL through Athena's compatibility query surface.\n   *\n   * @deprecated Prefer `athena.admin.query()` with explicit `operation`\n   * and `expectedShape`.\n   */\n  return async function query<Row = unknown>(\n    sql: string,\n    options?: AthenaGatewayCallOptions\n  ): Promise<AthenaResult<Row[]>> {\n    if (deprecationOwner) {\n      maybeWarnRawQueryDeprecated(\n        deprecationOwner,\n        behavior?.rawQueryDiagnostics\n      );\n    }\n    const normalizedQuery = sql.trim();\n    if (!normalizedQuery) {\n      throw new Error(\"query requires a non-empty string\");\n    }\n    const operation = classifyRawSqlOperation(normalizedQuery);\n    const expectedShape = defaultExpectedShapeForOperation(operation);\n    const params = options?.params;\n    const payload = {\n      query: normalizedQuery,\n      ...(Array.isArray(params) ? { params } : {}),\n      expectedShape,\n      operation,\n    };\n    const callsite = captureTraceCallsite(tracer);\n    return executeRead(behavior, () =>\n      executeWithQueryTrace(\n        tracer,\n        {\n          ast: debugAstEnabled\n            ? buildRawQueryDebugAst(normalizedQuery)\n            : undefined,\n          endpoint: \"/gateway/query\",\n          operation: \"query\",\n          options,\n          payload,\n          sql: normalizedQuery,\n        },\n        async () => {\n          const result = await adminQuery<Row[]>(\n            {\n              sql: normalizedQuery,\n              ...(Array.isArray(params) ? { params } : {}),\n              expectedShape: \"rows\",\n              operation,\n            },\n            options\n          );\n          // Preserve legacy AthenaResult shape (no required metadata on root query).\n          const { metadata: _metadata, ...legacy } = result;\n          void _metadata;\n          return legacy;\n        },\n        callsite\n      )\n    );\n  };\n}\n\nexport interface AthenaClientAdminModule {\n  /**\n   * Explicit raw SQL with operation + expected shape metadata.\n   * Preferred over root `query()` for Dragunov / Athena 5.\n   */\n  query: <T = unknown, TParams extends readonly unknown[] = readonly unknown[]>(\n    input: AthenaAdminQueryInput<TParams>,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaAdminQueryResult<T>>;\n}\n\nexport interface AthenaClientSystemModule {\n  /** Lazy cached compatibility report (health-backed when available). */\n  compatibility: () => Promise<AthenaCompatibilityReport>;\n  /** Normalized release identity from health (Athena 4 synthesizes without codename). */\n  release: () => Promise<AthenaReleaseIdentity>;\n}\n\nexport interface InternalAthenaClient<TModels = never> {\n  admin: AthenaClientAdminModule;\n  auth: AthenaAuthBindings;\n  chat: AthenaChatModule;\n  db: AthenaDbModule<TModels>;\n  from<TModel extends AthenaModelTarget>(\n    model: TModel\n  ): TableQueryBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>>;\n  from<TTableName extends AthenaClientTableName<TModels>>(\n    table: TTableName,\n    options?: AthenaFromOptions\n  ): ClientTableQueryBuilder<TModels, TTableName>;\n  from<Row = AthenaRowShape, Insert = Partial<Row>, Update = Partial<Insert>>(\n    table: UntypedTableName<TModels>,\n    options?: AthenaFromOptions\n  ): TableQueryBuilder<Row, Insert, Update>;\n  /**\n   * GET /health (fallback GET /) with release identity normalization.\n   */\n  health: () => Promise<AthenaNormalizedHealth>;\n  /**\n   * Executes raw SQL through Athena's compatibility query surface.\n   *\n   * @deprecated Prefer `admin.query()` with explicit `operation` and `expectedShape`.\n   */\n  query: <Row = unknown>(\n    query: string,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaResult<Row[]>>;\n  request: <T = unknown>(\n    options: AthenaRequestOptions\n  ) => Promise<AthenaRequestResponse<T>>;\n  rpc: <Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\n    fn: string,\n    args?: Args,\n    options?: AthenaRpcCallOptions\n  ) => RpcQueryBuilder<Row>;\n  storage: AthenaStorageModule;\n  system: AthenaClientSystemModule;\n  verifyConnection: (\n    options?: AthenaGatewayConnectionOptions\n  ) => Promise<AthenaGatewayConnectionResult>;\n}\n\nexport interface InternalClientChatOptions\n  extends Pick<\n    AthenaRequestHeaderOverrideFields,\n    \"bearerToken\" | \"cookie\" | \"forceNoCache\" | \"headers\" | \"sessionToken\"\n  > {\n  webSocketFactory?: AthenaChatWebSocketFactory | null | undefined;\n  wsUrl?: string | null | undefined;\n}\n\nexport type InternalClientAuthOptions = Omit<\n  AthenaAuthClientConfig,\n  \"baseUrl\" | \"apiKey\" | \"bearerToken\" | \"cookie\" | \"sessionToken\"\n>;\n\nexport interface InternalClientConfig<\n  TModels extends AthenaClientModelsInput | never = never,\n> {\n  apiKey: string;\n  auth?: InternalClientAuthOptions;\n  authUrl?: string;\n  backend?: BackendConfig;\n  baseUrl: string;\n  behavior?: InternalClientBehaviorOptions;\n  chat?: InternalClientChatOptions;\n  chatUrl?: string;\n  chatWsUrl?: string;\n  client?: string | null | undefined;\n  /**\n   * Optional prebuilt gateway transport (HTTP client, Cloudflare D1 local, or test fake).\n   * When set, `createAthenaGatewayClient` is not constructed from baseUrl/apiKey.\n   * @see ADR 0015\n   */\n  gatewayTransport?: AthenaGatewayClient;\n  headers?: Record<string, string>;\n  jdbcUrl?: string | null | undefined;\n  models?: TModels;\n  /** Direct PostgreSQL URI forwarded as `x-pg-uri` on gateway requests. */\n  pgUri?: string | null | undefined;\n  storage?: AthenaStorageClientConfig;\n  storageUrl?: string;\n}\n\nexport interface InternalClientRequestContext {\n  bearerToken?: string | null;\n  cookie?: string | null;\n  forceNoCache?: boolean;\n  headers?: Record<string, string>;\n  organizationId?: string | null;\n  sessionToken?: string | null;\n  userId?: string | null;\n}\n\nexport type InternalClientContextResolver = () =>\n  | InternalClientRequestContext\n  | undefined\n  | Promise<InternalClientRequestContext | undefined>;\n\nexport interface InternalAthenaClientCore<\n  TModels extends AthenaClientModelsInput | never = never,\n> {\n  readonly config: InternalClientConfig<TModels>;\n  readonly formatGatewayResult: AthenaResultFormatter;\n  readonly gatewayTransport: AthenaGatewayClient;\n  readonly normalizedAuthConfig: AthenaAuthClientConfig | undefined;\n  readonly queryTracer: AthenaQueryTracer | undefined;\n}\n\nfunction buildContextHeaders(\n  context: InternalClientRequestContext\n): Record<string, string> | undefined {\n  const headers: Record<string, string> = {};\n  if (\n    context.userId !== undefined &&\n    context.userId !== null &&\n    context.userId !== \"\"\n  ) {\n    headers[\"X-User-Id\"] = context.userId;\n  }\n  if (\n    context.organizationId !== undefined &&\n    context.organizationId !== null &&\n    context.organizationId !== \"\"\n  ) {\n    headers[\"X-Organization-Id\"] = context.organizationId;\n  }\n  Object.assign(headers, context.headers);\n  return Object.keys(headers).length > 0 ? headers : undefined;\n}\n\nfunction normalizeAuthClientConfig(\n  auth: InternalClientAuthOptions | undefined,\n  defaultBaseUrl?: string\n): AthenaAuthClientConfig | undefined {\n  if (!auth && defaultBaseUrl === undefined) {\n    return;\n  }\n\n  const normalized: AthenaAuthClientConfig = {\n    ...(auth ?? {}),\n  };\n  const resolvedBaseUrl = defaultBaseUrl\n    ? normalizeAthenaGatewayBaseUrl(defaultBaseUrl, {\n        label: \"Athena auth base URL\",\n      })\n    : undefined;\n\n  if (resolvedBaseUrl !== undefined) {\n    normalized.baseUrl = resolvedBaseUrl;\n  }\n  return normalized;\n}\n\nexport function createInternalClientCore<\n  TModels extends AthenaClientModelsInput | never = never,\n>(config: InternalClientConfig<TModels>): InternalAthenaClientCore<TModels> {\n  const normalizedAuthConfig = normalizeAuthClientConfig(\n    config.auth,\n    config.authUrl\n  );\n  const gatewayTransport =\n    config.gatewayTransport ??\n    createAthenaGatewayClient({\n      apiKey: config.apiKey,\n      backend: config.backend,\n      baseUrl: config.baseUrl,\n      client: config.client ?? undefined,\n      headers: config.headers,\n      jdbcUrl: config.jdbcUrl,\n      pgUri: config.pgUri,\n    });\n  return Object.freeze({\n    config,\n    formatGatewayResult: createResultFormatter(),\n    gatewayTransport,\n    normalizedAuthConfig,\n    queryTracer: createQueryTracer(config.behavior),\n  });\n}\n\nexport function createInternalClientView<\n  TModels extends AthenaClientModelsInput | never = never,\n>(\n  core: InternalAthenaClientCore<TModels>,\n  resolveContext: InternalClientContextResolver\n): InternalAthenaClient<TModels> {\n  const { config, formatGatewayResult, normalizedAuthConfig, queryTracer } =\n    core;\n  const gateway = createAthenaGatewayClientView(\n    core.gatewayTransport,\n    async () => {\n      const context = await resolveContext();\n      return context\n        ? {\n            bearerToken: context.bearerToken,\n            cookie: context.cookie,\n            forceNoCache: context.forceNoCache,\n            headers: context.headers,\n            organizationId: context.organizationId,\n            sessionToken: context.sessionToken,\n            userId: context.userId,\n          }\n        : undefined;\n    }\n  );\n  const auth = createAuthModule(\n    {\n      ...(normalizedAuthConfig ?? {}),\n    },\n    {\n      async resolveCallOptions() {\n        const context = await resolveContext();\n        return context\n          ? {\n              bearerToken: context.bearerToken ?? undefined,\n              cookie: context.cookie ?? undefined,\n              forceNoCache: context.forceNoCache,\n              headers: buildContextHeaders(context),\n              sessionToken: context.sessionToken ?? undefined,\n            }\n          : undefined;\n      },\n    }\n  );\n  // Single implementation + cast avoids TS2589 deep overload expansion during dts.\n  const from = ((\n    tableOrModel: string | AthenaModelTarget,\n    options?: AthenaFromOptions\n  ) => {\n    if (isAthenaModelTarget(tableOrModel)) {\n      if (options?.schema !== undefined) {\n        throw new Error(\n          \"from(model) does not accept a schema override because the model already defines its target.\"\n        );\n      }\n      return createTableBuilder(\n        resolveAthenaModelTargetTableName(tableOrModel),\n        gateway,\n        formatGatewayResult,\n        queryTracer,\n        config.behavior\n      );\n    }\n\n    const resolvedTableName = resolveTableNameForCall(\n      tableOrModel,\n      options?.schema\n    );\n    return createTableBuilder(\n      resolvedTableName,\n      gateway,\n      formatGatewayResult,\n      queryTracer,\n      config.behavior\n    );\n  }) as AthenaDbModule<TModels>[\"from\"];\n  const rpc: InternalAthenaClient<TModels>[\"rpc\"] = <\n    Row = unknown,\n    Args extends AthenaJsonObject = AthenaJsonObject,\n  >(\n    fn: string,\n    args?: Args,\n    options?: AthenaRpcCallOptions\n  ) => {\n    const normalizedFn = fn.trim();\n    if (!normalizedFn) {\n      throw new Error(\"rpc requires a function name\");\n    }\n    return createRpcBuilder<Row>(\n      normalizedFn,\n      args as AthenaJsonObject | undefined,\n      options,\n      gateway,\n      formatGatewayResult,\n      queryTracer,\n      captureTraceCallsite(queryTracer),\n      Boolean(config.behavior?.debugAst)\n    );\n  };\n  const deprecationOwner = Object.create(null) as object;\n  const compatibilityCache: AthenaCompatibilityCache =\n    createCompatibilityCache();\n  const adminQueryImpl = createAdminQuery({\n    client: gateway,\n    formatGatewayResult,\n  });\n  const admin: AthenaClientAdminModule = {\n    query: adminQueryImpl,\n  };\n  const query = createQueryBuilder(\n    gateway,\n    formatGatewayResult,\n    config.behavior,\n    queryTracer,\n    deprecationOwner\n  ) as InternalAthenaClient<TModels>[\"query\"];\n  const health = async (): Promise<AthenaNormalizedHealth> => {\n    const report = await discoverCompatibility({\n      apiKey: config.apiKey,\n      baseUrl: config.baseUrl,\n      cache: compatibilityCache,\n      headers: config.headers,\n    });\n    if (compatibilityCache.health) {\n      return compatibilityCache.health;\n    }\n    return {\n      message: null,\n      raw: null,\n      release: report.release,\n      status: null,\n      version:\n        report.server.version === \"unknown\" ? null : report.server.version,\n    };\n  };\n  const system: AthenaClientSystemModule = {\n    async compatibility() {\n      return discoverCompatibility({\n        apiKey: config.apiKey,\n        baseUrl: config.baseUrl,\n        cache: compatibilityCache,\n        headers: config.headers,\n      });\n    },\n    async release() {\n      const report = await system.compatibility();\n      return report.release;\n    },\n  };\n  const untypedDbFrom = from as unknown as <\n    Row = AthenaRowShape,\n    Insert = Partial<Row>,\n    Update = Partial<Insert>,\n  >(\n    table: string,\n    options?: AthenaFromOptions\n  ) => TableQueryBuilder<Row, Insert, Update>;\n  const db = {\n    delete<Row = AthenaRowShape>(\n      table: string,\n      options?: AthenaGatewayCallOptions & { resourceId?: string }\n    ) {\n      return untypedDbFrom<Row>(table).delete(options);\n    },\n    from,\n    insert<Row = AthenaRowShape, Insert = Partial<Row>>(\n      table: string,\n      values: Insert | Insert[],\n      options?: AthenaGatewayCallOptions\n    ) {\n      return Array.isArray(values)\n        ? untypedDbFrom<Row, Insert, Partial<Insert>>(table).insert(\n            values,\n            options\n          )\n        : untypedDbFrom<Row, Insert, Partial<Insert>>(table).insert(\n            values,\n            options\n          );\n    },\n    query,\n    rpc,\n    select<Row = AthenaRowShape>(\n      table: string,\n      first?: AthenaGatewayCallOptions | AthenaSelectInput,\n      second?: AthenaGatewayCallOptions\n    ) {\n      if (first && typeof first === \"object\" && !Array.isArray(first)) {\n        return untypedDbFrom<Row>(table).select(\n          undefined,\n          first as AthenaGatewayCallOptions\n        );\n      }\n      return untypedDbFrom<Row>(table).select(\n        first as AthenaSelectInput | undefined,\n        second\n      );\n    },\n    update<\n      Row = AthenaRowShape,\n      Insert = Partial<Row>,\n      Update = Partial<Insert>,\n    >(table: string, values: Update, options?: AthenaGatewayCallOptions) {\n      return untypedDbFrom<Row, Insert, Update>(table).update(values, options);\n    },\n    upsert<\n      Row = AthenaRowShape,\n      Insert = Partial<Row>,\n      Update = Partial<Insert>,\n    >(\n      table: string,\n      values: Insert | Insert[],\n      options?: AthenaGatewayCallOptions & {\n        updateBody?: Update;\n        onConflict?: string | string[];\n      }\n    ) {\n      return Array.isArray(values)\n        ? untypedDbFrom<Row, Insert, Update>(table).upsert(values, options)\n        : untypedDbFrom<Row, Insert, Update>(table).upsert(values, options);\n    },\n  } as AthenaDbModule<TModels>;\n  const chat = createChatModule(\n    {\n      apiKey: config.apiKey,\n      baseUrl: config.chatUrl,\n      bearerToken: config.chat?.bearerToken ?? undefined,\n      client: config.client ?? undefined,\n      cookie: config.chat?.cookie ?? undefined,\n      forceNoCache: config.chat?.forceNoCache ?? undefined,\n      headers: {\n        ...(config.headers ?? {}),\n        ...(config.chat?.headers ?? {}),\n      },\n      sessionToken: config.chat?.sessionToken ?? undefined,\n      webSocketFactory: config.chat?.webSocketFactory ?? undefined,\n      wsUrl: config.chatWsUrl,\n    },\n    {\n      async resolveCallOptions() {\n        const context = await resolveContext();\n        return context\n          ? {\n              bearerToken: context.bearerToken,\n              cookie: context.cookie,\n              forceNoCache: context.forceNoCache,\n              headers: buildContextHeaders(context),\n              sessionToken: context.sessionToken,\n            }\n          : undefined;\n      },\n    }\n  );\n  const request = createAthenaRequest(config, resolveContext);\n  const storage = createStorageModule(gateway, {\n    ...config.storage,\n    ...(config.storageUrl\n      ? {\n          baseUrl: config.storageUrl,\n          stripBasePath: true,\n        }\n      : {}),\n  });\n\n  return {\n    admin,\n    auth: auth.auth,\n    chat,\n    db,\n    from,\n    health,\n    query,\n    request,\n    rpc,\n    storage,\n    system,\n    verifyConnection: gateway.verifyConnection,\n  } as InternalAthenaClient<TModels>;\n}\n","import type { AthenaClientCapabilities } from \"./types.ts\";\n\nexport function createGatewayCapabilities(options?: {\n  engine?: AthenaClientCapabilities[\"db\"][\"engine\"];\n  authRemote?: boolean;\n  /** When false/undefined, storage flags match an unconfigured storage namespace. */\n  storageConfigured?: boolean;\n  storageCatalogs?: boolean;\n  storageBackups?: boolean;\n}): AthenaClientCapabilities {\n  const storageConfigured = options?.storageConfigured ?? true;\n  return {\n    auth: {\n      remote: options?.authRemote ?? true,\n    },\n    db: {\n      engine: options?.engine ?? \"postgresql\",\n      layers: {\n        findManyAst: true,\n        flatCrud: true,\n        query: true,\n        relations: true,\n        rpc: true,\n      },\n      local: false,\n    },\n    mode: \"gateway\",\n    storage: {\n      backups: storageConfigured ? (options?.storageBackups ?? true) : false,\n      catalogs: storageConfigured ? (options?.storageCatalogs ?? true) : false,\n      local: false,\n      objects: storageConfigured,\n    },\n  };\n}\n\nexport function createCloudflareEdgeCapabilities(options: {\n  hasR2: boolean;\n  /** Hybrid remote Athena root / storage URL enables HTTP storage ports. */\n  hasRemoteStorage?: boolean;\n  authRemote: boolean;\n  findManyAst?: boolean;\n}): AthenaClientCapabilities {\n  const hasRemoteStorage = Boolean(options.hasRemoteStorage);\n  const hasObjects = options.hasR2 || hasRemoteStorage;\n  return {\n    auth: {\n      remote: options.authRemote,\n    },\n    db: {\n      engine: \"cloudflare-d1\",\n      layers: {\n        findManyAst: options.findManyAst ?? false,\n        flatCrud: true,\n        query: true,\n        relations: false,\n        rpc: false,\n      },\n      local: true,\n    },\n    mode: \"cloudflare-edge\",\n    storage: {\n      // Catalogs/backups are HTTP product ports — only when remote storage is wired.\n      backups: hasRemoteStorage,\n      catalogs: hasRemoteStorage,\n      // Local objects only when an R2 binding is present.\n      local: options.hasR2,\n      // Remote hybrid root can still expose storage.objects via the HTTP API.\n      objects: hasObjects,\n    },\n  };\n}\n","/**\n * Structural Cloudflare binding types used by the edge-local adapter.\n * Avoids a hard dependency on `@cloudflare/workers-types`.\n */\n\nexport interface D1PreparedStatementLike {\n  /**\n   * Non-generic statement results keep mock bindings assignable under strict\n   * function types. Callers narrow `results` as needed.\n   */\n  all: () => Promise<D1ResultLike>;\n  bind: (...values: unknown[]) => D1PreparedStatementLike;\n  first: <T = Record<string, unknown>>(colName?: string) => Promise<T | null>;\n  run: () => Promise<D1ResultLike>;\n}\n\nexport interface D1ResultLike<T = Record<string, unknown>> {\n  error?: string;\n  meta?: {\n    duration?: number;\n    changes?: number;\n    last_row_id?: number;\n    rows_read?: number;\n    rows_written?: number;\n    [key: string]: unknown;\n  };\n  results?: T[];\n  success?: boolean;\n}\n\nexport interface D1ExecResultLike {\n  count: number;\n  duration: number;\n}\n\nexport interface D1SessionLike {\n  /**\n   * Batch statements. Non-generic return keeps Worker/mocks assignable under\n   * strict function types (real D1 is heterogeneous per statement).\n   */\n  batch: (statements: D1PreparedStatementLike[]) => Promise<D1ResultLike[]>;\n  /** Sessions may not expose exec (Wrangler D1DatabaseSession). */\n  exec?: (query: string) => Promise<D1ExecResultLike>;\n  getBookmark: () => string | null;\n  prepare: (query: string) => D1PreparedStatementLike;\n}\n\nexport interface D1DatabaseLike {\n  /**\n   * Batch statements. Non-generic return keeps Worker/mocks assignable under\n   * strict function types (real D1 is heterogeneous per statement).\n   */\n  batch: (statements: D1PreparedStatementLike[]) => Promise<D1ResultLike[]>;\n  exec: (query: string) => Promise<D1ExecResultLike>;\n  prepare: (query: string) => D1PreparedStatementLike;\n  withSession?: (constraintOrBookmark: string) => D1SessionLike;\n}\n\nexport interface R2ObjectBodyLike {\n  arrayBuffer: () => Promise<ArrayBuffer>;\n  blob: () => Promise<Blob>;\n  customMetadata?: Record<string, string>;\n  etag?: string;\n  httpEtag?: string;\n  httpMetadata?: { contentType?: string; [key: string]: unknown };\n  json: <T = unknown>() => Promise<T>;\n  key: string;\n  size: number;\n  text: () => Promise<string>;\n  uploaded?: Date;\n}\n\nexport interface R2ObjectsListLike {\n  cursor?: string;\n  delimitedPrefixes?: string[];\n  objects: Array<{\n    key: string;\n    size: number;\n    etag?: string;\n    uploaded?: Date;\n  }>;\n  truncated: boolean;\n}\n\nexport interface R2BucketLike {\n  delete: (keys: string | string[]) => Promise<void>;\n  get: (key: string) => Promise<R2ObjectBodyLike | null>;\n  list: (options?: {\n    prefix?: string;\n    limit?: number;\n    cursor?: string;\n    delimiter?: string;\n  }) => Promise<R2ObjectsListLike>;\n  put: (\n    key: string,\n    value:\n      | ReadableStream\n      | ArrayBuffer\n      | ArrayBufferView\n      | string\n      | Blob\n      | null,\n    options?: {\n      httpMetadata?: { contentType?: string; [key: string]: unknown };\n      customMetadata?: Record<string, string>;\n    }\n  ) => Promise<unknown>;\n}\n\nexport type AthenaClientCapabilitiesMode = \"gateway\" | \"cloudflare-edge\";\n\nexport interface AthenaDbLayerCapabilities {\n  findManyAst: boolean;\n  flatCrud: boolean;\n  query: boolean;\n  relations: boolean;\n  rpc: boolean;\n}\n\nexport interface AthenaDbCapabilities {\n  engine: \"postgresql\" | \"cloudflare-d1\" | \"unknown\";\n  layers: AthenaDbLayerCapabilities;\n  local: boolean;\n}\n\nexport interface AthenaStorageCapabilities {\n  backups: boolean;\n  catalogs: boolean;\n  local: boolean;\n  objects: boolean;\n}\n\nexport interface AthenaAuthCapabilities {\n  remote: boolean;\n}\n\nexport interface AthenaClientCapabilities {\n  auth: AthenaAuthCapabilities;\n  db: AthenaDbCapabilities;\n  mode: AthenaClientCapabilitiesMode;\n  storage: AthenaStorageCapabilities;\n}\n\nexport const CLOUDFLARE_EDGE_BASE_URL = \"https://athena.local/cloudflare-edge\";\nexport const CLOUDFLARE_EDGE_API_KEY = \"cloudflare-edge-local\";\n","/**\n * Pure D1 execution helpers shared by edge-local SDK transport and (later)\n * apps/cloudflare-d1-proxy.\n */\n\nimport type {\n  D1DatabaseLike,\n  D1ExecResultLike,\n  D1ResultLike,\n  D1SessionLike,\n} from \"../types.ts\";\n\nexport interface D1RunnerSessionInput {\n  bookmark?: string | null;\n  sessionMode?: string | null;\n}\n\nexport type D1QueryInput = D1RunnerSessionInput & {\n  query: string;\n  params?: unknown[];\n};\n\nexport interface D1BatchStatementInput {\n  params?: unknown[];\n  query: string;\n}\n\nexport type D1BatchInput = D1RunnerSessionInput & {\n  statements: D1BatchStatementInput[];\n};\n\nexport interface D1RunnerQuerySuccess {\n  bookmark: string | null;\n  columns: string[];\n  count: number;\n  durationMs?: number;\n  meta: Record<string, unknown>;\n  ok: true;\n  rows: unknown[];\n  statementCount?: number;\n}\n\nexport interface D1RunnerQueryFailure {\n  error: string;\n  message: string;\n  ok: false;\n}\n\nexport type D1RunnerQueryResult = D1RunnerQuerySuccess | D1RunnerQueryFailure;\n\nexport interface D1RunnerBatchSuccess {\n  bookmark: string | null;\n  ok: true;\n  results: D1ResultLike<unknown>[];\n}\n\nexport type D1RunnerBatchResult = D1RunnerBatchSuccess | D1RunnerQueryFailure;\n\nfunction resultColumns(rows: unknown[]): string[] {\n  const first = rows.find(\n    (value) => value && typeof value === \"object\" && !Array.isArray(value)\n  );\n  if (!first) {\n    return [];\n  }\n  return Object.keys(first as Record<string, unknown>);\n}\n\nfunction isIdentChar(ch: string | undefined): boolean {\n  if (!ch) {\n    return false;\n  }\n  return /[A-Za-z0-9_]/.test(ch);\n}\n\n/**\n * Scan SQL while tracking string/identifier literals and comments.\n * Invokes `onKeyword` for each bare identifier token outside those regions.\n * Return true from the callback to stop early.\n */\nfunction scanSqlKeywordsOutsideLiterals(\n  sql: string,\n  onKeyword: (keyword: string, index: number) => boolean | undefined\n): void {\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n  let inLineComment = false;\n  let inBlockComment = false;\n\n  for (let i = 0; i < sql.length; i += 1) {\n    const ch = sql[i]!;\n    const next = sql[i + 1];\n\n    if (inLineComment) {\n      if (ch === \"\\n\" || ch === \"\\r\") {\n        inLineComment = false;\n      }\n      continue;\n    }\n    if (inBlockComment) {\n      if (ch === \"*\" && next === \"/\") {\n        i += 1;\n        inBlockComment = false;\n      }\n      continue;\n    }\n    if (inSingle) {\n      if (ch === \"'\" && next === \"'\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      continue;\n    }\n    if (inDouble) {\n      if (ch === '\"' && next === '\"') {\n        i += 1;\n        continue;\n      }\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      continue;\n    }\n    if (inBacktick) {\n      if (ch === \"`\" && next === \"`\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      continue;\n    }\n    if (inBracket) {\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      continue;\n    }\n\n    if (ch === \"-\" && next === \"-\") {\n      inLineComment = true;\n      i += 1;\n      continue;\n    }\n    if (ch === \"/\" && next === \"*\") {\n      inBlockComment = true;\n      i += 1;\n      continue;\n    }\n    if (ch === \"'\") {\n      inSingle = true;\n      continue;\n    }\n    if (ch === '\"') {\n      inDouble = true;\n      continue;\n    }\n    if (ch === \"`\") {\n      inBacktick = true;\n      continue;\n    }\n    if (ch === \"[\") {\n      inBracket = true;\n      continue;\n    }\n\n    if (!isIdentChar(ch) || isIdentChar(sql[i - 1])) {\n      continue;\n    }\n\n    let end = i + 1;\n    while (end < sql.length && isIdentChar(sql[end])) {\n      end += 1;\n    }\n    const keyword = sql.slice(i, end);\n    if (onKeyword(keyword, i)) {\n      return;\n    }\n    i = end - 1;\n  }\n}\n\n/**\n * True when `keyword` appears as a SQL keyword outside string/identifier literals\n * and comments (case-insensitive). Used so `RETURNING` inside string values does\n * not force the all() result path.\n */\nexport function sqlContainsKeywordOutsideLiterals(\n  sql: string,\n  keyword: string\n): boolean {\n  const target = keyword.toUpperCase();\n  let found = false;\n  scanSqlKeywordsOutsideLiterals(sql, (token) => {\n    if (token.toUpperCase() === target) {\n      found = true;\n      return true;\n    }\n    return false;\n  });\n  return found;\n}\n\n/**\n * First bare SQL keyword outside leading comments / whitespace / literals.\n * Used so `-- note\\nSELECT …` still classifies as row-producing.\n */\nexport function sqlFirstKeywordOutsideLiterals(sql: string): string | null {\n  let first: string | null = null;\n  scanSqlKeywordsOutsideLiterals(sql, (token) => {\n    first = token;\n    return true;\n  });\n  return first;\n}\n\n// VALUES is a row-producing statement in SQLite (not a mutation); WITH … VALUES too.\nconst ROW_PRODUCING_LEAD_KEYWORDS = new Set([\n  \"SELECT\",\n  \"PRAGMA\",\n  \"EXPLAIN\",\n  \"VALUES\",\n]);\nconst MUTATION_LEAD_KEYWORDS = new Set([\n  \"INSERT\",\n  \"UPDATE\",\n  \"DELETE\",\n  \"REPLACE\",\n]);\n/** Keywords that open the statement body after a WITH cte-list (SQLite). */\nconst WITH_TERMINAL_KEYWORDS = new Set([\n  \"SELECT\",\n  \"INSERT\",\n  \"UPDATE\",\n  \"DELETE\",\n  \"REPLACE\",\n  \"VALUES\",\n  \"PRAGMA\",\n  \"EXPLAIN\",\n]);\n\n/**\n * After a leading `WITH`, find the main statement keyword (SELECT/UPDATE/…)\n * at paren depth 0, skipping CTE bodies. Nested SELECTs inside `AS (…)` are ignored.\n */\nexport function sqlTerminalKeywordAfterWith(sql: string): string | null {\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n  let inLineComment = false;\n  let inBlockComment = false;\n  let depth = 0;\n  let sawWith = false;\n\n  for (let i = 0; i < sql.length; i += 1) {\n    const ch = sql[i]!;\n    const next = sql[i + 1];\n\n    if (inLineComment) {\n      if (ch === \"\\n\" || ch === \"\\r\") {\n        inLineComment = false;\n      }\n      continue;\n    }\n    if (inBlockComment) {\n      if (ch === \"*\" && next === \"/\") {\n        i += 1;\n        inBlockComment = false;\n      }\n      continue;\n    }\n    if (inSingle) {\n      if (ch === \"'\" && next === \"'\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      continue;\n    }\n    if (inDouble) {\n      if (ch === '\"' && next === '\"') {\n        i += 1;\n        continue;\n      }\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      continue;\n    }\n    if (inBacktick) {\n      if (ch === \"`\" && next === \"`\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      continue;\n    }\n    if (inBracket) {\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      continue;\n    }\n\n    if (ch === \"-\" && next === \"-\") {\n      inLineComment = true;\n      i += 1;\n      continue;\n    }\n    if (ch === \"/\" && next === \"*\") {\n      inBlockComment = true;\n      i += 1;\n      continue;\n    }\n    if (ch === \"'\") {\n      inSingle = true;\n      continue;\n    }\n    if (ch === '\"') {\n      inDouble = true;\n      continue;\n    }\n    if (ch === \"`\") {\n      inBacktick = true;\n      continue;\n    }\n    if (ch === \"[\") {\n      inBracket = true;\n      continue;\n    }\n\n    if (ch === \"(\") {\n      depth += 1;\n      continue;\n    }\n    if (ch === \")\") {\n      if (depth > 0) {\n        depth -= 1;\n      }\n      continue;\n    }\n\n    if (depth !== 0 || !isIdentChar(ch) || isIdentChar(sql[i - 1])) {\n      continue;\n    }\n\n    let end = i + 1;\n    while (end < sql.length && isIdentChar(sql[end])) {\n      end += 1;\n    }\n    const keyword = sql.slice(i, end);\n    const upper = keyword.toUpperCase();\n\n    if (!sawWith) {\n      if (upper === \"WITH\") {\n        sawWith = true;\n      }\n      i = end - 1;\n      continue;\n    }\n\n    // Inside WITH cte-list at depth 0: RECURSIVE / names / AS / MATERIALIZED …\n    // Terminal main statement is the first recognized opener after CTE bodies.\n    if (WITH_TERMINAL_KEYWORDS.has(upper)) {\n      return keyword;\n    }\n    i = end - 1;\n  }\n  return null;\n}\n\n/**\n * Lead keyword used for all()/run() classification. For `WITH …`, returns the\n * terminal statement keyword so CTE mutations are not treated as SELECT.\n */\nexport function sqlLeadStatementKeyword(sql: string): string | null {\n  const first = sqlFirstKeywordOutsideLiterals(sql);\n  if (!first) {\n    return null;\n  }\n  if (first.toUpperCase() !== \"WITH\") {\n    return first;\n  }\n  return sqlTerminalKeywordAfterWith(sql) ?? first;\n}\n\n/**\n * Whether a prepared statement is expected to return a result set via all().\n * Leading comments, CTE terminal statements, and RETURNING (outside literals)\n * are handled.\n */\nexport function statementExpectsResultRows(sql: string): boolean {\n  const lead = sqlLeadStatementKeyword(sql);\n  if (lead) {\n    const upper = lead.toUpperCase();\n    if (ROW_PRODUCING_LEAD_KEYWORDS.has(upper)) {\n      return true;\n    }\n    // WITH … UPDATE/INSERT/DELETE without RETURNING → metadata path (run()).\n    if (MUTATION_LEAD_KEYWORDS.has(upper)) {\n      return sqlContainsKeywordOutsideLiterals(sql, \"RETURNING\");\n    }\n    // Unrecognized lead after WITH: fall through to RETURNING check.\n  }\n  return sqlContainsKeywordOutsideLiterals(sql, \"RETURNING\");\n}\n\n/** Flatten D1 batch statement results into a single row array for client.query. */\nfunction collectRowsFromBatchResults(\n  results: D1ResultLike<unknown>[]\n): unknown[] {\n  const rows: unknown[] = [];\n  for (const item of results) {\n    if (Array.isArray(item.results) && item.results.length > 0) {\n      rows.push(...item.results);\n    }\n  }\n  return rows;\n}\n\n/** Sum D1 `meta.changes` across batch items; fall back to statement count. */\nfunction sumBatchAffectedRows(\n  results: D1ResultLike<unknown>[],\n  statementCount: number\n): number {\n  let sum = 0;\n  let sawChanges = false;\n  for (const item of results) {\n    const changes = item.meta?.changes;\n    if (typeof changes === \"number\") {\n      sum += changes;\n      sawChanges = true;\n    }\n  }\n  return sawChanges ? sum : statementCount;\n}\n\n/** Word-boundary keyword match at `index` (ASCII identifiers / SQL keywords). */\nfunction matchSqlKeywordAt(\n  query: string,\n  index: number,\n  keyword: string\n): number | null {\n  const len = keyword.length;\n  if (index + len > query.length) {\n    return null;\n  }\n  const slice = query.slice(index, index + len);\n  if (slice.toLowerCase() !== keyword.toLowerCase()) {\n    return null;\n  }\n  const before = index === 0 ? \"\" : query[index - 1]!;\n  const after = index + len >= query.length ? \"\" : query[index + len]!;\n  const isIdent = (c: string) => /[A-Za-z0-9_]/.test(c);\n  if (before && isIdent(before)) {\n    return null;\n  }\n  if (after && isIdent(after)) {\n    return null;\n  }\n  return len;\n}\n\n/**\n * Split SQL into statements without treating `;` inside string literals,\n * quoted identifiers, comments, or SQLite trigger bodies as separators.\n *\n * Trigger DDL (`CREATE TRIGGER ... BEGIN ...; ...; END`) keeps the body as one\n * statement. Nested `CASE ... END` inside the body does not close the trigger.\n * Bare transaction `BEGIN` / `BEGIN TRANSACTION` is not treated as a body opener.\n */\nexport function splitSqlStatements(query: string): string[] {\n  const statements: string[] = [];\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n  let inLineComment = false;\n  let inBlockComment = false;\n  let segmentStart = 0;\n  let segmentHasContent = false;\n\n  /** After `CREATE TRIGGER`, wait for the body-opening `BEGIN`. */\n  let awaitTriggerBegin = false;\n  /** Depth of open `CREATE TRIGGER ... BEGIN` bodies (normally 0 or 1). */\n  let triggerBodyDepth = 0;\n  /** Nested `CASE` expressions so their `END` does not close a trigger body. */\n  let caseDepth = 0;\n\n  const flushSegment = (end: number) => {\n    if (!segmentHasContent) {\n      segmentStart = end + 1;\n      return;\n    }\n    const sql = query.slice(segmentStart, end).trim();\n    if (sql) {\n      statements.push(sql);\n    }\n    segmentHasContent = false;\n    segmentStart = end + 1;\n    awaitTriggerBegin = false;\n    triggerBodyDepth = 0;\n    caseDepth = 0;\n  };\n\n  for (let i = 0; i < query.length; i += 1) {\n    const ch = query[i]!;\n    const next = query[i + 1];\n\n    if (inLineComment) {\n      if (ch === \"\\n\" || ch === \"\\r\") {\n        inLineComment = false;\n      }\n      continue;\n    }\n\n    if (inBlockComment) {\n      if (ch === \"*\" && next === \"/\") {\n        inBlockComment = false;\n        i += 1;\n      }\n      continue;\n    }\n\n    if (inSingle) {\n      if (ch === \"'\" && next === \"'\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      continue;\n    }\n\n    if (inDouble) {\n      if (ch === '\"' && next === '\"') {\n        i += 1;\n        continue;\n      }\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      continue;\n    }\n\n    // SQLite also allows `backtick` and [bracket] identifiers.\n    if (inBacktick) {\n      if (ch === \"`\" && next === \"`\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      continue;\n    }\n\n    if (inBracket) {\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      continue;\n    }\n\n    if (ch === \"-\" && next === \"-\") {\n      inLineComment = true;\n      i += 1;\n      continue;\n    }\n\n    if (ch === \"/\" && next === \"*\") {\n      inBlockComment = true;\n      i += 1;\n      continue;\n    }\n\n    if (ch === \"'\") {\n      inSingle = true;\n      segmentHasContent = true;\n      continue;\n    }\n\n    if (ch === '\"') {\n      inDouble = true;\n      segmentHasContent = true;\n      continue;\n    }\n\n    if (ch === \"`\") {\n      inBacktick = true;\n      segmentHasContent = true;\n      continue;\n    }\n\n    if (ch === \"[\") {\n      inBracket = true;\n      segmentHasContent = true;\n      continue;\n    }\n\n    // Structural keywords that affect statement boundaries (trigger bodies / CASE).\n    if (/[A-Za-z_]/.test(ch)) {\n      const createLen = matchSqlKeywordAt(query, i, \"CREATE\");\n      if (createLen !== null) {\n        // CREATE [TEMP|TEMPORARY] TRIGGER [IF NOT EXISTS] …\n        // SQLite allows whitespace and comments between these keywords.\n        let j = i + createLen;\n        const skipWsAndComments = () => {\n          while (j < query.length) {\n            const c = query[j]!;\n            const n = query[j + 1];\n            if (/\\s/.test(c)) {\n              j += 1;\n              continue;\n            }\n            if (c === \"-\" && n === \"-\") {\n              j += 2;\n              while (\n                j < query.length &&\n                query[j] !== \"\\n\" &&\n                query[j] !== \"\\r\"\n              ) {\n                j += 1;\n              }\n              continue;\n            }\n            if (c === \"/\" && n === \"*\") {\n              j += 2;\n              while (j < query.length) {\n                if (query[j] === \"*\" && query[j + 1] === \"/\") {\n                  j += 2;\n                  break;\n                }\n                j += 1;\n              }\n              continue;\n            }\n            break;\n          }\n        };\n        skipWsAndComments();\n        const tempLen =\n          matchSqlKeywordAt(query, j, \"TEMPORARY\") ??\n          matchSqlKeywordAt(query, j, \"TEMP\");\n        if (tempLen !== null) {\n          j += tempLen;\n          skipWsAndComments();\n        }\n        const triggerLen = matchSqlKeywordAt(query, j, \"TRIGGER\");\n        if (triggerLen !== null) {\n          awaitTriggerBegin = true;\n          segmentHasContent = true;\n          i += createLen - 1;\n          continue;\n        }\n        segmentHasContent = true;\n        i += createLen - 1;\n        continue;\n      }\n\n      const caseLen = matchSqlKeywordAt(query, i, \"CASE\");\n      if (caseLen !== null) {\n        caseDepth += 1;\n        segmentHasContent = true;\n        i += caseLen - 1;\n        continue;\n      }\n\n      const beginLen = matchSqlKeywordAt(query, i, \"BEGIN\");\n      if (beginLen !== null) {\n        if (awaitTriggerBegin) {\n          triggerBodyDepth += 1;\n          awaitTriggerBegin = false;\n        }\n        segmentHasContent = true;\n        i += beginLen - 1;\n        continue;\n      }\n\n      const endLen = matchSqlKeywordAt(query, i, \"END\");\n      if (endLen !== null) {\n        if (caseDepth > 0) {\n          caseDepth -= 1;\n        } else if (triggerBodyDepth > 0) {\n          triggerBodyDepth -= 1;\n        }\n        segmentHasContent = true;\n        i += endLen - 1;\n        continue;\n      }\n\n      // Consume the rest of this identifier so we do not re-scan mid-token.\n      let j = i + 1;\n      while (j < query.length && /[A-Za-z0-9_]/.test(query[j]!)) {\n        j += 1;\n      }\n      segmentHasContent = true;\n      i = j - 1;\n      continue;\n    }\n\n    if (ch === \";\") {\n      // Keep trigger bodies (and any nested CASE) as a single statement.\n      if (triggerBodyDepth > 0 || caseDepth > 0) {\n        segmentHasContent = true;\n        continue;\n      }\n      flushSegment(i);\n      continue;\n    }\n\n    if (!/\\s/.test(ch)) {\n      segmentHasContent = true;\n    }\n  }\n\n  flushSegment(query.length);\n  return statements;\n}\n\n/**\n * Detect multiple SQL statements without treating `;` inside string literals,\n * quoted identifiers, comments, or trigger bodies as separators.\n */\nexport function isMultiStatement(query: string): boolean {\n  return splitSqlStatements(query).length > 1;\n}\n\nfunction resolveSessionTarget(\n  db: D1DatabaseLike,\n  input: D1RunnerSessionInput\n): { target: D1DatabaseLike | D1SessionLike; session: D1SessionLike | null } {\n  const sessionValue = input.bookmark?.trim() || input.sessionMode?.trim();\n  if (!sessionValue) {\n    return { session: null, target: db };\n  }\n  if (typeof db.withSession !== \"function\") {\n    throw new Error(\n      \"D1 session mode/bookmark requested but withSession is not available\"\n    );\n  }\n  const session = db.withSession(sessionValue);\n  return { session, target: session };\n}\n\n/**\n * D1 prepared-statement bind rejects JS booleans (parameter-type error).\n * Map true→1 / false→0 so .eq('pending', true) and insert bodies work.\n */\nfunction normalizeD1BindParams(params: unknown[]): unknown[] {\n  return params.map((value) => {\n    if (typeof value === \"boolean\") {\n      return value ? 1 : 0;\n    }\n    return value;\n  });\n}\n\n/**\n * Execute a single query (or multi-statement `exec`) against a D1 binding.\n */\nexport async function executeD1Query(\n  db: D1DatabaseLike,\n  input: D1QueryInput\n): Promise<D1RunnerQueryResult> {\n  const query = input.query?.trim();\n  if (!query) {\n    return { error: \"invalid_query\", message: \"query is required\", ok: false };\n  }\n\n  const params = normalizeD1BindParams(\n    Array.isArray(input.params) ? input.params : []\n  );\n  const { target, session } = resolveSessionTarget(db, input);\n\n  if (isMultiStatement(query)) {\n    if (params.length > 0) {\n      return {\n        error: \"invalid_query\",\n        message: \"params are only supported for single prepared statements\",\n        ok: false,\n      };\n    }\n    const resolveBookmark = (): string | null => session?.getBookmark() ?? null;\n    const parts = splitSqlStatements(query);\n    // Prefer batch over exec so row-producing statements (SELECT …) surface\n    // results — D1 exec() only returns statement counts, not result sets.\n    // Sessions also lack exec(); batch(prepare) works on both targets.\n    if (typeof target.batch === \"function\") {\n      const prepared = parts.map((part) => target.prepare(part));\n      const results = await target.batch(prepared);\n      const rows = collectRowsFromBatchResults(results);\n      return {\n        bookmark: resolveBookmark(),\n        columns: resultColumns(rows),\n        // Prefer returned rows; otherwise sum mutation meta.changes (not statement count).\n        count:\n          rows.length > 0\n            ? rows.length\n            : sumBatchAffectedRows(results, parts.length),\n        meta: { results, statementCount: parts.length },\n        ok: true,\n        rows,\n        statementCount: parts.length,\n      };\n    }\n    const canExec =\n      typeof (target as D1DatabaseLike).exec === \"function\" && !session;\n    if (canExec) {\n      const execResult: D1ExecResultLike = await (\n        target as D1DatabaseLike\n      ).exec?.(query);\n      return {\n        bookmark: resolveBookmark(),\n        columns: [],\n        count: execResult.count,\n        durationMs: execResult.duration,\n        meta: { statementCount: execResult.count },\n        ok: true,\n        rows: [],\n        statementCount: execResult.count,\n      };\n    }\n    return {\n      error: \"invalid_query\",\n      message: \"multi-statement query requires D1 batch() or exec() support\",\n      ok: false,\n    };\n  }\n\n  let statement = target.prepare(query);\n  if (params.length > 0) {\n    statement = statement.bind(...params);\n  }\n\n  // Prefer .all() when the statement returns rows. Real D1 bindings only expose\n  // RETURNING result sets via all()/first() — run() is metadata-oriented and can\n  // yield empty results for INSERT/UPDATE/DELETE … RETURNING.\n  // Skip leading comments and detect RETURNING only outside literals/comments.\n  const expectsRows = statementExpectsResultRows(query);\n  const result = expectsRows ? await statement.all() : await statement.run();\n  if (result.success === false) {\n    const errorField = (result as { error?: unknown }).error;\n    const message =\n      typeof errorField === \"string\" && errorField.trim()\n        ? errorField\n        : \"D1 query failed\";\n    return {\n      error: \"query_failed\",\n      message,\n      ok: false,\n    };\n  }\n  const rows = Array.isArray(result.results) ? result.results : [];\n  const bookmark = session?.getBookmark() ?? null;\n  const meta = (result.meta ?? {}) as Record<string, unknown>;\n  const changes =\n    typeof meta.changes === \"number\"\n      ? meta.changes\n      : typeof result.meta?.changes === \"number\"\n        ? result.meta.changes\n        : undefined;\n\n  return {\n    bookmark,\n    columns: resultColumns(rows),\n    count: expectsRows ? rows.length : (changes ?? rows.length),\n    durationMs:\n      typeof result.meta?.duration === \"number\"\n        ? result.meta.duration\n        : undefined,\n    meta,\n    ok: true,\n    rows,\n  };\n}\n\n/**\n * Execute a batch of prepared statements against a D1 binding.\n */\nexport async function executeD1Batch(\n  db: D1DatabaseLike,\n  input: D1BatchInput\n): Promise<D1RunnerBatchResult> {\n  const statements = Array.isArray(input.statements) ? input.statements : [];\n  if (statements.length === 0) {\n    return {\n      error: \"invalid_batch\",\n      message: \"statements must contain at least one item\",\n      ok: false,\n    };\n  }\n\n  const { target, session } = resolveSessionTarget(db, input);\n  const prepared = statements.map((item) => {\n    const query = item.query?.trim();\n    if (!query) {\n      throw new Error(\"statements[].query is required\");\n    }\n    const params = normalizeD1BindParams(\n      Array.isArray(item.params) ? item.params : []\n    );\n    let statement = target.prepare(query);\n    if (params.length > 0) {\n      statement = statement.bind(...params);\n    }\n    return statement;\n  });\n\n  const results = await target.batch(prepared);\n  const bookmark = session?.getBookmark() ?? null;\n  return {\n    bookmark,\n    ok: true,\n    results,\n  };\n}\n","/**\n * L1 D1/SQLite SQL compiler for flat gateway payloads.\n * Aligned with gateway D1 matrix: flat select/insert/update/delete + upsert.\n */\n\nimport type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCondition,\n  AthenaInsertPayload,\n  AthenaJsonObject,\n  AthenaJsonValue,\n  AthenaSortBy,\n  AthenaUpdatePayload,\n} from \"../../gateway/types.ts\";\nimport { quoteQualifiedIdentifier } from \"../../sql-identifiers.ts\";\n\nexport interface D1CompiledStatement {\n  params: unknown[];\n  sql: string;\n}\n\n/**\n * One or more statements. Sparse multi-row inserts without NULL-coercion expand\n * into a batch of single-row inserts (SQLite rejects `DEFAULT` in VALUES tuples).\n */\nexport type D1CompiledSql = D1CompiledStatement & {\n  statements?: D1CompiledStatement[];\n};\n\nfunction asSingle(sql: string, params: unknown[]): D1CompiledSql {\n  return { params, sql };\n}\n\nfunction asBatch(statements: D1CompiledStatement[]): D1CompiledSql {\n  if (statements.length === 0) {\n    throw new D1SqlCompileError(\n      \"empty_insert\",\n      \"batch requires at least one statement\"\n    );\n  }\n  return {\n    params: statements[0]?.params,\n    sql: statements[0]?.sql,\n    statements,\n  };\n}\n\nfunction hasPaginationBounds(payload: {\n  limit?: number;\n  offset?: number;\n  current_page?: number;\n  page_size?: number;\n}): boolean {\n  return (\n    payload.limit !== undefined ||\n    payload.offset !== undefined ||\n    payload.page_size !== undefined ||\n    payload.current_page !== undefined\n  );\n}\n\n/**\n * Ensure mutation pagination actually produces a LIMIT/OFFSET clause.\n * `.currentPage(n)` alone would otherwise look \"bounded\" but emit no limit and\n * update/delete every matching row.\n */\nfunction assertEffectiveMutationBounds(payload: {\n  limit?: number;\n  offset?: number;\n  current_page?: number;\n  page_size?: number;\n}): void {\n  if (\n    payload.current_page !== undefined &&\n    payload.page_size === undefined &&\n    payload.limit === undefined\n  ) {\n    throw new D1SqlCompileError(\n      \"page_without_size\",\n      \"current_page requires page_size (or limit) for bounded update/delete on D1 edge-local\"\n    );\n  }\n  const clause = limitOffsetClause(payload);\n  if (!clause.trim()) {\n    throw new D1SqlCompileError(\n      \"invalid_pagination_bounds\",\n      \"Bounded update/delete requires limit, offset, and/or page_size on D1 edge-local\"\n    );\n  }\n}\n\n/**\n * SQLite system row identity aliases. A user column with any of these names\n * shadows the system rowid — bounded mutations would then be unsafe.\n */\nconst SQLITE_ROWID_ALIASES = new Set([\"rowid\", \"oid\", \"_rowid_\"]);\n\n/** Optional compile-time options for D1 SQL compilation. */\nexport interface D1CompileOptions {\n  /**\n   * Proven single-column unique identity for bounded UPDATE/DELETE (from\n   * PRAGMA table_info / unique indexes, or an explicit caller override).\n   * Required for limit/offset/page bounded mutations.\n   */\n  identityColumn?: string;\n}\n\nfunction referencedMutationColumns(payload: {\n  conditions?: AthenaGatewayCondition[];\n  sort_by?: AthenaSortBy;\n}): string[] {\n  const names: string[] = [];\n  for (const condition of payload.conditions ?? []) {\n    const column = (condition.column ?? condition.eq_column ?? \"\").trim();\n    if (column) {\n      names.push(column);\n    }\n  }\n  if (payload.sort_by?.field?.trim()) {\n    names.push(payload.sort_by.field.trim());\n  }\n  return names;\n}\n\n/**\n * Choose a safe identity expression for bounded update/delete, or throw.\n *\n * Pure L1 has no live schema: callers (transport) must supply a proven unique\n * `identityColumn` (single-column PK or unique index). Never assume `id`.\n * Reject filters/order that reference shadowable rowid aliases.\n */\nfunction resolveBoundedIdentityColumn(\n  payload: {\n    conditions?: AthenaGatewayCondition[];\n    sort_by?: AthenaSortBy;\n  },\n  options?: D1CompileOptions\n): string {\n  const refs = referencedMutationColumns(payload);\n  const lower = refs.map((name) => name.toLowerCase());\n\n  if (lower.some((name) => SQLITE_ROWID_ALIASES.has(name))) {\n    throw new D1SqlCompileError(\n      \"bounded_mutation_unsafe_identity\",\n      \"Bounded update/delete cannot use rowid/oid/_rowid_ in filters or order — \" +\n        \"those names may be user columns that shadow SQLite row identity. \" +\n        \"Resolve the table primary key (or a single-column unique index) instead.\"\n    );\n  }\n\n  const identity = options?.identityColumn?.trim();\n  if (!identity) {\n    throw new D1SqlCompileError(\n      \"bounded_mutation_no_unique_identity\",\n      \"Bounded update/delete requires a proven unique identity column from the table schema \" +\n        \"(single-column PRIMARY KEY or UNIQUE index). Cannot assume a column named id.\"\n    );\n  }\n  if (SQLITE_ROWID_ALIASES.has(identity.toLowerCase())) {\n    throw new D1SqlCompileError(\n      \"bounded_mutation_unsafe_identity\",\n      `Bounded update/delete cannot use identity column \"${identity}\" — ` +\n        \"it may shadow SQLite row identity.\"\n    );\n  }\n  return identity;\n}\n\n/**\n * SQLite-compatible bounded mutation via unique-identity subquery.\n * Uses `\"pk\" IN (SELECT \"pk\" … LIMIT …)` — not system `_rowid_`.\n */\nfunction boundedRowidInClause(\n  table: string,\n  whereSql: string,\n  whereParams: unknown[],\n  payload: {\n    limit?: number;\n    offset?: number;\n    current_page?: number;\n    page_size?: number;\n    sort_by?: AthenaSortBy;\n    conditions?: AthenaGatewayCondition[];\n  },\n  options?: D1CompileOptions\n): { sql: string; params: unknown[] } {\n  assertEffectiveMutationBounds(payload);\n  const identity = resolveBoundedIdentityColumn(payload, options);\n  const identitySql = quoteIdent(identity);\n  const innerWhere = whereSql.replace(/^WHERE\\s+/i, \"\");\n  const parts = [\n    `SELECT ${identitySql} FROM ${quoteIdent(table)}`,\n    innerWhere ? `WHERE ${innerWhere}` : \"\",\n    orderClause(payload.sort_by),\n    limitOffsetClause(payload),\n  ].filter(Boolean);\n  return {\n    params: [...whereParams],\n    sql: `${identitySql} IN (${parts.join(\" \")})`,\n  };\n}\n\nexport class D1SqlCompileError extends Error {\n  readonly code: string;\n\n  constructor(code: string, message: string) {\n    super(message);\n    this.name = \"D1SqlCompileError\";\n    this.code = code;\n  }\n}\n\n/** Simple SQL identifier: letter/underscore start, then alphanumerics/underscore. */\nconst SAFE_IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\n/**\n * Drop-in mapping for Postgres-oriented AthenaModels on D1/SQLite.\n *\n * D1 has no schemas. Gateway/model wire names like `public.users` (from\n * `table('users').schema('public')` or `meta.tableName: \"public.users\"`) are\n * reduced to the bare table segment so the same models work on edge without\n * rewriting registries.\n *\n * Multi-schema collisions (`public.users` vs `analytics.users` → both `users`)\n * must be disambiguated with an explicit physical name\n * (`.from('analytics_users')` / `meta.tableName: \"analytics_users\"`).\n */\nexport function normalizeD1TableName(name: string): string {\n  const trimmed = name.trim();\n  if (!trimmed) {\n    throw new D1SqlCompileError(\"invalid_identifier\", \"Identifier is required\");\n  }\n  if (!trimmed.includes(\".\")) {\n    return trimmed;\n  }\n  const segments = trimmed\n    .split(\".\")\n    .map((segment) => segment.trim())\n    .filter(Boolean);\n  if (segments.length < 2) {\n    throw new D1SqlCompileError(\n      \"invalid_identifier\",\n      `Invalid schema-qualified name for D1 edge-local: ${trimmed}`\n    );\n  }\n  return segments.at(-1)!;\n}\n\nfunction quoteIdent(name: string): string {\n  const bare = normalizeD1TableName(name);\n  // Reject quotes, whitespace, and other characters that would only appear\n  // if a caller tried to smuggle SQL past quoting.\n  if (!SAFE_IDENTIFIER.test(bare)) {\n    throw new D1SqlCompileError(\n      \"invalid_identifier\",\n      `Invalid SQL identifier for D1 edge-local: ${bare}`\n    );\n  }\n  return quoteQualifiedIdentifier(bare);\n}\n\n/** Response alias form: `user_id:id` → `\"id\" AS \"user_id\"`. */\nconst RESPONSE_ALIAS_PATTERN =\n  /^([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*([A-Za-z_][A-Za-z0-9_]*)$/;\n/** SQL alias form: `id as user_id` or `id user_id`. */\nconst SQL_ALIAS_PATTERN =\n  /^([A-Za-z_][A-Za-z0-9_]*)\\s+(?:as\\s+)?([A-Za-z_][A-Za-z0-9_]*)$/i;\n\n/**\n * Quote one SELECT/RETURNING token. Only simple identifiers and documented\n * aliases are accepted — raw expressions are rejected to prevent SQL injection\n * from user-controlled column lists (gateway may pass expressions through).\n */\nfunction quoteSelectTokenStrict(token: string): string {\n  const trimmed = token.trim();\n  if (!trimmed || trimmed === \"*\") {\n    return trimmed || \"*\";\n  }\n\n  if (SAFE_IDENTIFIER.test(trimmed)) {\n    return quoteQualifiedIdentifier(trimmed);\n  }\n\n  const responseAlias = RESPONSE_ALIAS_PATTERN.exec(trimmed);\n  if (responseAlias) {\n    const [, aliasIdentifier, baseIdentifier] = responseAlias;\n    return `${quoteQualifiedIdentifier(baseIdentifier!)} AS ${quoteQualifiedIdentifier(aliasIdentifier!)}`;\n  }\n\n  const sqlAlias = SQL_ALIAS_PATTERN.exec(trimmed);\n  if (sqlAlias) {\n    const [, baseIdentifier, aliasIdentifier] = sqlAlias;\n    return `${quoteQualifiedIdentifier(baseIdentifier!)} AS ${quoteQualifiedIdentifier(aliasIdentifier!)}`;\n  }\n\n  throw new D1SqlCompileError(\n    \"unsafe_select\",\n    `SELECT/RETURNING expressions are not supported on D1 edge-local; use column names or aliases only: ${token}`\n  );\n}\n\n/**\n * SELECT / RETURNING list with documented response aliases (`alias:column`)\n * and SQL-style aliases (`column as alias`). Edge-local only allows identifiers.\n */\nfunction selectClause(columns: string[] | string | undefined): string {\n  if (columns === undefined || columns === \"*\" || columns === \"\") {\n    return \"*\";\n  }\n  if (typeof columns === \"string\") {\n    const trimmed = columns.trim();\n    if (!trimmed || trimmed === \"*\") {\n      return \"*\";\n    }\n    return trimmed\n      .split(\",\")\n      .map((part) => quoteSelectTokenStrict(part))\n      .join(\", \");\n  }\n  if (columns.length === 0) {\n    return \"*\";\n  }\n  return columns.map((column) => quoteSelectTokenStrict(column)).join(\", \");\n}\n\n/** RETURNING is omitted for head-only mutations (metadata / count without row body). */\nfunction wantsReturning(payload: {\n  columns?: string[] | string;\n  head?: boolean;\n}): boolean {\n  return Boolean(payload.columns) && payload.head !== true;\n}\n\ninterface WhereClause {\n  params: unknown[];\n  sql: string;\n}\n\nfunction conditionToWhere(condition: AthenaGatewayCondition): WhereClause {\n  const column = condition.column?.trim() || condition.eq_column?.trim() || \"\";\n  if (!column) {\n    throw new D1SqlCompileError(\n      \"invalid_condition\",\n      \"Condition requires a column\"\n    );\n  }\n  const col = quoteIdent(column);\n  const operator = (condition.operator || \"eq\").toLowerCase();\n  const value =\n    condition.value === undefined ? condition.eq_value : condition.value;\n\n  switch (operator) {\n    case \"eq\": {\n      if (Array.isArray(value)) {\n        if (value.length === 0) {\n          return { params: [], sql: \"1 = 0\" };\n        }\n        const placeholders = value.map(() => \"?\").join(\", \");\n        return { params: [...value], sql: `${col} IN (${placeholders})` };\n      }\n      // SQLite: `col = NULL` is unknown and matches nothing. Match gateway /\n      // structured-fetch semantics: null equality → IS NULL.\n      if (value === null) {\n        return { params: [], sql: `${col} IS NULL` };\n      }\n      return { params: [value ?? null], sql: `${col} = ?` };\n    }\n    case \"neq\":\n      // SQLite: `col != NULL` never matches. Match gateway: null neq → IS NOT NULL.\n      if (value === null) {\n        return { params: [], sql: `${col} IS NOT NULL` };\n      }\n      return { params: [value ?? null], sql: `${col} != ?` };\n    case \"gt\":\n      return { params: [value ?? null], sql: `${col} > ?` };\n    case \"gte\":\n      return { params: [value ?? null], sql: `${col} >= ?` };\n    case \"lt\":\n      return { params: [value ?? null], sql: `${col} < ?` };\n    case \"lte\":\n      return { params: [value ?? null], sql: `${col} <= ?` };\n    case \"like\":\n      return { params: [value ?? null], sql: `${col} LIKE ?` };\n    case \"ilike\":\n      return { params: [value ?? null], sql: `${col} LIKE ? COLLATE NOCASE` };\n    case \"in\": {\n      const items = Array.isArray(value)\n        ? value\n        : value === undefined\n          ? []\n          : [value];\n      if (items.length === 0) {\n        return { params: [], sql: \"1 = 0\" };\n      }\n      const placeholders = items.map(() => \"?\").join(\", \");\n      return { params: [...items], sql: `${col} IN (${placeholders})` };\n    }\n    case \"is\": {\n      if (value === null || value === \"null\") {\n        return { params: [], sql: `${col} IS NULL` };\n      }\n      if (value === true || value === \"true\") {\n        return { params: [], sql: `${col} IS TRUE` };\n      }\n      if (value === false || value === \"false\") {\n        return { params: [], sql: `${col} IS FALSE` };\n      }\n      return { params: [value], sql: `${col} IS ?` };\n    }\n    case \"not\":\n    case \"or\":\n    case \"contains\":\n    case \"containedby\":\n      throw new D1SqlCompileError(\n        \"unsupported_operator\",\n        `Condition operator \"${operator}\" is not supported on D1 edge-local L1`\n      );\n    default:\n      throw new D1SqlCompileError(\n        \"unsupported_operator\",\n        `Unknown condition operator \"${operator}\"`\n      );\n  }\n}\n\nfunction buildWhere(\n  conditions: AthenaGatewayCondition[] | undefined\n): WhereClause {\n  if (!conditions?.length) {\n    return { params: [], sql: \"\" };\n  }\n  const parts: string[] = [];\n  const params: unknown[] = [];\n  for (const condition of conditions) {\n    // Legacy shape: only eq_column/eq_value without operator\n    if (!condition.operator && condition.eq_column) {\n      const clause = conditionToWhere({\n        ...condition,\n        column: condition.eq_column,\n        operator: \"eq\",\n        value: condition.eq_value,\n      });\n      parts.push(clause.sql);\n      params.push(...clause.params);\n      continue;\n    }\n    const clause = conditionToWhere(condition);\n    parts.push(clause.sql);\n    params.push(...clause.params);\n  }\n  return {\n    params,\n    sql: parts.length ? `WHERE ${parts.join(\" AND \")}` : \"\",\n  };\n}\n\nfunction orderClause(order?: AthenaSortBy): string {\n  if (!order?.field?.trim()) {\n    return \"\";\n  }\n  const direction = order.direction === \"descending\" ? \"DESC\" : \"ASC\";\n  return `ORDER BY ${quoteIdent(order.field)} ${direction}`;\n}\n\nfunction limitOffsetClause(payload: {\n  limit?: number;\n  offset?: number;\n  current_page?: number;\n  page_size?: number;\n}): string {\n  let limit = payload.limit;\n  let offset = payload.offset;\n\n  // Prefer explicit page_size as the page length when limit is absent.\n  if (limit === undefined && payload.page_size !== undefined) {\n    limit = payload.page_size;\n  }\n\n  // Apply current_page → OFFSET using page_size, or limit when page_size is\n  // omitted (`.limit(10).currentPage(2)` must not stay at OFFSET 0).\n  if (payload.current_page !== undefined && offset === undefined) {\n    const pageSize = payload.page_size ?? payload.limit;\n    if (pageSize !== undefined) {\n      offset = Math.max(0, (payload.current_page - 1) * pageSize);\n    }\n  }\n\n  const parts: string[] = [];\n  // SQLite/D1 requires LIMIT when OFFSET is present; -1 means no upper bound.\n  if (offset !== undefined && limit === undefined) {\n    parts.push(\"LIMIT -1\");\n    parts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`);\n  } else {\n    if (limit !== undefined) {\n      parts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`);\n    }\n    if (offset !== undefined) {\n      parts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`);\n    }\n  }\n  return parts.join(\" \");\n}\n\nfunction rejectStructuredRelations(payload: AthenaFetchPayload): void {\n  const select = payload.select;\n  if (select && typeof select === \"object\" && !Array.isArray(select)) {\n    for (const value of Object.values(select)) {\n      if (value && typeof value === \"object\") {\n        throw new D1SqlCompileError(\n          \"relations_unsupported\",\n          \"Nested relation selects are unsupported on D1 edge-local\"\n        );\n      }\n    }\n  }\n  if (payload.view_name) {\n    throw new D1SqlCompileError(\n      \"view_unsupported\",\n      \"view_name is unsupported on D1 edge-local L1\"\n    );\n  }\n}\n\nfunction jsonValue(value: AthenaJsonValue | undefined): unknown {\n  if (value === undefined) {\n    return null;\n  }\n  if (value !== null && typeof value === \"object\") {\n    return JSON.stringify(value);\n  }\n  return value;\n}\n\n/**\n * Compile flat gateway fetch to SQLite SELECT.\n * When `head: true`, compiles a COUNT(*) query (no row body).\n */\nexport function compileD1Fetch(payload: AthenaFetchPayload): D1CompiledSql {\n  rejectStructuredRelations(payload);\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new D1SqlCompileError(\n      \"missing_table\",\n      \"table_name is required for fetch\"\n    );\n  }\n\n  // Structured findMany-style select object with only column:true flags\n  let columns: string[] | string | undefined = payload.columns;\n  if (\n    payload.select &&\n    typeof payload.select === \"object\" &&\n    !Array.isArray(payload.select)\n  ) {\n    const keys = Object.entries(payload.select)\n      .filter(([, enabled]) => enabled === true || enabled === 1)\n      .map(([key]) => key);\n    if (keys.length > 0) {\n      columns = keys;\n    }\n  } else if (typeof payload.select === \"string\" && payload.select.trim()) {\n    columns = payload.select;\n  }\n\n  let where = buildWhere(payload.conditions);\n  // Also map simple where object if present (eq only)\n  if (!where.sql && payload.where && typeof payload.where === \"object\") {\n    const eqConditions: AthenaGatewayCondition[] = Object.entries(\n      payload.where as AthenaJsonObject\n    ).map(([column, value]) => ({\n      column,\n      operator: \"eq\" as const,\n      value: value as AthenaGatewayCondition[\"value\"],\n    }));\n    where = buildWhere(eqConditions);\n  }\n\n  if (payload.head === true) {\n    // Head-only: return count metadata without row payloads.\n    return compileD1CountFromWhere(table, where);\n  }\n\n  const parts = [\n    `SELECT ${selectClause(columns)} FROM ${quoteIdent(table)}`,\n    where.sql,\n    orderClause(payload.sort_by),\n    limitOffsetClause(payload),\n  ].filter(Boolean);\n  return asSingle(parts.join(\" \"), where.params);\n}\n\n/**\n * COUNT(*) for the same filters as a fetch (used for head and exact totals).\n */\nexport function compileD1Count(payload: AthenaFetchPayload): D1CompiledSql {\n  rejectStructuredRelations(payload);\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new D1SqlCompileError(\n      \"missing_table\",\n      \"table_name is required for count\"\n    );\n  }\n  let where = buildWhere(payload.conditions);\n  if (!where.sql && payload.where && typeof payload.where === \"object\") {\n    const eqConditions: AthenaGatewayCondition[] = Object.entries(\n      payload.where as AthenaJsonObject\n    ).map(([column, value]) => ({\n      column,\n      operator: \"eq\" as const,\n      value: value as AthenaGatewayCondition[\"value\"],\n    }));\n    where = buildWhere(eqConditions);\n  }\n  return compileD1CountFromWhere(table, where);\n}\n\nfunction compileD1CountFromWhere(\n  table: string,\n  where: { sql: string; params: unknown[] }\n): D1CompiledSql {\n  const parts = [\n    `SELECT COUNT(*) AS __athena_count FROM ${quoteIdent(table)}`,\n    where.sql,\n  ].filter(Boolean);\n  return asSingle(parts.join(\" \"), where.params);\n}\n\nfunction extractAthenaCount(rows: unknown[]): number {\n  const first = rows[0];\n  const rawCount =\n    first && typeof first === \"object\" && !Array.isArray(first)\n      ? (first as Record<string, unknown>).__athena_count\n      : undefined;\n  const count =\n    typeof rawCount === \"number\"\n      ? rawCount\n      : typeof rawCount === \"bigint\"\n        ? Number(rawCount)\n        : Number(rawCount ?? 0);\n  return Number.isFinite(count) ? count : 0;\n}\n\nexport { extractAthenaCount };\n\nfunction compileSingleRowInsert(\n  table: string,\n  row: AthenaJsonObject,\n  payload: AthenaInsertPayload\n): D1CompiledStatement {\n  const columns = Object.keys(row);\n  if (columns.length === 0) {\n    // SQLite allows default-only single-row inserts, but not\n    // `DEFAULT VALUES … ON CONFLICT` (D1/SQLite syntax error).\n    if (payload.on_conflict) {\n      throw new D1SqlCompileError(\n        \"default_values_upsert_unsupported\",\n        \"DEFAULT VALUES upsert is unsupported on D1 edge-local; provide insert columns or omit onConflict\"\n      );\n    }\n    const parts = [`INSERT INTO ${quoteIdent(table)} DEFAULT VALUES`];\n    if (wantsReturning(payload)) {\n      parts.push(`RETURNING ${selectClause(payload.columns)}`);\n    }\n    return { params: [], sql: parts.join(\" \") };\n  }\n  const params = columns.map((column) => jsonValue(row[column]));\n  const parts = [\n    `INSERT INTO ${quoteIdent(table)} (${columns.map(quoteIdent).join(\", \")})`,\n    `VALUES (${columns.map(() => \"?\").join(\", \")})`,\n  ];\n  appendOnConflict(parts, params, payload, columns);\n  if (wantsReturning(payload)) {\n    parts.push(`RETURNING ${selectClause(payload.columns)}`);\n  }\n  return { params, sql: parts.join(\" \") };\n}\n\n/**\n * Normalize `on_conflict` like gateway `parse_on_conflict_columns`:\n * string or string[] , and comma-separated composite targets (`tenant_id,email`).\n */\nfunction parseOnConflictColumns(onConflict: string | string[]): string[] {\n  const raw = Array.isArray(onConflict) ? onConflict : [onConflict];\n  const columns: string[] = [];\n  for (const item of raw) {\n    for (const part of String(item).split(\",\")) {\n      const trimmed = part.trim();\n      if (trimmed) {\n        columns.push(trimmed);\n      }\n    }\n  }\n  if (columns.length === 0) {\n    throw new D1SqlCompileError(\n      \"invalid_on_conflict\",\n      \"on_conflict requires at least one column\"\n    );\n  }\n  return columns;\n}\n\n/**\n * Append ON CONFLICT clause.\n *\n * Parity with crates/athena-query SQLite insert compiler:\n * - explicit non-empty `update_body` → DO UPDATE SET col = ?\n * - explicit empty `update_body` → DO NOTHING\n * - omitted `update_body` (typical `.upsert({...}, { onConflict })`) →\n *   DO UPDATE SET non-conflict cols from `excluded.*`\n */\nfunction appendOnConflict(\n  parts: string[],\n  params: unknown[],\n  payload: AthenaInsertPayload,\n  insertColumns: string[]\n): void {\n  if (!payload.on_conflict) {\n    return;\n  }\n  const conflictCols = parseOnConflictColumns(payload.on_conflict);\n  const conflictSql = conflictCols.map(quoteIdent).join(\", \");\n\n  if (payload.update_body !== undefined && payload.update_body !== null) {\n    const entries = Object.entries(payload.update_body);\n    if (entries.length === 0) {\n      parts.push(`ON CONFLICT (${conflictSql}) DO NOTHING`);\n      return;\n    }\n    const assignments = entries.map(([column, value]) => {\n      params.push(jsonValue(value as AthenaJsonValue));\n      return `${quoteIdent(column)} = ?`;\n    });\n    parts.push(\n      `ON CONFLICT (${conflictSql}) DO UPDATE SET ${assignments.join(\", \")}`\n    );\n    return;\n  }\n\n  const conflictSet = new Set(conflictCols);\n  const assignments = insertColumns\n    .filter((column) => !conflictSet.has(column))\n    .map((column) => {\n      const quoted = quoteIdent(column);\n      return `${quoted} = excluded.${quoted}`;\n    });\n  if (assignments.length === 0) {\n    parts.push(`ON CONFLICT (${conflictSql}) DO NOTHING`);\n  } else {\n    parts.push(\n      `ON CONFLICT (${conflictSql}) DO UPDATE SET ${assignments.join(\", \")}`\n    );\n  }\n}\n\n/**\n * Compile insert / upsert for D1.\n *\n * SQLite does not allow `DEFAULT` inside multi-row VALUES tuples. Sparse multi-row\n * inserts without `default_to_null` become a batch of single-row inserts so omitted\n * columns keep true DB defaults.\n */\nexport function compileD1Insert(payload: AthenaInsertPayload): D1CompiledSql {\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new D1SqlCompileError(\n      \"missing_table\",\n      \"table_name is required for insert\"\n    );\n  }\n\n  const rows = Array.isArray(payload.insert_body)\n    ? payload.insert_body\n    : [payload.insert_body];\n  if (rows.length === 0) {\n    throw new D1SqlCompileError(\n      \"empty_insert\",\n      \"insert_body must not be empty\"\n    );\n  }\n\n  const columns: string[] = [];\n  const seen = new Set<string>();\n  for (const row of rows) {\n    for (const key of Object.keys(row ?? {})) {\n      if (seen.has(key)) {\n        continue;\n      }\n      seen.add(key);\n      columns.push(key);\n    }\n  }\n\n  // Single empty object → DEFAULT VALUES (all columns use table defaults).\n  if (columns.length === 0) {\n    if (rows.length === 1) {\n      const compiled = compileSingleRowInsert(table, {}, payload);\n      return asSingle(compiled.sql, compiled.params);\n    }\n    throw new D1SqlCompileError(\n      \"empty_insert\",\n      \"Multi-row insert_body cannot be empty objects; use a single {} for DEFAULT VALUES\"\n    );\n  }\n\n  const forceNullForMissing = payload.default_to_null === true;\n  const isSparse = rows.some((row) =>\n    columns.some((column) => !Object.hasOwn(row, column))\n  );\n\n  // Sparse multi-row without NULL coercion: one INSERT per row with only present columns.\n  if (isSparse && !forceNullForMissing && rows.length > 1) {\n    return asBatch(\n      rows.map((row) =>\n        compileSingleRowInsert(table, row as AthenaJsonObject, payload)\n      )\n    );\n  }\n\n  // Single-row sparse without default_to_null: only insert present columns.\n  if (isSparse && !forceNullForMissing && rows.length === 1) {\n    const compiled = compileSingleRowInsert(\n      table,\n      rows[0] as AthenaJsonObject,\n      payload\n    );\n    return asSingle(compiled.sql, compiled.params);\n  }\n\n  const params: unknown[] = [];\n  const valueGroups = rows.map((row) => {\n    const placeholders = columns.map((column) => {\n      const has = Object.hasOwn(row, column);\n      if (!has) {\n        // Only when default_to_null: bind explicit NULL (valid in VALUES).\n        params.push(null);\n        return \"?\";\n      }\n      params.push(jsonValue((row as AthenaJsonObject)[column]));\n      return \"?\";\n    });\n    return `(${placeholders.join(\", \")})`;\n  });\n\n  const parts = [\n    `INSERT INTO ${quoteIdent(table)} (${columns.map(quoteIdent).join(\", \")})`,\n    `VALUES ${valueGroups.join(\", \")}`,\n  ];\n  appendOnConflict(parts, params, payload, columns);\n  if (wantsReturning(payload)) {\n    parts.push(`RETURNING ${selectClause(payload.columns)}`);\n  }\n\n  return asSingle(parts.join(\" \"), params);\n}\n\n/**\n * Compile update with required filters.\n * Pagination / sort bounds use a unique-identity IN (subquery) so only one page is updated.\n */\nexport function compileD1Update(\n  payload: AthenaUpdatePayload,\n  options?: D1CompileOptions\n): D1CompiledSql {\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new D1SqlCompileError(\n      \"missing_table\",\n      \"table_name is required for update\"\n    );\n  }\n  const entries = Object.entries(payload.update_body ?? {});\n  if (entries.length === 0) {\n    throw new D1SqlCompileError(\n      \"empty_update\",\n      \"update_body must not be empty\"\n    );\n  }\n\n  const params: unknown[] = [];\n  const assignments = entries.map(([column, value]) => {\n    params.push(jsonValue(value as AthenaJsonValue));\n    return `${quoteIdent(column)} = ?`;\n  });\n\n  const where = buildWhere(payload.conditions);\n  if (!where.sql) {\n    throw new D1SqlCompileError(\n      \"unfiltered_update\",\n      \"UPDATE requires at least one condition on D1 edge-local\"\n    );\n  }\n\n  if (hasPaginationBounds(payload) || payload.sort_by) {\n    if (!hasPaginationBounds(payload)) {\n      throw new D1SqlCompileError(\n        \"order_without_bounds\",\n        \"UPDATE with sort_by requires limit/offset or page_size/current_page on D1 edge-local\"\n      );\n    }\n    const bounded = boundedRowidInClause(\n      table,\n      where.sql,\n      where.params,\n      {\n        ...payload,\n        conditions: payload.conditions,\n      },\n      options\n    );\n    params.push(...bounded.params);\n    const parts = [\n      `UPDATE ${quoteIdent(table)} SET ${assignments.join(\", \")}`,\n      `WHERE ${bounded.sql}`,\n    ];\n    if (wantsReturning(payload)) {\n      parts.push(`RETURNING ${selectClause(payload.columns)}`);\n    }\n    return asSingle(parts.join(\" \"), params);\n  }\n\n  params.push(...where.params);\n  const parts = [\n    `UPDATE ${quoteIdent(table)} SET ${assignments.join(\", \")}`,\n    where.sql,\n  ];\n  if (wantsReturning(payload)) {\n    parts.push(`RETURNING ${selectClause(payload.columns)}`);\n  }\n  return asSingle(parts.join(\" \"), params);\n}\n\n/**\n * Compile delete with required filters.\n *\n * `payload.resource_id` alone (no column filter) maps to `id = ?` for the common\n * Athena PK path. Explicit `.eq('resource_id', …)` / other filters are preserved\n * so tables with a real `resource_id` column are not rewritten to `id`.\n */\nexport function compileD1Delete(\n  payload: AthenaDeletePayload,\n  options?: D1CompileOptions\n): D1CompiledSql {\n  const table = payload.table_name?.trim();\n  if (!table) {\n    throw new D1SqlCompileError(\n      \"missing_table\",\n      \"table_name is required for delete\"\n    );\n  }\n\n  const conditions: AthenaGatewayCondition[] = [...(payload.conditions ?? [])];\n  if (payload.resource_id !== undefined && payload.resource_id !== null) {\n    const hasResourceIdFilter = conditions.some((condition) => {\n      const column = (condition.column ?? condition.eq_column ?? \"\").trim();\n      return column === \"resource_id\";\n    });\n    const hasIdFilter = conditions.some((condition) => {\n      const column = (condition.column ?? condition.eq_column ?? \"\").trim();\n      return column === \"id\";\n    });\n    // Only invent `id = resource_id` when the caller did not already filter by\n    // resource_id or id (e.g. delete({ resourceId }) with no eq conditions).\n    if (!(hasResourceIdFilter || hasIdFilter)) {\n      conditions.unshift({\n        column: \"id\",\n        operator: \"eq\",\n        value: payload.resource_id,\n      });\n    }\n  }\n\n  const where = buildWhere(conditions);\n  if (!where.sql) {\n    throw new D1SqlCompileError(\n      \"unfiltered_delete\",\n      \"DELETE requires at least one condition or resource_id on D1 edge-local\"\n    );\n  }\n\n  if (hasPaginationBounds(payload) || payload.sort_by) {\n    if (!hasPaginationBounds(payload)) {\n      throw new D1SqlCompileError(\n        \"order_without_bounds\",\n        \"DELETE with sort_by requires limit/offset or page_size/current_page on D1 edge-local\"\n      );\n    }\n    const bounded = boundedRowidInClause(\n      table,\n      where.sql,\n      where.params,\n      {\n        ...payload,\n        conditions,\n      },\n      options\n    );\n    const parts = [`DELETE FROM ${quoteIdent(table)}`, `WHERE ${bounded.sql}`];\n    if (wantsReturning(payload)) {\n      parts.push(`RETURNING ${selectClause(payload.columns)}`);\n    }\n    return asSingle(parts.join(\" \"), bounded.params);\n  }\n\n  const parts = [`DELETE FROM ${quoteIdent(table)}`, where.sql];\n  if (wantsReturning(payload)) {\n    parts.push(`RETURNING ${selectClause(payload.columns)}`);\n  }\n  return asSingle(parts.join(\" \"), where.params);\n}\n","/**\n * Rewrite PostgreSQL-oriented SQL (from shared SDK typed planners) for SQLite/D1.\n */\n\nconst PG_CAST_TYPES =\n  \"text|uuid|citext|varchar|bpchar|char|integer|int4|int8|bigint|smallint|boolean|bool|jsonb|json|numeric|decimal|real|float|double precision|timestamptz|timestamp|date|bytea\";\n\n/**\n * Apply a transform only outside SQL string/identifier literals and comments.\n * Prevents corrupting values like `'value::text'` or `` `a;b` ``.\n */\nfunction mapSqlOutsideLiterals(\n  sql: string,\n  transform: (chunk: string) => string\n): string {\n  let out = \"\";\n  let buffer = \"\";\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n  let inLineComment = false;\n  let inBlockComment = false;\n\n  const flushCode = () => {\n    if (buffer) {\n      out += transform(buffer);\n      buffer = \"\";\n    }\n  };\n\n  for (let i = 0; i < sql.length; i += 1) {\n    const ch = sql[i]!;\n    const next = sql[i + 1];\n\n    if (inLineComment) {\n      out += ch;\n      if (ch === \"\\n\" || ch === \"\\r\") {\n        inLineComment = false;\n      }\n      continue;\n    }\n    if (inBlockComment) {\n      out += ch;\n      if (ch === \"*\" && next === \"/\") {\n        out += next;\n        i += 1;\n        inBlockComment = false;\n      }\n      continue;\n    }\n    if (inSingle) {\n      out += ch;\n      if (ch === \"'\" && next === \"'\") {\n        out += next;\n        i += 1;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      continue;\n    }\n    if (inDouble) {\n      out += ch;\n      if (ch === '\"' && next === '\"') {\n        out += next;\n        i += 1;\n        continue;\n      }\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      continue;\n    }\n    if (inBacktick) {\n      out += ch;\n      if (ch === \"`\" && next === \"`\") {\n        out += next;\n        i += 1;\n        continue;\n      }\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      continue;\n    }\n    if (inBracket) {\n      out += ch;\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      continue;\n    }\n\n    if (ch === \"-\" && next === \"-\") {\n      flushCode();\n      out += ch;\n      out += next;\n      i += 1;\n      inLineComment = true;\n      continue;\n    }\n    if (ch === \"/\" && next === \"*\") {\n      flushCode();\n      out += ch;\n      out += next;\n      i += 1;\n      inBlockComment = true;\n      continue;\n    }\n    if (ch === \"'\") {\n      flushCode();\n      out += ch;\n      inSingle = true;\n      continue;\n    }\n    if (ch === '\"') {\n      flushCode();\n      out += ch;\n      inDouble = true;\n      continue;\n    }\n    if (ch === \"`\") {\n      flushCode();\n      out += ch;\n      inBacktick = true;\n      continue;\n    }\n    if (ch === \"[\") {\n      flushCode();\n      out += ch;\n      inBracket = true;\n      continue;\n    }\n\n    buffer += ch;\n  }\n\n  flushCode();\n  return out;\n}\n\ninterface SqlKeywordHit {\n  /** Parenthesis nesting depth at the keyword. */\n  depth: number;\n  kind: \"limit\" | \"offset\";\n  /** Start index of the keyword in the full SQL string. */\n  start: number;\n  /**\n   * Top-level statement index (increments on `;` at depth 0).\n   * Prevents a LIMIT in statement N from “covering” a bare OFFSET in statement N+1.\n   */\n  statement: number;\n}\n\nfunction isIdentChar(ch: string | undefined): boolean {\n  if (!ch) {\n    return false;\n  }\n  return /[A-Za-z0-9_]/.test(ch);\n}\n\n/**\n * Collect LIMIT / OFFSET keyword positions outside literals/comments, with paren depth.\n */\nfunction collectLimitOffsetKeywords(sql: string): SqlKeywordHit[] {\n  const hits: SqlKeywordHit[] = [];\n  let depth = 0;\n  let statement = 0;\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n  let inLineComment = false;\n  let inBlockComment = false;\n\n  for (let i = 0; i < sql.length; i += 1) {\n    const ch = sql[i]!;\n    const next = sql[i + 1];\n\n    if (inLineComment) {\n      if (ch === \"\\n\" || ch === \"\\r\") {\n        inLineComment = false;\n      }\n      continue;\n    }\n    if (inBlockComment) {\n      if (ch === \"*\" && next === \"/\") {\n        i += 1;\n        inBlockComment = false;\n      }\n      continue;\n    }\n    if (inSingle) {\n      if (ch === \"'\" && next === \"'\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      continue;\n    }\n    if (inDouble) {\n      if (ch === '\"' && next === '\"') {\n        i += 1;\n        continue;\n      }\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      continue;\n    }\n    if (inBacktick) {\n      if (ch === \"`\" && next === \"`\") {\n        i += 1;\n        continue;\n      }\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      continue;\n    }\n    if (inBracket) {\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      continue;\n    }\n\n    if (ch === \"-\" && next === \"-\") {\n      inLineComment = true;\n      i += 1;\n      continue;\n    }\n    if (ch === \"/\" && next === \"*\") {\n      inBlockComment = true;\n      i += 1;\n      continue;\n    }\n    if (ch === \"'\") {\n      inSingle = true;\n      continue;\n    }\n    if (ch === '\"') {\n      inDouble = true;\n      continue;\n    }\n    if (ch === \"`\") {\n      inBacktick = true;\n      continue;\n    }\n    if (ch === \"[\") {\n      inBracket = true;\n      continue;\n    }\n    if (ch === \"(\") {\n      depth += 1;\n      continue;\n    }\n    if (ch === \")\") {\n      depth = Math.max(0, depth - 1);\n      continue;\n    }\n    // Top-level statement separator (outside strings/comments/parens).\n    if (ch === \";\" && depth === 0) {\n      statement += 1;\n      continue;\n    }\n\n    // Keyword scan only at identifier boundaries.\n    if (!isIdentChar(ch) || isIdentChar(sql[i - 1])) {\n      continue;\n    }\n\n    const rest = sql.slice(i);\n    if (/^LIMIT\\b/i.test(rest)) {\n      hits.push({ depth, kind: \"limit\", start: i, statement });\n      i += 4; // advance to last char of LIMIT; loop +1\n      continue;\n    }\n    if (/^OFFSET\\b/i.test(rest)) {\n      hits.push({ depth, kind: \"offset\", start: i, statement });\n      i += 5;\n    }\n  }\n\n  return hits;\n}\n\n/**\n * SQLite requires LIMIT when OFFSET is present. Inject `LIMIT -1` before each bare\n * OFFSET, considering the full SQL (across comments/literals) and paren depth so\n * nested LIMITs do not suppress outer bare OFFSET, and comments between LIMIT and\n * OFFSET do not produce double LIMIT.\n */\nexport function injectLimitBeforeBareOffsets(sql: string): string {\n  const hits = collectLimitOffsetKeywords(sql);\n  if (hits.length === 0) {\n    return sql;\n  }\n\n  const injectAt: number[] = [];\n  for (const hit of hits) {\n    if (hit.kind !== \"offset\") {\n      continue;\n    }\n    let hasLimit = false;\n    for (let i = hits.length - 1; i >= 0; i -= 1) {\n      const prev = hits[i]!;\n      if (prev.start >= hit.start) {\n        continue;\n      }\n      // Only a LIMIT in the same top-level statement and paren depth counts.\n      if (prev.statement !== hit.statement) {\n        continue;\n      }\n      if (prev.depth !== hit.depth) {\n        continue;\n      }\n      if (prev.kind === \"limit\") {\n        hasLimit = true;\n        break;\n      }\n      if (prev.kind === \"offset\") {\n        // Prior OFFSET at same depth/statement without a LIMIT between is still bare.\n        break;\n      }\n    }\n    if (!hasLimit) {\n      injectAt.push(hit.start);\n    }\n  }\n\n  if (injectAt.length === 0) {\n    return sql;\n  }\n\n  // Insert from the end so earlier indices stay valid.\n  let out = sql;\n  for (let i = injectAt.length - 1; i >= 0; i -= 1) {\n    const at = injectAt[i]!;\n    out = `${out.slice(0, at)}LIMIT -1 ${out.slice(at)}`;\n  }\n  return out;\n}\n\n/**\n * Strip Postgres cast suffixes and normalize a few operators so UUID equality\n * plans like `\"id\"::text = '…'::text` execute on D1.\n * String/identifier literals are left unchanged.\n */\nexport function rewritePostgresSqlForSqlite(sql: string): string {\n  const castPattern = new RegExp(`::(?:${PG_CAST_TYPES})\\\\b`, \"gi\");\n  const withoutCastsAndIlike = mapSqlOutsideLiterals(sql, (chunk) => {\n    let rewritten = chunk.replace(castPattern, \"\");\n    // ILIKE is Postgres-only; NOCASE is the D1/SQLite approximation used by L1 compiler.\n    rewritten = rewritten.replace(/\\bILIKE\\b/gi, \"LIKE\");\n    return rewritten;\n  });\n  // OFFSET rewrite must see the full statement (LIMIT may be separated by comments).\n  return injectLimitBeforeBareOffsets(withoutCastsAndIlike);\n}\n","import type { AthenaGatewayClient } from \"../../gateway/client.ts\";\nimport { AthenaGatewayError } from \"../../gateway/errors.ts\";\nimport type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayConnectionOptions,\n  AthenaGatewayConnectionResult,\n  AthenaGatewayResponse,\n  AthenaInsertPayload,\n  AthenaQueryPayload,\n  AthenaRpcCallOptions,\n  AthenaRpcPayload,\n  AthenaUpdatePayload,\n} from \"../../gateway/types.ts\";\nimport type { D1DatabaseLike } from \"../types.ts\";\nimport { CLOUDFLARE_EDGE_BASE_URL } from \"../types.ts\";\nimport {\n  type D1RunnerBatchResult,\n  type D1RunnerQueryResult,\n  executeD1Batch,\n  executeD1Query,\n} from \"./runner.ts\";\nimport {\n  compileD1Count,\n  compileD1Delete,\n  compileD1Fetch,\n  compileD1Insert,\n  compileD1Update,\n  type D1CompiledSql,\n  type D1CompileOptions,\n  D1SqlCompileError,\n  extractAthenaCount,\n} from \"./sql.ts\";\nimport { rewritePostgresSqlForSqlite } from \"./sql-rewrite.ts\";\n\n/** Narrow failure message without relying on dts-time discriminant collapse. */\nfunction d1ErrorMessage(\n  result: D1RunnerQueryResult | D1RunnerBatchResult\n): string {\n  return result.ok ? \"unknown error\" : result.message;\n}\n\nexport interface CloudflareD1TransportOptions {\n  d1: D1DatabaseLike;\n  /** Default D1 session mode when headers omit session mode. */\n  defaultSessionMode?: string | null;\n}\n\nfunction hasPaginationBounds(payload: {\n  limit?: number;\n  offset?: number;\n  current_page?: number;\n  page_size?: number;\n}): boolean {\n  return (\n    payload.limit !== undefined ||\n    payload.offset !== undefined ||\n    payload.page_size !== undefined ||\n    payload.current_page !== undefined\n  );\n}\n\n/** Normalize SQLite collation names for equality comparison. */\nfunction normalizeSqliteCollation(name: string | null | undefined): string {\n  const raw = String(name ?? \"\")\n    .trim()\n    .replace(/^[\"'`[]|[\"'`\\]]$/g, \"\");\n  if (!raw) {\n    return \"BINARY\";\n  }\n  return raw.toUpperCase();\n}\n\n/**\n * Locate the opening `(` of a CREATE TABLE column list.\n * Returns the index of `(` or -1 when not found.\n */\nfunction findCreateTableColumnListOpen(createSql: string): number {\n  // CREATE [TEMP|TEMPORARY|VIRTUAL] TABLE [IF NOT EXISTS] name (\n  const m =\n    /\\bCREATE\\s+(?:(?:TEMP|TEMPORARY|VIRTUAL)\\s+)?TABLE\\s+(?:IF\\s+NOT\\s+EXISTS\\s+)?/i.exec(\n      createSql\n    );\n  if (!m) {\n    return -1;\n  }\n  let i = m.index + m[0].length;\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n  while (i < createSql.length) {\n    const ch = createSql[i]!;\n    if (inSingle) {\n      if (ch === \"'\" && createSql[i + 1] === \"'\") {\n        i += 2;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      i++;\n      continue;\n    }\n    if (inDouble) {\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      i++;\n      continue;\n    }\n    if (inBacktick) {\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      i++;\n      continue;\n    }\n    if (inBracket) {\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      i++;\n      continue;\n    }\n    if (ch === \"'\") {\n      inSingle = true;\n      i++;\n      continue;\n    }\n    if (ch === '\"') {\n      inDouble = true;\n      i++;\n      continue;\n    }\n    if (ch === \"`\") {\n      inBacktick = true;\n      i++;\n      continue;\n    }\n    if (ch === \"[\") {\n      inBracket = true;\n      i++;\n      continue;\n    }\n    if (ch === \"(\") {\n      return i;\n    }\n    i++;\n  }\n  return -1;\n}\n\n/**\n * Parse a column's COLLATE clause from CREATE TABLE SQL.\n * Returns null when the column has no explicit collation (defaults to BINARY).\n *\n * Type modifiers may contain parentheses and commas (`VARCHAR(255)`,\n * `NUMERIC(10, 2)`). A simple `[^,)]` scan stops at the first `)` and misses\n * `name VARCHAR(255) COLLATE NOCASE`, so we scan the column definition with\n * balanced parentheses before locating COLLATE.\n *\n * Column-name matching is anchored inside the CREATE TABLE `(…)` list so a\n * table whose name equals a column (e.g. `CREATE TABLE name (…, name TEXT …)`)\n * does not steal the first unanchored match.\n */\nfunction parseColumnCollationFromCreateSql(\n  createSql: string,\n  columnName: string\n): string | null {\n  if (!(createSql && columnName)) {\n    return null;\n  }\n  const listOpen = findCreateTableColumnListOpen(createSql);\n  if (listOpen < 0) {\n    return null;\n  }\n  // Search only inside the top-level column list (depth starts at 1 after `(`).\n  const listStart = listOpen + 1;\n  const escaped = columnName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n  const nameRe = new RegExp(\n    `(?:^|[^\\\\w])(?:\"${escaped}\"|\\`${escaped}\\`|\\\\[${escaped}\\\\]|${escaped})\\\\s+`,\n    \"i\"\n  );\n  const listSlice = createSql.slice(listStart);\n  // Walk top-level segments so UNIQUE(name COLLATE …) does not match as a column.\n  // Capture match text length in a plain number so TS control-flow analysis does not\n  // collapse the closure-assigned RegExpExecArray to `never` when reading `[0].length`.\n  let nameMatchAbs = -1;\n  let nameMatchLen = 0;\n  {\n    let i = 0;\n    let depth = 1;\n    let inSingle = false;\n    let inDouble = false;\n    let inBacktick = false;\n    let inBracket = false;\n    let segmentStart = 0;\n    const trySegment = (from: number, to: number) => {\n      if (nameMatchAbs >= 0) {\n        return undefined;\n      }\n      const segment = listSlice.slice(from, to);\n      const m = nameRe.exec(segment);\n      if (!m) {\n        return undefined;\n      }\n      // Column defs start at segment start (optional whitespace); reject mid-segment\n      // matches inside expressions that are not leading column names.\n      const leading = segment.slice(0, m.index).trim();\n      if (leading.length > 0) {\n        return undefined;\n      }\n      nameMatchAbs = listStart + from + m.index;\n      nameMatchLen = m[0].length;\n    };\n    while (i < listSlice.length && depth > 0) {\n      const ch = listSlice[i]!;\n      if (inSingle) {\n        if (ch === \"'\" && listSlice[i + 1] === \"'\") {\n          i += 2;\n          continue;\n        }\n        if (ch === \"'\") {\n          inSingle = false;\n        }\n        i++;\n        continue;\n      }\n      if (inDouble) {\n        if (ch === '\"') {\n          inDouble = false;\n        }\n        i++;\n        continue;\n      }\n      if (inBacktick) {\n        if (ch === \"`\") {\n          inBacktick = false;\n        }\n        i++;\n        continue;\n      }\n      if (inBracket) {\n        if (ch === \"]\") {\n          inBracket = false;\n        }\n        i++;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = true;\n        i++;\n        continue;\n      }\n      if (ch === '\"') {\n        inDouble = true;\n        i++;\n        continue;\n      }\n      if (ch === \"`\") {\n        inBacktick = true;\n        i++;\n        continue;\n      }\n      if (ch === \"[\") {\n        inBracket = true;\n        i++;\n        continue;\n      }\n      if (ch === \"(\") {\n        depth++;\n        i++;\n        continue;\n      }\n      if (ch === \")\") {\n        depth--;\n        if (depth === 0) {\n          trySegment(segmentStart, i);\n          break;\n        }\n        i++;\n        continue;\n      }\n      if (ch === \",\" && depth === 1) {\n        trySegment(segmentStart, i);\n        segmentStart = i + 1;\n        i++;\n        continue;\n      }\n      i++;\n    }\n  }\n  if (nameMatchAbs < 0 || nameMatchLen <= 0) {\n    return null;\n  }\n\n  const start = nameMatchAbs + nameMatchLen;\n  let i = start;\n  let depth = 0;\n  let inSingle = false;\n  let inDouble = false;\n  let inBacktick = false;\n  let inBracket = false;\n\n  while (i < createSql.length) {\n    const ch = createSql[i]!;\n\n    if (inSingle) {\n      if (ch === \"'\" && createSql[i + 1] === \"'\") {\n        i += 2;\n        continue;\n      }\n      if (ch === \"'\") {\n        inSingle = false;\n      }\n      i++;\n      continue;\n    }\n    if (inDouble) {\n      if (ch === '\"') {\n        inDouble = false;\n      }\n      i++;\n      continue;\n    }\n    if (inBacktick) {\n      if (ch === \"`\") {\n        inBacktick = false;\n      }\n      i++;\n      continue;\n    }\n    if (inBracket) {\n      if (ch === \"]\") {\n        inBracket = false;\n      }\n      i++;\n      continue;\n    }\n\n    if (ch === \"'\") {\n      inSingle = true;\n      i++;\n      continue;\n    }\n    if (ch === '\"') {\n      inDouble = true;\n      i++;\n      continue;\n    }\n    if (ch === \"`\") {\n      inBacktick = true;\n      i++;\n      continue;\n    }\n    if (ch === \"[\") {\n      inBracket = true;\n      i++;\n      continue;\n    }\n\n    if (ch === \"(\") {\n      depth++;\n      i++;\n      continue;\n    }\n    if (ch === \")\") {\n      if (depth === 0) {\n        // End of the CREATE TABLE column list.\n        break;\n      }\n      depth--;\n      i++;\n      continue;\n    }\n    if (ch === \",\" && depth === 0) {\n      // Next column or table constraint.\n      break;\n    }\n    i++;\n  }\n\n  const colDef = createSql.slice(start, i);\n  const collRe =\n    /\\bCOLLATE\\s+(\"([^\"]+)\"|'([^']+)'|`([^`]+)`|\\[([^\\]]+)\\]|([A-Za-z_][\\w$]*))/i;\n  const match = collRe.exec(colDef);\n  if (!match) {\n    return null;\n  }\n  return (\n    match[2] ?? match[3] ?? match[4] ?? match[5] ?? match[6] ?? match[1] ?? null\n  );\n}\n\n/**\n * True when the unique index's key collation matches the column's declared\n * collation (or both default to BINARY). Mismatch means\n * `col IN (SELECT col … LIMIT n)` can match more rows than the unique index\n * guarantees (e.g. NOCASE column + BINARY unique index).\n */\nasync function indexCollationMatchesColumn(\n  d1: D1DatabaseLike,\n  table: string,\n  tableSafe: string,\n  indexSafe: string,\n  columnName: string,\n  session?: { bookmark?: string | null; sessionMode?: string | null }\n): Promise<boolean> {\n  interface IndexXInfoRow {\n    cid?: number | null;\n    coll?: string | null;\n    key?: number | boolean | null;\n    name?: string | null;\n  }\n\n  const xinfo = await executeD1Query(d1, {\n    params: [],\n    query: `PRAGMA index_xinfo(\"${indexSafe}\")`,\n    ...session,\n  });\n  if (!xinfo.ok) {\n    // Without index_xinfo we cannot prove collation safety — reject the index.\n    return false;\n  }\n\n  const xRows = (xinfo.rows as IndexXInfoRow[]) ?? [];\n  const keyRows = xRows.filter((row) => {\n    const isKey = row.key === 1 || row.key === true || Number(row.key) === 1;\n    if (!isKey) {\n      return false;\n    }\n    return typeof row.name === \"string\" && row.name === columnName;\n  });\n  if (keyRows.length === 0) {\n    // Some drivers omit key flags; fall back to first named match.\n    const byName = xRows.find(\n      (row) => typeof row.name === \"string\" && row.name === columnName\n    );\n    if (!byName) {\n      return false;\n    }\n    keyRows.push(byName);\n  }\n\n  const indexColl = normalizeSqliteCollation(keyRows[0]?.coll);\n\n  const master = await executeD1Query(d1, {\n    params: [table],\n    query: `SELECT sql AS create_sql FROM sqlite_master WHERE type = 'table' AND name = ?`,\n    ...session,\n  });\n  let createSql = \"\";\n  if (master.ok && Array.isArray(master.rows) && master.rows.length > 0) {\n    createSql = String(\n      (master.rows[0] as { create_sql?: string | null })?.create_sql ?? \"\"\n    );\n  }\n  // tableSafe unused for query (bound param uses table); silence unused if needed\n  void tableSafe;\n\n  const columnCollRaw = parseColumnCollationFromCreateSql(\n    createSql,\n    columnName\n  );\n  const columnColl = normalizeSqliteCollation(columnCollRaw);\n\n  return indexColl === columnColl;\n}\n\n/**\n * Resolve a single-column unique identity for bounded mutations from live D1\n * schema (PRAGMA table_info + index_list). Prefer PRIMARY KEY; else a single-\n * column UNIQUE index. Multi-column keys are rejected as unsafe for IN-subquery.\n */\nexport async function resolveD1BoundedIdentityColumn(\n  d1: D1DatabaseLike,\n  tableName: string,\n  session?: { bookmark?: string | null; sessionMode?: string | null }\n): Promise<string> {\n  const table = tableName.trim();\n  if (!table) {\n    throw new D1SqlCompileError(\n      \"missing_table\",\n      \"table_name is required for bounded mutation\"\n    );\n  }\n  // Quote via double-quote after escaping; PRAGMA does not take bound params for table name.\n  const safe = table.replace(/\"/g, '\"\"');\n\n  const info = await executeD1Query(d1, {\n    params: [],\n    query: `PRAGMA table_info(\"${safe}\")`,\n    ...session,\n  });\n  if (!info.ok) {\n    throw new D1SqlCompileError(\n      \"bounded_mutation_no_unique_identity\",\n      `Unable to introspect table \"${table}\" for bounded mutation identity: ${d1ErrorMessage(info)}`\n    );\n  }\n\n  interface PragmaCol {\n    name?: string;\n    notnull?: number | boolean;\n    pk?: number;\n    type?: string;\n  }\n  const cols = (info.rows as PragmaCol[]).filter(\n    (row) => typeof row?.name === \"string\" && row.name.length > 0\n  );\n  const colByName = new Map(cols.map((col) => [col.name!, col]));\n  const isNotNullColumn = (name: string): boolean => {\n    const col = colByName.get(name);\n    if (!col) {\n      return false;\n    }\n    return (\n      col.notnull === 1 || col.notnull === true || Number(col.notnull) === 1\n    );\n  };\n  /**\n   * Candidate SQLite rowid alias: single-column PRIMARY KEY declared as INTEGER.\n   * PRAGMA table_info still reports notnull=0 for true rowid aliases. The\n   * INTEGER PRIMARY KEY DESC exception is NOT a rowid alias (nullable, non-\n   * unique); detect it via a separate origin='pk' index or CREATE TABLE SQL.\n   */\n  const isIntegerPrimaryKeyType = (col: PragmaCol): boolean => {\n    if (typeof col.pk !== \"number\" || col.pk <= 0) {\n      return false;\n    }\n    const declared = String(col.type ?? \"\")\n      .trim()\n      .toUpperCase();\n    return declared === \"INTEGER\";\n  };\n\n  interface IndexRow {\n    name?: string;\n    /** SQLite: 'c' | 'u' | 'pk' */\n    origin?: string;\n    /** SQLite: 1 when the index has a WHERE clause (partial). */\n    partial?: number | boolean;\n    unique?: number | boolean;\n  }\n\n  const loadIndexList = async (): Promise<IndexRow[] | null> => {\n    const indexList = await executeD1Query(d1, {\n      params: [],\n      query: `PRAGMA index_list(\"${safe}\")`,\n      ...session,\n    });\n    if (!indexList.ok) {\n      return null;\n    }\n    return indexList.rows as IndexRow[];\n  };\n\n  /**\n   * True when the INTEGER PRIMARY KEY is NOT a rowid alias (DESC exception).\n   * True rowid aliases have no origin='pk' index; DESC creates one. When origin\n   * is omitted by the driver, parse sqlite_master CREATE TABLE for DESC.\n   */\n  const isDescendingIntegerPrimaryKeyException = async (\n    colName: string,\n    indexes: IndexRow[] | null\n  ): Promise<boolean> => {\n    if (indexes) {\n      const hasPkOrigin = indexes.some(\n        (index) => String(index.origin ?? \"\").toLowerCase() === \"pk\"\n      );\n      if (hasPkOrigin) {\n        return true;\n      }\n      // Empty list or origins present without 'pk' ⇒ true rowid alias.\n      const originReported = indexes.some(\n        (index) =>\n          index.origin !== undefined &&\n          index.origin !== null &&\n          String(index.origin).length > 0\n      );\n      if (indexes.length === 0 || originReported) {\n        return false;\n      }\n    }\n\n    // Fallback when index_list failed or origin is unavailable on rows.\n    const master = await executeD1Query(d1, {\n      params: [table],\n      query: `SELECT sql AS create_sql FROM sqlite_master WHERE type = 'table' AND name = ?`,\n      ...session,\n    });\n    if (\n      !(master.ok && Array.isArray(master.rows)) ||\n      master.rows.length === 0\n    ) {\n      return false;\n    }\n    const createSql = String(\n      (master.rows[0] as { create_sql?: string | null })?.create_sql ?? \"\"\n    );\n    if (!createSql) {\n      return false;\n    }\n    const escaped = colName.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n    // Inline: id INTEGER PRIMARY KEY DESC\n    const inlineDesc = new RegExp(\n      `(?:^|[^\\\\w])(?:\"${escaped}\"|${escaped})\\\\s+INTEGER\\\\s+PRIMARY\\\\s+KEY\\\\s+DESC\\\\b`,\n      \"i\"\n    );\n    // Table-level: PRIMARY KEY (id DESC) or PRIMARY KEY(\"id\" DESC)\n    const tableDesc = new RegExp(\n      `PRIMARY\\\\s+KEY\\\\s*\\\\(\\\\s*(?:\"${escaped}\"|${escaped})\\\\s+DESC\\\\b`,\n      \"i\"\n    );\n    return inlineDesc.test(createSql) || tableDesc.test(createSql);\n  };\n\n  const pkCols = cols\n    .filter((row) => typeof row.pk === \"number\" && row.pk > 0)\n    .sort((a, b) => (a.pk ?? 0) - (b.pk ?? 0));\n\n  // Load index_list once when needed for PK validation or unique-index scan.\n  let indexRows: IndexRow[] | null | undefined;\n\n  if (pkCols.length === 1 && pkCols[0]?.name) {\n    // SQLite WITHOUT ROWID requires NOT NULL on PK; ordinary rowid tables allow\n    // NULL in a TEXT PRIMARY KEY (multiple NULLs). NULL IN (NULL) is unknown, so\n    // bounded mutations must not use a nullable PK as the identity column —\n    // except INTEGER PRIMARY KEY rowid alias (notnull may be 0, no pk index).\n    //\n    // Non-rowid PKs must also pass the same collation check as UNIQUE indexes:\n    // `name TEXT COLLATE NOCASE NOT NULL, PRIMARY KEY(name COLLATE BINARY)` allows\n    // both `a` and `A`, but outer `name IN (SELECT name …)` uses column NOCASE.\n    if (isIntegerPrimaryKeyType(pkCols[0])) {\n      indexRows = await loadIndexList();\n      const isDescException = await isDescendingIntegerPrimaryKeyException(\n        pkCols[0].name,\n        indexRows\n      );\n      if (!isDescException) {\n        return pkCols[0].name;\n      }\n      // Fall through: DESC INTEGER PK is nullable / non-rowid; try UNIQUE indexes.\n    } else if (isNotNullColumn(pkCols[0].name)) {\n      indexRows = await loadIndexList();\n      const pkIndex = (indexRows ?? []).find(\n        (index) => String(index.origin ?? \"\").toLowerCase() === \"pk\"\n      );\n      if (pkIndex && typeof pkIndex.name === \"string\" && pkIndex.name) {\n        const indexSafe = pkIndex.name.replace(/\"/g, '\"\"');\n        const collMatch = await indexCollationMatchesColumn(\n          d1,\n          table,\n          safe,\n          indexSafe,\n          pkCols[0].name,\n          session\n        );\n        if (collMatch) {\n          return pkCols[0].name;\n        }\n        // Collation mismatch — do not use this PK; try UNIQUE indexes.\n      }\n      // No origin='pk' index to prove collation safety — fall through.\n    }\n    // Fall through to UNIQUE indexes / rejection.\n  }\n  // Composite PK: cannot use multi-column identity for IN-subquery, but a\n  // separate single-column UNIQUE NOT NULL index may still qualify — fall through.\n\n  // No usable single-column PK. Scan full-table, non-partial, NOT NULL unique indexes.\n  if (indexRows === undefined) {\n    indexRows = await loadIndexList();\n  }\n  if (indexRows) {\n    for (const index of indexRows) {\n      const unique =\n        index.unique === 1 ||\n        index.unique === true ||\n        Number(index.unique) === 1;\n      if (!unique || typeof index.name !== \"string\" || !index.name) {\n        continue;\n      }\n      const isPartial =\n        index.partial === 1 ||\n        index.partial === true ||\n        Number(index.partial) === 1;\n      if (isPartial) {\n        // Partial UNIQUE (e.g. WHERE active = 1) allows duplicate values outside\n        // the predicate; using that column for `IN (SELECT … LIMIT n)` can mutate\n        // more rows than the requested page.\n        continue;\n      }\n      const indexSafe = index.name.replace(/\"/g, '\"\"');\n      const indexInfo = await executeD1Query(d1, {\n        params: [],\n        query: `PRAGMA index_info(\"${indexSafe}\")`,\n        ...session,\n      });\n      if (!indexInfo.ok) {\n        continue;\n      }\n      interface IndexInfoRow {\n        cid?: number | null;\n        name?: string | null;\n      }\n      const rawIndexCols = (indexInfo.rows as IndexInfoRow[]) ?? [];\n      // Expression index terms report null name (and often cid < 0). Filtering\n      // them out would shrink UNIQUE(tenant_id, lower(email)) to a false\n      // single-column identity — reject the whole index instead.\n      const hasExpressionTerm = rawIndexCols.some((row) => {\n        const nameOk = typeof row?.name === \"string\" && row.name.length > 0;\n        if (!nameOk) {\n          return true;\n        }\n        if (typeof row.cid === \"number\" && row.cid < 0) {\n          return true;\n        }\n        return false;\n      });\n      if (hasExpressionTerm || rawIndexCols.length === 0) {\n        continue;\n      }\n      const indexCols = rawIndexCols.filter(\n        (row): row is IndexInfoRow & { name: string } =>\n          typeof row?.name === \"string\" && row.name.length > 0\n      );\n      if (indexCols.length === 1 && indexCols[0]?.name) {\n        const identity = indexCols[0].name;\n        // SQLite UNIQUE allows multiple NULLs; `col IN (SELECT col …)` never\n        // matches NULL, so a null identity page can under- or over-mutate.\n        if (!isNotNullColumn(identity)) {\n          continue;\n        }\n        // Reject when the unique index collation differs from the column's\n        // declared collation: `identity IN (SELECT identity … LIMIT n)` uses\n        // column equality, which can match more rows than the unique index\n        // (e.g. TEXT COLLATE NOCASE column + UNIQUE COLLATE BINARY index).\n        const collMatch = await indexCollationMatchesColumn(\n          d1,\n          table,\n          safe,\n          indexSafe,\n          identity,\n          session\n        );\n        if (!collMatch) {\n          continue;\n        }\n        return identity;\n      }\n    }\n  }\n\n  throw new D1SqlCompileError(\n    \"bounded_mutation_no_unique_identity\",\n    `Bounded update/delete on \"${table}\" requires a proven single-column PRIMARY KEY or UNIQUE index`\n  );\n}\n\nasync function compileOptionsForBoundedMutation(\n  d1: D1DatabaseLike,\n  payload: {\n    table_name?: string;\n    limit?: number;\n    offset?: number;\n    current_page?: number;\n    page_size?: number;\n    sort_by?: unknown;\n  },\n  session?: { bookmark?: string | null; sessionMode?: string | null }\n): Promise<D1CompileOptions | undefined> {\n  if (!(hasPaginationBounds(payload) || payload.sort_by)) {\n    return undefined;\n  }\n  if (!hasPaginationBounds(payload)) {\n    // order_without_bounds is raised by the compiler\n    return undefined;\n  }\n  const identityColumn = await resolveD1BoundedIdentityColumn(\n    d1,\n    payload.table_name ?? \"\",\n    session\n  );\n  return { identityColumn };\n}\n\nfunction headerValue(\n  options: AthenaGatewayCallOptions | undefined,\n  name: string\n): string | undefined {\n  const headers = options?.headers;\n  if (!headers) {\n    return undefined;\n  }\n  const lower = name.toLowerCase();\n  for (const [key, value] of Object.entries(headers)) {\n    if (key.toLowerCase() === lower && value?.trim()) {\n      return value.trim();\n    }\n  }\n  return undefined;\n}\n\nfunction sessionFromOptions(\n  options: AthenaGatewayCallOptions | undefined,\n  defaults: CloudflareD1TransportOptions\n): { bookmark?: string | null; sessionMode?: string | null } {\n  return {\n    bookmark: headerValue(options, \"x-athena-d1-bookmark\") ?? null,\n    sessionMode:\n      headerValue(options, \"x-athena-d1-session-mode\") ??\n      defaults.defaultSessionMode ??\n      null,\n  };\n}\n\n/**\n * Gateway default is stripNulls: true (omit null-valued keys from row objects).\n * Edge must match so feature flags / UI code relying on absent keys work on D1.\n */\nfunction resolveStripNulls(\n  payloadStrip: boolean | undefined,\n  callOptions: AthenaGatewayCallOptions | undefined,\n  defaultValue = true\n): boolean {\n  if (typeof payloadStrip === \"boolean\") {\n    return payloadStrip;\n  }\n  if (typeof callOptions?.stripNulls === \"boolean\") {\n    return callOptions.stripNulls;\n  }\n  return defaultValue;\n}\n\nfunction stripNullPropertiesFromRows(rows: unknown[]): unknown[] {\n  return rows.map((row) => {\n    if (row === null || typeof row !== \"object\" || Array.isArray(row)) {\n      return row;\n    }\n    const out: Record<string, unknown> = {};\n    for (const [key, value] of Object.entries(row as Record<string, unknown>)) {\n      if (value !== null) {\n        out[key] = value;\n      }\n    }\n    return out;\n  });\n}\n\nfunction maybeStripNullRows(rows: unknown[], strip: boolean): unknown[] {\n  return strip ? stripNullPropertiesFromRows(rows) : rows;\n}\n\nfunction successResponse<T>(\n  data: T,\n  count: number | null | undefined,\n  raw: unknown,\n  bookmark: string | null\n): AthenaGatewayResponse<T> {\n  const response: AthenaGatewayResponse<T> = {\n    count: count ?? null,\n    data,\n    error: undefined,\n    errorDetails: null,\n    ok: true,\n    raw,\n    status: 200,\n    statusText: \"OK\",\n  };\n  // Surface bookmark for callers that inspect raw\n  if (bookmark && raw && typeof raw === \"object\" && !Array.isArray(raw)) {\n    const rawRecord = raw as Record<string, unknown>;\n    rawRecord.bookmark = bookmark;\n  }\n  return response;\n}\n\nfunction errorResponse<T>(\n  status: number,\n  code:\n    | \"HTTP_ERROR\"\n    | \"UNKNOWN_ERROR\"\n    | \"INVALID_JSON\"\n    | \"NETWORK_ERROR\"\n    | \"INVALID_URL\",\n  message: string,\n  endpoint: string,\n  method: string,\n  hint?: string\n): AthenaGatewayResponse<T> {\n  const error = new AthenaGatewayError({\n    code,\n    endpoint: endpoint as never,\n    hint,\n    message,\n    method: method as never,\n    status,\n  });\n  return {\n    data: null,\n    error: error.message,\n    errorDetails: error.toDetails(),\n    ok: false,\n    raw: { code, error: message },\n    status,\n    statusText: null,\n  };\n}\n\nfunction compileErrorResponse<T>(\n  error: unknown,\n  endpoint: string,\n  method: string\n): AthenaGatewayResponse<T> {\n  if (error instanceof D1SqlCompileError) {\n    return errorResponse(\n      400,\n      \"HTTP_ERROR\",\n      error.message,\n      endpoint,\n      method,\n      `D1 SQL compile failed (${error.code})`\n    );\n  }\n  const message = error instanceof Error ? error.message : String(error);\n  return errorResponse(500, \"UNKNOWN_ERROR\", message, endpoint, method);\n}\n\n/**\n * Gateway-shaped transport that executes against a Worker D1 binding.\n */\nexport function createCloudflareD1GatewayTransport(\n  options: CloudflareD1TransportOptions\n): AthenaGatewayClient {\n  const { d1 } = options;\n\n  async function runCompiled<T>(\n    compiled: D1CompiledSql,\n    callOptions: AthenaGatewayCallOptions | undefined,\n    endpoint: string,\n    method: string,\n    mapResult?: (\n      rows: unknown[],\n      count: number\n    ) => { data: T; count: number | null },\n    stripNulls = true\n  ): Promise<AthenaGatewayResponse<T>> {\n    try {\n      const session = sessionFromOptions(callOptions, options);\n      if (compiled.statements && compiled.statements.length > 1) {\n        const batch = await executeD1Batch(d1, {\n          statements: compiled.statements.map((statement) => ({\n            params: statement.params,\n            query: statement.sql,\n          })),\n          ...session,\n        });\n        if (!batch.ok) {\n          return errorResponse(\n            400,\n            \"HTTP_ERROR\",\n            d1ErrorMessage(batch),\n            endpoint,\n            method\n          );\n        }\n        // Sparse multi-row inserts without RETURNING yield empty `results` arrays;\n        // each D1 result still reports affected rows on `meta.changes`.\n        const rows = maybeStripNullRows(\n          batch.results.flatMap((item) =>\n            Array.isArray(item.results) ? item.results : []\n          ),\n          stripNulls\n        );\n        const changes = batch.results.reduce((sum, item) => {\n          const meta = item?.meta;\n          const n =\n            meta && typeof meta === \"object\" && typeof meta.changes === \"number\"\n              ? meta.changes\n              : 0;\n          return sum + n;\n        }, 0);\n        const count = rows.length > 0 ? rows.length : changes;\n        const mapped = mapResult?.(rows, count) ?? {\n          count,\n          data: rows as T,\n        };\n        return successResponse(\n          mapped.data,\n          mapped.count,\n          batch,\n          batch.bookmark\n        );\n      }\n\n      const result = await executeD1Query(d1, {\n        params: compiled.params,\n        query: compiled.sql,\n        ...session,\n      });\n      if (!result.ok) {\n        return errorResponse(\n          400,\n          \"HTTP_ERROR\",\n          d1ErrorMessage(result),\n          endpoint,\n          method\n        );\n      }\n      const rows = maybeStripNullRows(result.rows, stripNulls);\n      const mapped = mapResult?.(rows, result.count) ?? {\n        count: result.count,\n        data: rows as T,\n      };\n      return successResponse(\n        mapped.data,\n        mapped.count,\n        result,\n        result.bookmark\n      );\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      return errorResponse(500, \"UNKNOWN_ERROR\", message, endpoint, method);\n    }\n  }\n\n  return {\n    baseUrl: CLOUDFLARE_EDGE_BASE_URL,\n    buildHeaders(callOptions) {\n      return { ...(callOptions?.headers ?? {}) };\n    },\n    async deleteGateway<T>(\n      payload: AthenaDeletePayload,\n      callOptions?: AthenaGatewayCallOptions\n    ): Promise<AthenaGatewayResponse<T>> {\n      try {\n        const session = sessionFromOptions(callOptions, options);\n        const compileOptions = await compileOptionsForBoundedMutation(\n          d1,\n          payload,\n          session\n        );\n        const compiled = compileD1Delete(payload, compileOptions);\n        const stripNulls = resolveStripNulls(undefined, callOptions, true);\n        return runCompiled(\n          compiled,\n          callOptions,\n          \"/gateway/delete\",\n          \"DELETE\",\n          undefined,\n          stripNulls\n        );\n      } catch (error) {\n        return compileErrorResponse(error, \"/gateway/delete\", \"DELETE\");\n      }\n    },\n    async fetchGateway<T>(\n      payload: AthenaFetchPayload | Record<string, unknown>,\n      callOptions?: AthenaGatewayCallOptions\n    ): Promise<AthenaGatewayResponse<T>> {\n      try {\n        // Reject explicit operation AST envelopes; column:true selects still compile.\n        if (\n          payload &&\n          typeof payload === \"object\" &&\n          \"operation\" in (payload as object)\n        ) {\n          return errorResponse(\n            400,\n            \"HTTP_ERROR\",\n            \"Direct AST operation payloads are unsupported on D1 edge-local\",\n            \"/gateway/fetch\",\n            \"POST\"\n          );\n        }\n        const fetchPayload = payload as AthenaFetchPayload;\n        const compiled = compileD1Fetch(fetchPayload);\n        const stripNulls = resolveStripNulls(\n          fetchPayload.strip_nulls,\n          callOptions,\n          true\n        );\n        if (fetchPayload.head === true) {\n          return runCompiled(\n            compiled,\n            callOptions,\n            \"/gateway/fetch\",\n            \"POST\",\n            (rows) => ({ count: extractAthenaCount(rows), data: [] as T }),\n            // COUNT rows are meta, not user-facing object rows\n            false\n          );\n        }\n\n        // exact/planned/estimated: total matches independent of LIMIT/OFFSET page size\n        const wantsTotalCount =\n          fetchPayload.count === \"exact\" ||\n          fetchPayload.count === \"planned\" ||\n          fetchPayload.count === \"estimated\";\n        if (wantsTotalCount) {\n          // Page + COUNT must share one D1 session so bookmarks and sequential\n          // consistency cover both observations (not two independent withSession calls).\n          const session = sessionFromOptions(callOptions, options);\n          const countCompiled = compileD1Count(fetchPayload);\n          const batch = await executeD1Batch(d1, {\n            statements: [\n              {\n                params: compiled.params,\n                query: compiled.sql,\n              },\n              {\n                params: countCompiled.params,\n                query: countCompiled.sql,\n              },\n            ],\n            ...session,\n          });\n          if (!batch.ok) {\n            return errorResponse(\n              400,\n              \"HTTP_ERROR\",\n              d1ErrorMessage(batch),\n              \"/gateway/fetch\",\n              \"POST\"\n            );\n          }\n          const dataItem = batch.results[0];\n          const countItem = batch.results[1];\n          if (!dataItem || dataItem.success === false) {\n            const message =\n              dataItem &&\n              typeof (dataItem as { error?: unknown }).error === \"string\" &&\n              (dataItem as { error: string }).error.trim()\n                ? (dataItem as { error: string }).error\n                : \"D1 page query failed\";\n            return errorResponse(\n              400,\n              \"HTTP_ERROR\",\n              message,\n              \"/gateway/fetch\",\n              \"POST\"\n            );\n          }\n          // Do not fall back to page length: callers asked for an exact/planned/\n          // estimated total, so a failed COUNT must surface as an error.\n          if (!countItem || countItem.success === false) {\n            const message =\n              countItem &&\n              typeof (countItem as { error?: unknown }).error === \"string\" &&\n              (countItem as { error: string }).error.trim()\n                ? (countItem as { error: string }).error\n                : \"D1 count query failed\";\n            return errorResponse(\n              400,\n              \"HTTP_ERROR\",\n              message,\n              \"/gateway/fetch\",\n              \"POST\"\n            );\n          }\n          const dataRows = Array.isArray(dataItem.results)\n            ? dataItem.results\n            : [];\n          const countRows = Array.isArray(countItem.results)\n            ? countItem.results\n            : [];\n          const total = extractAthenaCount(countRows);\n          const rows = maybeStripNullRows(dataRows, stripNulls);\n          return successResponse(\n            rows as T,\n            total,\n            { batch, count: countItem, data: dataItem },\n            batch.bookmark\n          );\n        }\n\n        return runCompiled(\n          compiled,\n          callOptions,\n          \"/gateway/fetch\",\n          \"POST\",\n          undefined,\n          stripNulls\n        );\n      } catch (error) {\n        return compileErrorResponse(error, \"/gateway/fetch\", \"POST\");\n      }\n    },\n    async insertGateway<T>(\n      payload: AthenaInsertPayload,\n      callOptions?: AthenaGatewayCallOptions\n    ): Promise<AthenaGatewayResponse<T>> {\n      try {\n        const compiled = compileD1Insert(payload);\n        const stripNulls = resolveStripNulls(undefined, callOptions, true);\n        return runCompiled(\n          compiled,\n          callOptions,\n          \"/gateway/insert\",\n          \"PUT\",\n          undefined,\n          stripNulls\n        );\n      } catch (error) {\n        return compileErrorResponse(error, \"/gateway/insert\", \"PUT\");\n      }\n    },\n    async queryGateway<T>(\n      payload: AthenaQueryPayload,\n      callOptions?: AthenaGatewayCallOptions\n    ): Promise<AthenaGatewayResponse<T>> {\n      try {\n        const params = payload.params ?? callOptions?.params;\n        const session = sessionFromOptions(callOptions, options);\n        // Shared SDK typed planners may emit Postgres casts (::text) for UUID eq;\n        // rewrite to SQLite-safe SQL before D1 execution.\n        const query = rewritePostgresSqlForSqlite(payload.query);\n        const result = await executeD1Query(d1, {\n          params: Array.isArray(params) ? params : [],\n          query,\n          ...session,\n        });\n        if (!result.ok) {\n          return errorResponse(\n            400,\n            \"HTTP_ERROR\",\n            d1ErrorMessage(result),\n            \"/gateway/query\",\n            \"POST\"\n          );\n        }\n        const stripNulls = resolveStripNulls(undefined, callOptions, true);\n        const rows = maybeStripNullRows(result.rows, stripNulls);\n        return successResponse(\n          rows as T,\n          result.count,\n          { ...result, query },\n          result.bookmark\n        );\n      } catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        return errorResponse(\n          500,\n          \"UNKNOWN_ERROR\",\n          message,\n          \"/gateway/query\",\n          \"POST\"\n        );\n      }\n    },\n    async resolveCallOptions(callOptions) {\n      return callOptions;\n    },\n    async rpcGateway<T>(\n      payload: AthenaRpcPayload,\n      callOptions?: AthenaRpcCallOptions\n    ): Promise<AthenaGatewayResponse<T>> {\n      void payload;\n      void callOptions;\n      return errorResponse(\n        400,\n        \"HTTP_ERROR\",\n        \"RPC is unsupported on D1 edge-local mode\",\n        \"/gateway/rpc\",\n        \"POST\",\n        \"Use flat CRUD or raw query SQL instead\"\n      );\n    },\n    async updateGateway<T>(\n      payload: AthenaUpdatePayload,\n      callOptions?: AthenaGatewayCallOptions\n    ): Promise<AthenaGatewayResponse<T>> {\n      try {\n        const session = sessionFromOptions(callOptions, options);\n        const compileOptions = await compileOptionsForBoundedMutation(\n          d1,\n          payload,\n          session\n        );\n        const compiled = compileD1Update(payload, compileOptions);\n        const stripNulls = resolveStripNulls(\n          payload.strip_nulls,\n          callOptions,\n          true\n        );\n        return runCompiled(\n          compiled,\n          callOptions,\n          \"/gateway/update\",\n          \"POST\",\n          undefined,\n          stripNulls\n        );\n      } catch (error) {\n        return compileErrorResponse(error, \"/gateway/update\", \"POST\");\n      }\n    },\n    async verifyConnection(\n      connectionOptions?: AthenaGatewayConnectionOptions\n    ): Promise<AthenaGatewayConnectionResult> {\n      void connectionOptions;\n      const baseUrl = CLOUDFLARE_EDGE_BASE_URL;\n      try {\n        const result = await executeD1Query(d1, { query: \"SELECT 1 AS ok\" });\n        if (!result.ok) {\n          return {\n            baseUrl,\n            error: d1ErrorMessage(result),\n            errorDetails: null,\n            ok: false,\n            raw: result,\n            reachable: false,\n            status: 500,\n            statusText: null,\n            url: `${baseUrl}/d1`,\n          };\n        }\n        return {\n          baseUrl,\n          error: undefined,\n          errorDetails: null,\n          ok: true,\n          raw: result,\n          reachable: true,\n          status: 200,\n          statusText: \"OK\",\n          url: `${baseUrl}/d1`,\n        };\n      } catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        return {\n          baseUrl,\n          error: message,\n          errorDetails: null,\n          ok: false,\n          raw: null,\n          reachable: false,\n          status: 0,\n          statusText: null,\n          url: `${baseUrl}/d1`,\n        };\n      }\n    },\n  } as AthenaGatewayClient;\n}\n","export type AthenaService = \"db\" | \"auth\" | \"chat\" | \"storage\" | \"billing\";\n\nexport type AthenaConfigurationErrorCode =\n  | \"ATHENA_NO_SERVICE_CONFIGURED\"\n  | \"ATHENA_SERVICE_NOT_CONFIGURED\"\n  | \"ATHENA_API_KEY_REQUIRED\"\n  | \"ATHENA_INVALID_URL\"\n  | \"ATHENA_NEXT_SERVER_RUNTIME_REQUIRED\";\n\n/**\n * Structured configuration failure raised during client construction or\n * unavailable-service access. Distinct from transport/auth/gateway errors.\n */\nexport class AthenaConfigurationError extends Error {\n  readonly code: AthenaConfigurationErrorCode;\n  readonly service?: AthenaService;\n\n  constructor(\n    code: AthenaConfigurationErrorCode,\n    message: string,\n    service?: AthenaService,\n    options?: { cause?: unknown }\n  ) {\n    super(message, options);\n    this.name = \"AthenaConfigurationError\";\n    this.code = code;\n    this.service = service;\n  }\n}\n","/**\n * Pure edge vs gateway execution resolution (no client construction).\n * Used by {@link createClient} and re-exported from the cloudflare façade.\n */\n\nimport { AthenaConfigurationError } from \"../config/errors.ts\";\nimport { ATHENA_ENV_GATEWAY_URL_KEYS } from \"../env/index.ts\";\nimport type { D1DatabaseLike } from \"./types.ts\";\n\n/** How DB/storage execution is routed. */\nexport type AthenaExecutionMode = \"gateway\" | \"edge\" | \"auto\";\n\n/** Resolved mode after applying config + env (never `auto`). */\nexport type AthenaResolvedExecutionMode = \"gateway\" | \"edge\";\n\n/** Env key used when `mode` is omitted or `'auto'`. */\nexport const ATHENA_EXECUTION_MODE_ENV_KEY = \"ATHENA_EXECUTION_MODE\";\n\n/**\n * When both D1 and a gateway URL are available in `auto` mode, which backend wins.\n * Default: `edge` (prefer local bindings when present).\n */\nexport type AthenaExecutionPrefer = \"edge\" | \"gateway\";\n\nexport const ATHENA_EXECUTION_PREFER_ENV_KEY = \"ATHENA_EXECUTION_PREFER\";\n\nconst MODE_ALIASES: Record<string, AthenaExecutionMode> = {\n  auto: \"auto\",\n  cloudflare: \"edge\",\n  \"cloudflare-edge\": \"edge\",\n  d1: \"edge\",\n  edge: \"edge\",\n  gateway: \"gateway\",\n  http: \"gateway\",\n  local: \"edge\",\n  remote: \"gateway\",\n  server: \"gateway\",\n};\n\nexport interface ResolveAthenaExecutionModeInput {\n  /** D1 binding when present enables edge in auto mode. */\n  d1?: D1DatabaseLike | null;\n  /** Optional env map; also used when reading `ATHENA_EXECUTION_MODE`. */\n  env?: Record<string, string | undefined>;\n  /** Explicit mode. Default: `'auto'` (or env `ATHENA_EXECUTION_MODE`). */\n  mode?: AthenaExecutionMode | string | null;\n  /**\n   * When `mode` is `auto` and **both** D1 and a gateway URL exist, pick a winner.\n   * Default `edge`. Override with `prefer: 'gateway'` or env `ATHENA_EXECUTION_PREFER`.\n   */\n  prefer?: AthenaExecutionPrefer | string | null;\n  /** Gateway base URL (or unified root) for server mode. */\n  url?: string | null;\n}\n\nfunction normalizeOptional(\n  value: string | null | undefined\n): string | undefined {\n  const trimmed = value?.trim();\n  return trimmed || undefined;\n}\n\nfunction normalizeModeString(\n  value: string | null | undefined\n): AthenaExecutionMode | undefined {\n  if (value === undefined || value === null) {\n    return undefined;\n  }\n  const key = value.trim().toLowerCase();\n  if (!key) {\n    return undefined;\n  }\n  const mapped = MODE_ALIASES[key];\n  if (!mapped) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_NO_SERVICE_CONFIGURED\",\n      `Unknown Athena execution mode \"${value}\". Use gateway | edge | auto (aliases: server, remote, cloudflare, d1).`,\n      \"db\"\n    );\n  }\n  return mapped;\n}\n\nfunction isD1Binding(value: unknown): value is D1DatabaseLike {\n  return Boolean(\n    value &&\n      typeof value === \"object\" &&\n      typeof (value as D1DatabaseLike).prepare === \"function\"\n  );\n}\n\nfunction resolveGatewayUrl(\n  url: string | null | undefined,\n  env: Record<string, string | undefined>\n): string | undefined {\n  if (normalizeOptional(url)) {\n    return normalizeOptional(url);\n  }\n  // SSOT: ATHENA_ENV_GATEWAY_URL_KEYS (url + db catalogs) from env module\n  for (const key of ATHENA_ENV_GATEWAY_URL_KEYS) {\n    const value = normalizeOptional(env[key]);\n    if (value) {\n      return value;\n    }\n  }\n  return undefined;\n}\n\nfunction resolvePrefer(\n  prefer: AthenaExecutionPrefer | string | null | undefined,\n  env: Record<string, string | undefined>\n): AthenaResolvedExecutionMode {\n  const raw =\n    normalizeOptional(\n      typeof prefer === \"string\" ? prefer : (prefer ?? undefined)\n    ) ??\n    normalizeOptional(env[ATHENA_EXECUTION_PREFER_ENV_KEY]) ??\n    \"edge\";\n  const key = raw.toLowerCase();\n  if (\n    key === \"gateway\" ||\n    key === \"server\" ||\n    key === \"remote\" ||\n    key === \"http\"\n  ) {\n    return \"gateway\";\n  }\n  if (\n    key === \"edge\" ||\n    key === \"d1\" ||\n    key === \"cloudflare\" ||\n    key === \"local\"\n  ) {\n    return \"edge\";\n  }\n  throw new AthenaConfigurationError(\n    \"ATHENA_NO_SERVICE_CONFIGURED\",\n    `Unknown Athena execution prefer \"${raw}\". Use edge | gateway.`,\n    \"db\"\n  );\n}\n\n/**\n * Resolve whether to use gateway HTTP or edge D1/R2 bindings.\n *\n * Auto rules (after env override):\n * 1. Only D1 → `edge`\n * 2. Only gateway URL → `gateway`\n * 3. Both → `prefer` (default `edge`, or env `ATHENA_EXECUTION_PREFER`)\n * 4. Neither → throw {@link AthenaConfigurationError}\n */\nexport function resolveAthenaExecutionMode(\n  input: ResolveAthenaExecutionModeInput = {}\n): AthenaResolvedExecutionMode {\n  const env = input.env ?? {};\n  const fromEnv = normalizeModeString(env[ATHENA_EXECUTION_MODE_ENV_KEY]);\n  const requested = normalizeModeString(input.mode) ?? fromEnv ?? \"auto\";\n  const url = resolveGatewayUrl(input.url, env);\n  const hasD1 = isD1Binding(input.d1);\n  const hasGateway = Boolean(url);\n\n  if (requested === \"gateway\") {\n    if (!hasGateway) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_NO_SERVICE_CONFIGURED\",\n        'Athena execution mode is \"gateway\" but no url / ATHENA_URL / ATHENA_DB_URL / ATHENA_GATEWAY_URL was provided.',\n        \"db\"\n      );\n    }\n    return \"gateway\";\n  }\n  if (requested === \"edge\") {\n    if (!hasD1) {\n      throw new AthenaConfigurationError(\n        \"ATHENA_NO_SERVICE_CONFIGURED\",\n        'Athena execution mode is \"edge\" but no D1 binding was provided (db.d1 / config.d1 / env.DB).',\n        \"db\"\n      );\n    }\n    return \"edge\";\n  }\n\n  // auto\n  if (hasD1 && hasGateway) {\n    return resolvePrefer(input.prefer, env);\n  }\n  if (hasD1) {\n    return \"edge\";\n  }\n  if (hasGateway) {\n    return \"gateway\";\n  }\n\n  throw new AthenaConfigurationError(\n    \"ATHENA_NO_SERVICE_CONFIGURED\",\n    'Cannot resolve Athena execution mode: provide mode \"gateway\" with url/key, mode \"edge\" with d1, or mode \"auto\" with either a D1 binding or a gateway URL (ATHENA_URL / ATHENA_DB_URL / ATHENA_GATEWAY_URL).',\n    \"db\"\n  );\n}\n\nexport function isD1DatabaseBinding(value: unknown): value is D1DatabaseLike {\n  return isD1Binding(value);\n}\n","/**\n * L3a local R2 object I/O subset for edge-local mode.\n * Pure R2 does not implement catalogs, backups, multipart, or signed URLs.\n * Hybrid compose overlays L3a helpers onto the full HTTP AthenaStorageModule.\n */\n\nimport type { AthenaStorageModule } from \"../../storage/module.ts\";\nimport type { R2BucketLike, R2ObjectBodyLike } from \"../types.ts\";\n\nexport interface CloudflareR2StorageOptions {\n  /** Key prefix applied to all object keys (trailing slash normalized). */\n  prefix?: string;\n  r2: R2BucketLike;\n}\n\nexport type CloudflareR2PutBody =\n  | ReadableStream\n  | ArrayBuffer\n  | ArrayBufferView\n  | string\n  | Blob\n  | null;\n\nexport interface CloudflareR2PutObjectInput {\n  body: CloudflareR2PutBody;\n  contentType?: string;\n  key: string;\n  metadata?: Record<string, string>;\n}\n\nexport interface CloudflareR2GetObjectResult {\n  body: R2ObjectBodyLike;\n  contentType?: string;\n  key: string;\n  size: number;\n}\n\nexport interface CloudflareR2ListObjectsInput {\n  cursor?: string;\n  limit?: number;\n  prefix?: string;\n}\n\nexport interface CloudflareR2ListObjectsResult {\n  cursor?: string;\n  objects: Array<{ key: string; size: number; etag?: string; uploaded?: Date }>;\n  truncated: boolean;\n}\n\n/** L3a object methods exposed when an R2 binding is configured. */\nexport interface CloudflareR2ObjectStorage {\n  deleteObject: (input: {\n    key: string | string[];\n  }) => Promise<{ deleted: string[] }>;\n  getObject: (input: {\n    key: string;\n  }) => Promise<CloudflareR2GetObjectResult | null>;\n  listObjects: (\n    input?: CloudflareR2ListObjectsInput\n  ) => Promise<CloudflareR2ListObjectsResult>;\n  putObject: (input: CloudflareR2PutObjectInput) => Promise<{ key: string }>;\n}\n\n/**\n * Storage namespace for edge-local R2: full module shape (unsupported methods throw)\n * plus L3a object helpers. Hybrid compose is the same type with real HTTP ports.\n */\nexport type CloudflareR2StorageModule = AthenaStorageModule &\n  CloudflareR2ObjectStorage;\n\nfunction normalizePrefix(prefix: string | undefined): string {\n  if (!prefix?.trim()) {\n    return \"\";\n  }\n  const normalized = prefix.replace(/^\\/+/, \"\").replace(/\\/?$/, \"/\");\n  if (normalized.includes(\"\\0\")) {\n    throw new Error(\"storage prefix must not contain null bytes\");\n  }\n  if (normalized.split(\"/\").some((segment) => segment === \"..\")) {\n    throw new Error('storage prefix must not contain \"..\" path segments');\n  }\n  return normalized;\n}\n\n/**\n * Normalize and validate an object key before joining with the configured prefix.\n * Rejects empty keys, null bytes, and `..` segments so a tenant prefix cannot be\n * escaped via path-like keys (even though R2 treats keys as opaque strings).\n */\nfunction assertSafeObjectKey(key: string): string {\n  if (typeof key !== \"string\" || !key.trim()) {\n    throw new Error(\"Object key is required\");\n  }\n  if (key.includes(\"\\0\")) {\n    throw new Error(\"Object key must not contain null bytes\");\n  }\n  const cleaned = key.replace(/^\\/+/, \"\");\n  if (!cleaned) {\n    throw new Error(\"Object key is required\");\n  }\n  const segments = cleaned.split(\"/\");\n  if (segments.some((segment) => segment === \"..\")) {\n    throw new Error('Object key must not contain \"..\" path segments');\n  }\n  return cleaned;\n}\n\nfunction joinKey(prefix: string, key: string): string {\n  return `${prefix}${assertSafeObjectKey(key)}`;\n}\n\n/**\n * Map a physical object key back to the logical key consumers pass in/out.\n * Returned keys must be reusable with getObject/deleteObject without double-prefixing.\n */\nfunction toLogicalKey(prefix: string, physicalKey: string): string {\n  if (!prefix) {\n    return physicalKey;\n  }\n  if (physicalKey.startsWith(prefix)) {\n    return physicalKey.slice(prefix.length);\n  }\n  return physicalKey;\n}\n\n/**\n * Public API keys are always logical: always join the configured prefix.\n * Never treat an input that happens to start with the prefix as already physical\n * (that would collapse `a.txt` and `tenant/a.txt` onto the same object).\n */\nfunction toPhysicalKey(prefix: string, key: string): string {\n  return joinKey(prefix, key);\n}\n\nfunction unsupported(method: string): never {\n  throw new Error(\n    `storage.${method} is not available in Cloudflare edge-local R2 object mode. ` +\n      \"Only putObject / getObject / deleteObject / listObjects are supported (L3a).\"\n  );\n}\n\n/**\n * Nested callable so pure-R2 `storage.catalog.list` throws the documented L3a message\n * instead of a TypeError from treating the unsupported stub as a plain function.\n */\nfunction createUnsupportedCallable(path: string): unknown {\n  const thrower = (..._args: unknown[]): never => unsupported(path);\n  return new Proxy(thrower, {\n    apply() {\n      return unsupported(path);\n    },\n    get(target, property) {\n      if (property === \"then\") {\n        return;\n      }\n      if (typeof property === \"symbol\") {\n        return Reflect.get(target, property);\n      }\n      if (typeof property === \"string\") {\n        return createUnsupportedCallable(`${path}.${property}`);\n      }\n    },\n  });\n}\n\n/**\n * L3a object helpers only (no HTTP surface, no unsupported proxy).\n */\nexport function createCloudflareR2ObjectStorage(\n  options: CloudflareR2StorageOptions\n): CloudflareR2ObjectStorage {\n  const prefix = normalizePrefix(options.prefix);\n  const { r2 } = options;\n\n  const putObject = async (input: CloudflareR2PutObjectInput) => {\n    const logical = assertSafeObjectKey(input.key);\n    const physical = toPhysicalKey(prefix, logical);\n    await r2.put(physical, input.body, {\n      customMetadata: input.metadata,\n      httpMetadata: input.contentType\n        ? { contentType: input.contentType }\n        : undefined,\n    });\n    // Return the logical key so put → get/delete round-trips without double-prefix.\n    return { key: logical };\n  };\n\n  const getObject = async (input: { key: string }) => {\n    const logical = assertSafeObjectKey(input.key);\n    const physical = toPhysicalKey(prefix, logical);\n    const object = await r2.get(physical);\n    if (!object) {\n      return null;\n    }\n    return {\n      body: object,\n      contentType: object.httpMetadata?.contentType,\n      key: toLogicalKey(prefix, object.key),\n      size: object.size,\n    };\n  };\n\n  const deleteObject = async (input: { key: string | string[] }) => {\n    const logicalKeys = (\n      Array.isArray(input.key) ? input.key : [input.key]\n    ).map((key) => assertSafeObjectKey(key));\n    const physicalKeys = logicalKeys.map((key) => toPhysicalKey(prefix, key));\n    await r2.delete(\n      physicalKeys.length === 1 ? physicalKeys[0]! : physicalKeys\n    );\n    return { deleted: logicalKeys };\n  };\n\n  const listObjects = async (input?: CloudflareR2ListObjectsInput) => {\n    // Empty relative prefix lists under the configured storage prefix only.\n    const relative = input?.prefix?.trim()\n      ? assertSafeObjectKey(input.prefix)\n      : \"\";\n    const listPrefix = `${prefix}${relative}`;\n    const listed = await r2.list({\n      cursor: input?.cursor,\n      limit: input?.limit,\n      prefix: listPrefix || undefined,\n    });\n    return {\n      cursor: listed.cursor,\n      objects: listed.objects.map((object) => ({\n        etag: object.etag,\n        key: toLogicalKey(prefix, object.key),\n        size: object.size,\n        uploaded: object.uploaded,\n      })),\n      truncated: listed.truncated,\n    };\n  };\n\n  return {\n    deleteObject,\n    getObject,\n    listObjects,\n    putObject,\n  };\n}\n\n/**\n * Minimal storage surface backed by an R2 binding only.\n * Full AthenaStorageModule methods that need catalogs throw clearly.\n */\nexport function createCloudflareR2StorageModule(\n  options: CloudflareR2StorageOptions\n): CloudflareR2StorageModule {\n  const base = createCloudflareR2ObjectStorage(options);\n\n  return new Proxy(base as CloudflareR2StorageModule, {\n    get(target, property, receiver) {\n      if (property in target) {\n        return Reflect.get(target, property, receiver);\n      }\n      if (typeof property === \"string\") {\n        return createUnsupportedCallable(property);\n      }\n    },\n  });\n}\n\n/**\n * Same-namespace hybrid: HTTP storage.* ports (file/catalog/multipart/backup/…)\n * plus L3a R2 putObject/getObject/deleteObject/listObjects on the same module.\n * R2 L3a wins on the four object helper names if ever present on HTTP.\n */\nexport function composeHttpAndR2Storage(\n  http: AthenaStorageModule,\n  options: CloudflareR2StorageOptions\n): CloudflareR2StorageModule {\n  const r2Objects = createCloudflareR2ObjectStorage(options);\n  return {\n    ...http,\n    ...r2Objects,\n  };\n}\n","import type { AthenaRequestContext } from \"../v3-client.ts\";\n\n/**\n * Merge two request contexts with override precedence.\n * Nested headers are shallow-merged; later headers win on key collision.\n */\nexport function mergeAthenaRequestContexts(\n  base: AthenaRequestContext | undefined,\n  override: AthenaRequestContext | undefined\n): AthenaRequestContext | undefined {\n  if (!(base || override)) {\n    return;\n  }\n\n  return {\n    ...base,\n    ...override,\n    headers:\n      base?.headers || override?.headers\n        ? {\n            ...(base?.headers ?? {}),\n            ...(override?.headers ?? {}),\n          }\n        : undefined,\n  };\n}\n","/**\n * Resolve query diagnostics flags for {@link createClient}.\n *\n * Prefer `diagnostics: 'auto'` in Next/OpenNext apps so production builds stay\n * quiet without app-local OPENNEXT_BUILD branching.\n */\n\nimport type { AthenaQueryTraceOptions } from \"./client.ts\";\n\nexport type AthenaDiagnosticsMode = boolean | \"auto\";\n\nexport interface AthenaDiagnosticsInput {\n  debugAst?: boolean;\n  diagnostics?: AthenaDiagnosticsMode;\n  env?: Record<string, string | undefined>;\n  findManyAst?: boolean;\n  traceQueries?: boolean | AthenaQueryTraceOptions;\n}\n\nexport interface ResolvedAthenaDiagnostics {\n  debugAst: boolean;\n  findManyAst: boolean;\n  /**\n   * When the input was a trace options object, it is preserved when enabled.\n   * When disabled, becomes `false`.\n   */\n  traceQueries: boolean | AthenaQueryTraceOptions;\n}\n\nfunction readProcessEnv(): Record<string, string | undefined> {\n  try {\n    return (\n      (globalThis as { process?: { env?: Record<string, string | undefined> } })\n        .process?.env ?? {}\n    );\n  } catch {\n    return {};\n  }\n}\n\nfunction isTruthyEnv(value: string | undefined): boolean {\n  if (!value) {\n    return false;\n  }\n  const normalized = value.trim().toLowerCase();\n  return (\n    normalized === \"1\" ||\n    normalized === \"true\" ||\n    normalized === \"yes\" ||\n    normalized === \"on\"\n  );\n}\n\n/**\n * True for production runtime and common Next/OpenNext build phases where\n * chatty AST/trace output should stay off by default.\n */\nexport function isQuietAthenaDiagnosticsEnvironment(\n  env: Record<string, string | undefined> = readProcessEnv()\n): boolean {\n  const nodeEnv = env.NODE_ENV?.trim().toLowerCase();\n  if (nodeEnv === \"production\") {\n    return true;\n  }\n  if (isTruthyEnv(env.OPENNEXT_BUILD)) {\n    return true;\n  }\n  const nextPhase = env.NEXT_PHASE?.trim();\n  if (nextPhase === \"phase-production-build\") {\n    return true;\n  }\n  // CI unit tests often set NODE_ENV=test; only quiet generic CI production-ish runs.\n  if (\n    isTruthyEnv(env.CI) &&\n    nodeEnv !== \"test\" &&\n    (nodeEnv === \"production\" || isTruthyEnv(env.OPENNEXT_BUILD))\n  ) {\n    return true;\n  }\n  return false;\n}\n\nfunction resolveBooleanFlag(\n  explicit: boolean | undefined,\n  mode: AthenaDiagnosticsMode | undefined,\n  quiet: boolean\n): boolean {\n  if (typeof explicit === \"boolean\") {\n    return explicit;\n  }\n  if (mode === true) {\n    return true;\n  }\n  if (mode === false) {\n    return false;\n  }\n  if (mode === \"auto\") {\n    // Auto keeps defaults off; quiet envs are handled by collapsing mode to false.\n    void quiet;\n    return false;\n  }\n  // Undefined mode: historical default (off unless explicit).\n  return false;\n}\n\n/**\n * Merge `diagnostics` mode with per-flag overrides.\n *\n * - `diagnostics: true` → enable AST flags (and trace) when not explicitly set\n * - `diagnostics: false` → disable when not explicitly set\n * - `diagnostics: 'auto'` → disable in production / OpenNext build / production-build phase\n * - explicit `debugAst` / `findManyAst` / `traceQueries` always win\n */\nexport function resolveAthenaClientDiagnostics(\n  input: AthenaDiagnosticsInput\n): ResolvedAthenaDiagnostics {\n  const env = input.env ?? readProcessEnv();\n  const quiet = isQuietAthenaDiagnosticsEnvironment(env);\n  const mode = input.diagnostics;\n\n  // In quiet envs, auto (or explicit false) keeps defaults off even if callers\n  // only set diagnostics mode.\n  const effectiveMode: AthenaDiagnosticsMode | undefined =\n    mode === \"auto\" && quiet ? false : mode;\n\n  const debugAst = resolveBooleanFlag(input.debugAst, effectiveMode, quiet);\n  const findManyAst = resolveBooleanFlag(\n    input.findManyAst,\n    effectiveMode,\n    quiet\n  );\n\n  let traceQueries: ResolvedAthenaDiagnostics[\"traceQueries\"];\n  if (input.traceQueries !== undefined) {\n    if (typeof input.traceQueries === \"boolean\") {\n      traceQueries = input.traceQueries;\n    } else if (effectiveMode === false || (mode === \"auto\" && quiet)) {\n      // Quiet override only when the object didn't set enabled: true explicitly.\n      const enabled = input.traceQueries.enabled;\n      traceQueries =\n        typeof enabled === \"boolean\"\n          ? enabled\n            ? input.traceQueries\n            : false\n          : false;\n    } else {\n      traceQueries = input.traceQueries;\n    }\n  } else if (effectiveMode === true) {\n    traceQueries = true;\n  } else {\n    traceQueries = false;\n  }\n\n  return {\n    debugAst,\n    findManyAst,\n    traceQueries,\n  };\n}\n","import type {\n  AthenaAuthBindings,\n  AthenaAuthClientConfig,\n} from \"./auth/types.ts\";\nimport {\n  type AthenaBillingClientConfig,\n  type AthenaBillingModule,\n  createBillingModule,\n} from \"./billing/module.ts\";\nimport type {\n  AthenaChatModule,\n  AthenaChatWebSocketFactory,\n} from \"./chat/types.ts\";\nimport {\n  type AthenaFromOptions,\n  type AthenaQueryTraceOptions,\n  type AthenaRequestOptions,\n  type AthenaRequestResponse,\n  createInternalClientCore,\n  createInternalClientView,\n  type InternalAthenaClient,\n  type InternalAthenaClientCore,\n  type RpcQueryBuilder,\n  type TableQueryBuilder,\n} from \"./client.ts\";\nimport type { AthenaResult } from \"./client-result.ts\";\nimport {\n  createCloudflareEdgeCapabilities,\n  createGatewayCapabilities,\n} from \"./cloudflare/capabilities.ts\";\nimport { createCloudflareD1GatewayTransport } from \"./cloudflare/d1/transport.ts\";\nimport {\n  type AthenaExecutionMode,\n  type AthenaExecutionPrefer,\n  resolveAthenaExecutionMode,\n} from \"./cloudflare/execution-mode.ts\";\nimport {\n  type CloudflareR2StorageModule,\n  composeHttpAndR2Storage,\n  createCloudflareR2StorageModule,\n} from \"./cloudflare/r2/storage.ts\";\nimport type {\n  AthenaClientCapabilities,\n  D1DatabaseLike,\n  R2BucketLike,\n} from \"./cloudflare/types.ts\";\nimport {\n  CLOUDFLARE_EDGE_API_KEY,\n  CLOUDFLARE_EDGE_BASE_URL,\n} from \"./cloudflare/types.ts\";\nimport {\n  AthenaConfigurationError,\n  type AthenaService,\n} from \"./config/errors.ts\";\nimport { mergeAthenaRequestContexts } from \"./context/merge.ts\";\nimport type { AthenaDbModule } from \"./db/module.ts\";\nimport {\n  type AthenaDiagnosticsMode,\n  resolveAthenaClientDiagnostics,\n} from \"./diagnostics.ts\";\nimport {\n  ATHENA_ENV_API_KEY_KEYS,\n  ATHENA_ENV_CLIENT_KEYS,\n  ATHENA_ENV_DB_URL_KEYS,\n  ATHENA_ENV_URL_KEYS,\n} from \"./env/index.ts\";\nimport type { AthenaGatewayClient } from \"./gateway/client.ts\";\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaGatewayConnectionOptions,\n  AthenaGatewayConnectionResult,\n  AthenaJsonObject,\n  AthenaRpcCallOptions,\n  BackendConfig,\n  BackendType,\n} from \"./gateway/types.ts\";\nimport type {\n  AthenaClientModelForTableName,\n  AthenaClientModelsInput,\n  AthenaClientTableName,\n  AthenaModelTarget,\n  InsertOf,\n  RowOf,\n  UpdateOf,\n} from \"./schema/types.ts\";\nimport type {\n  AthenaStorageClientConfig,\n  AthenaStorageDirectUploadConfig,\n  AthenaStorageModule,\n} from \"./storage/module.ts\";\nimport type { AthenaRequestHeaderOverrideFields } from \"./utils/athena-request-headers.ts\";\n\ntype MaybePromise<T> = T | Promise<T>;\ntype ResolvedModels<TModels> = TModels extends AthenaClientModelsInput\n  ? TModels\n  : never;\n\n/** Service-specific URL keys (not shared gateway root/db/key/client SSOT). */\nconst ENV_AUTH_URL_KEYS = [\n  \"ATHENA_AUTH_URL\",\n  \"NEXT_PUBLIC_ATHENA_AUTH_URL\",\n] as const;\nconst ENV_CHAT_URL_KEYS = [\n  \"ATHENA_CHAT_URL\",\n  \"NEXT_PUBLIC_ATHENA_CHAT_URL\",\n] as const;\nconst ENV_CHAT_WS_URL_KEYS = [\n  \"ATHENA_CHAT_WS_URL\",\n  \"NEXT_PUBLIC_ATHENA_CHAT_WS_URL\",\n] as const;\nconst ENV_STORAGE_URL_KEYS = [\n  \"ATHENA_STORAGE_URL\",\n  \"NEXT_PUBLIC_ATHENA_STORAGE_URL\",\n] as const;\nconst MISSING_DB_SENTINEL = \"https://athena.invalid/db\";\n\nexport {\n  AthenaConfigurationError,\n  type AthenaConfigurationErrorCode,\n  type AthenaService,\n} from \"./config/errors.ts\";\n\nexport interface AthenaRequestContext {\n  bearerToken?: string | null;\n  cookie?: string | null;\n  forceNoCache?: boolean;\n  headers?: Record<string, string>;\n  organizationId?: string | null;\n  sessionToken?: string | null;\n  userId?: string | null;\n}\n\nexport type AthenaRequestContextProvider = () => MaybePromise<\n  AthenaRequestContext | undefined\n>;\n\nexport interface AthenaDbConfig {\n  /**\n   * Cloudflare D1 binding (e.g. `env.DB`).\n   * Drop-in local DB execution for `from` / `query` / flat CRUD — same fluent API as HTTP gateway.\n   * When set, `createClient` wires a D1 transport automatically (ADR 0015).\n   */\n  d1?: D1DatabaseLike | null;\n  jdbcUrl?: string | null;\n  pgUri?: string | null;\n  /** Default D1 session mode when using `d1` (`first-unconstrained`, `first-primary`, …). */\n  sessionMode?: string | null;\n  url?: string | null;\n}\n\nexport interface AthenaAuthConfig\n  extends Omit<\n    AthenaAuthClientConfig,\n    \"baseUrl\" | \"apiKey\" | \"bearerToken\" | \"cookie\" | \"sessionToken\"\n  > {\n  url?: string | null;\n}\n\nexport interface AthenaChatConfig\n  extends Pick<\n    AthenaRequestHeaderOverrideFields,\n    \"bearerToken\" | \"cookie\" | \"forceNoCache\" | \"headers\" | \"sessionToken\"\n  > {\n  url?: string | null;\n  webSocketFactory?: AthenaChatWebSocketFactory | null;\n  wsUrl?: string | null;\n}\n\nexport interface AthenaStorageConfig\n  extends Omit<AthenaStorageClientConfig, \"baseUrl\" | \"directUpload\"> {\n  directUpload?: AthenaStorageDirectUploadConfig;\n  /** Key prefix for R2 object ops (trailing slash normalized). */\n  prefix?: string | null;\n  /**\n   * Cloudflare R2 binding (e.g. `env.FILES`).\n   * Drop-in local object I/O (`putObject` / `getObject` / `listObjects` / `deleteObject`).\n   * When set with a remote storage URL (or unified root), HTTP storage.* ports are\n   * preserved and composed with L3a helpers. R2-only keeps L3a + clear unsupported.\n   */\n  r2?: R2BucketLike | null;\n  url?: string | null;\n}\n\nexport interface AthenaBillingConfig\n  extends Omit<\n    AthenaBillingClientConfig,\n    \"baseUrl\" | \"apiKey\" | \"client\" | \"fetchImpl\"\n  > {\n  /** Optional override; defaults to the unified/root or db Athena URL. */\n  url?: string | null;\n}\n\nexport type { AthenaDiagnosticsMode };\n\nexport interface AthenaClientConfig<\n  TModels extends AthenaClientModelsInput | undefined = undefined,\n> {\n  auth?: AthenaAuthConfig;\n  backend?: BackendConfig | BackendType;\n  billing?: AthenaBillingConfig;\n  /** Optional capability bag; defaults from gateway vs `db.d1` / `storage.r2` bindings. */\n  capabilities?: AthenaClientCapabilities;\n  chat?: AthenaChatConfig;\n  client?: string | null;\n  context?: AthenaRequestContext | AthenaRequestContextProvider;\n  /**\n   * Top-level D1 alias for `db.d1` (Worker DX). Prefer nested `db: { d1 }` in shared code.\n   * All paths still materialize through {@link createClient}.\n   */\n  d1?: D1DatabaseLike | null;\n  db?: AthenaDbConfig;\n  debugAst?: boolean;\n  /**\n   * Query diagnostics mode. Prefer `'auto'` in Next/OpenNext apps so production\n   * builds stay quiet without app-local OPENNEXT_BUILD branching.\n   * Per-flag `debugAst` / `findManyAst` / `traceQueries` always win when set.\n   */\n  diagnostics?: AthenaDiagnosticsMode;\n  env?: Record<string, string | undefined>;\n  findManyAst?: boolean;\n  /**\n   * Optional prebuilt gateway transport (tests / advanced injection).\n   * Prefer `db.d1` for Cloudflare edge-local — `createClient` wires D1 automatically.\n   * @see ADR 0015\n   */\n  gatewayTransport?: AthenaGatewayClient;\n  headers?: Record<string, string>;\n  key?: string | null;\n  /**\n   * Edge vs gateway selection when both bindings and HTTP URLs may be present.\n   * Default `auto` (env `ATHENA_EXECUTION_MODE`). Prefer nested service fields for backends.\n   */\n  mode?: AthenaExecutionMode | string | null;\n  models?: TModels;\n  /**\n   * When `mode` is `auto` and both D1 and a gateway URL exist, which wins.\n   * Default `edge` (env `ATHENA_EXECUTION_PREFER`).\n   */\n  prefer?: AthenaExecutionPrefer | string | null;\n  /**\n   * Top-level R2 alias for `storage.r2`. Prefer nested `storage: { r2 }` in shared code.\n   */\n  r2?: R2BucketLike | null;\n  retryReads?: boolean;\n  /** Top-level alias for `db.sessionMode` when using `d1`. */\n  sessionMode?: string | null;\n  storage?: AthenaStorageConfig;\n  /** Top-level alias for `storage.prefix` when using `r2`. */\n  storagePrefix?: string | null;\n  traceQueries?: boolean | AthenaQueryTraceOptions;\n  url?: string | null;\n}\n\n/** Config with a required R2 binding — narrows `client.storage` to L3a object methods. */\nexport type AthenaClientConfigWithR2<\n  TModels extends AthenaClientModelsInput | undefined = undefined,\n> = AthenaClientConfig<TModels> & {\n  storage: AthenaStorageConfig & { r2: R2BucketLike };\n};\n\n/** Client with L3a R2 object methods typed on `storage`. */\nexport type AthenaClientWithR2Storage<\n  TModels extends AthenaClientModelsInput | undefined = undefined,\n> = Omit<AthenaClient<TModels>, \"storage\" | \"withContext\"> & {\n  readonly storage: CloudflareR2StorageModule;\n  withContext: (\n    context: AthenaRequestContext\n  ) => AthenaClientWithR2Storage<TModels>;\n};\n\ntype V3TableBuilder<\n  Row,\n  Insert = Partial<Row>,\n  Update = Partial<Insert>,\n  Result = unknown,\n> = TableQueryBuilder<Row, Insert, Update, Result>;\n\nexport interface AthenaClient<\n  TModels extends AthenaClientModelsInput | undefined =\n    | AthenaClientModelsInput\n    | undefined,\n> {\n  readonly admin: import(\"./client.ts\").AthenaClientAdminModule;\n  readonly auth: AthenaAuthBindings;\n  readonly billing: AthenaBillingModule;\n  /** Runtime feature detection for gateway vs edge-local backends (ADR 0015). */\n  readonly capabilities: AthenaClientCapabilities;\n  readonly chat: AthenaChatModule;\n  readonly db: AthenaDbModule<ResolvedModels<TModels>>;\n  from<TModel extends AthenaModelTarget>(\n    model: TModel\n  ): V3TableBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>>;\n  from<TTableName extends AthenaClientTableName<ResolvedModels<TModels>>>(\n    table: TTableName,\n    options?: AthenaFromOptions\n  ): V3TableBuilder<\n    RowOf<AthenaClientModelForTableName<ResolvedModels<TModels>, TTableName>>,\n    InsertOf<\n      AthenaClientModelForTableName<ResolvedModels<TModels>, TTableName>\n    >,\n    UpdateOf<AthenaClientModelForTableName<ResolvedModels<TModels>, TTableName>>\n  >;\n  from<\n    Row = Record<string, unknown>,\n    Insert = Partial<Row>,\n    Update = Partial<Insert>,\n  >(\n    table: string,\n    options?: AthenaFromOptions\n  ): V3TableBuilder<Row, Insert, Update>;\n  health: () => Promise<import(\"./release/identity.ts\").AthenaNormalizedHealth>;\n  /**\n   * Executes raw SQL through Athena's compatibility query surface.\n   *\n   * @deprecated Prefer `admin.query()` with explicit `operation` and `expectedShape`.\n   */\n  query: <Row = unknown>(\n    query: string,\n    options?: AthenaGatewayCallOptions\n  ) => Promise<AthenaResult<Row[]>>;\n  request: <T = unknown>(\n    options: AthenaRequestOptions\n  ) => Promise<AthenaRequestResponse<T>>;\n  rpc: <Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\n    fn: string,\n    args?: Args,\n    options?: AthenaRpcCallOptions\n  ) => RpcQueryBuilder<Row>;\n  readonly storage: AthenaStorageModule;\n  readonly system: import(\"./client.ts\").AthenaClientSystemModule;\n  verifyConnection: (\n    options?: AthenaGatewayConnectionOptions\n  ) => Promise<AthenaGatewayConnectionResult>;\n  withContext: (context: AthenaRequestContext) => AthenaClient<TModels>;\n}\n\ninterface ResolvedServiceUrls {\n  auth?: string;\n  billing?: string;\n  chat?: string;\n  chatWs?: string;\n  db?: string;\n  storage?: string;\n}\n\ninterface AthenaClientCoreBase<\n  TModels extends AthenaClientModelsInput | undefined,\n> {\n  readonly client?: string;\n  readonly config: AthenaClientConfig<TModels>;\n  readonly key: string;\n  readonly urls: ResolvedServiceUrls;\n}\n\ninterface AthenaClientCore<TModels extends AthenaClientModelsInput | undefined>\n  extends AthenaClientCoreBase<TModels> {\n  readonly internalCore: InternalAthenaClientCore<ResolvedModels<TModels>>;\n}\n\nfunction readFirstEnv(\n  env: Record<string, string | undefined> | undefined,\n  keys: readonly string[]\n): string | undefined {\n  for (const key of keys) {\n    const value = env?.[key]?.trim();\n    if (value) {\n      return value;\n    }\n  }\n  return undefined;\n}\n\n/**\n * First env value that looks like an absolute http(s) URL.\n * Skips unexpanded placeholders (e.g. `${ATHENA_URL}`) and other non-URLs so\n * ambient shell pollution cannot crash createClient during service resolution.\n */\nfunction readFirstEnvHttpUrl(\n  env: Record<string, string | undefined> | undefined,\n  keys: readonly string[]\n): string | undefined {\n  for (const key of keys) {\n    const value = env?.[key]?.trim();\n    if (value && isAbsoluteHttpUrl(value)) {\n      return value;\n    }\n  }\n  return undefined;\n}\n\nfunction normalizeOptional(\n  value: string | null | undefined\n): string | undefined {\n  const normalized = value?.trim();\n  return normalized || undefined;\n}\n\nfunction isAbsoluteHttpUrl(value: string): boolean {\n  try {\n    const url = new URL(value);\n    return url.protocol === \"http:\" || url.protocol === \"https:\";\n  } catch {\n    return false;\n  }\n}\n\nfunction appendPath(baseUrl: string, path: string): string {\n  return `${baseUrl.replace(/\\/+$/, \"\")}/${path.replace(/^\\/+/, \"\")}`;\n}\n\nfunction toWebSocketUrl(baseUrl: string): string | undefined {\n  if (!isAbsoluteHttpUrl(baseUrl)) {\n    return undefined;\n  }\n  const url = new URL(baseUrl);\n  url.protocol = url.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n  url.pathname = `${url.pathname.replace(/\\/+$/, \"\")}/wss/gateway`;\n  url.search = \"\";\n  url.hash = \"\";\n  return url.toString();\n}\n\nfunction hasChatSessionCredentials(chat?: AthenaChatConfig): boolean {\n  return Boolean(\n    normalizeOptional(chat?.bearerToken) ??\n      normalizeOptional(chat?.cookie) ??\n      normalizeOptional(chat?.sessionToken)\n  );\n}\n\nfunction resolveCore<TModels extends AthenaClientModelsInput | undefined>(\n  config: AthenaClientConfig<TModels>\n): AthenaClientCore<TModels> {\n  const env = config.env;\n  const explicitRoot = normalizeOptional(config.url);\n  const envRoot = readFirstEnvHttpUrl(env, ATHENA_ENV_URL_KEYS);\n  const root =\n    explicitRoot && isAbsoluteHttpUrl(explicitRoot)\n      ? explicitRoot\n      : explicitRoot\n        ? undefined\n        : envRoot;\n  const explicitRootWinsOverEnvServices = Boolean(\n    root && explicitRoot && isAbsoluteHttpUrl(explicitRoot)\n  );\n  const resolveService = (\n    explicit: string | null | undefined,\n    envKeys: readonly string[],\n    path: string\n  ): string | undefined =>\n    normalizeOptional(explicit) ??\n    (explicitRootWinsOverEnvServices && root\n      ? appendPath(root, path)\n      : undefined) ??\n    readFirstEnvHttpUrl(env, envKeys) ??\n    (root ? appendPath(root, path) : undefined);\n\n  const dbUrl = resolveService(config.db?.url, ATHENA_ENV_DB_URL_KEYS, \"db\");\n  const urls: ResolvedServiceUrls = {\n    auth: resolveService(config.auth?.url, ENV_AUTH_URL_KEYS, \"auth\"),\n    // Billing lives on the main Athena HTTP surface (same host as gateway/db).\n    billing:\n      normalizeOptional(config.billing?.url) ?? dbUrl ?? root ?? undefined,\n    chat: resolveService(config.chat?.url, ENV_CHAT_URL_KEYS, \"chat\"),\n    chatWs:\n      normalizeOptional(config.chat?.wsUrl) ??\n      (explicitRootWinsOverEnvServices && root\n        ? toWebSocketUrl(root)\n        : undefined) ??\n      readFirstEnvHttpUrl(env, ENV_CHAT_WS_URL_KEYS) ??\n      (root ? toWebSocketUrl(root) : undefined),\n    db: dbUrl,\n    storage: resolveService(\n      config.storage?.url,\n      ENV_STORAGE_URL_KEYS,\n      \"storage\"\n    ),\n  };\n\n  if (!(urls.db || urls.auth || urls.chat || urls.storage || urls.billing)) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_NO_SERVICE_CONFIGURED\",\n      \"Athena requires a unified URL or at least one configured service URL.\",\n      \"db\"\n    );\n  }\n\n  const key =\n    normalizeOptional(config.key) ?? readFirstEnv(env, ATHENA_ENV_API_KEY_KEYS);\n  if (!key && !hasChatSessionCredentials(config.chat)) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_API_KEY_REQUIRED\",\n      \"Athena API key is required unless chat session credentials are configured.\"\n    );\n  }\n\n  const base: AthenaClientCoreBase<TModels> = {\n    client:\n      normalizeOptional(config.client) ??\n      readFirstEnv(env, ATHENA_ENV_CLIENT_KEYS),\n    config,\n    key: key ?? \"\",\n    urls,\n  };\n  return {\n    ...base,\n    internalCore: createInternalClientCore(createInternalConfig(base)),\n  };\n}\n\nasync function resolveConfiguredContext<\n  TModels extends AthenaClientModelsInput | undefined,\n>(\n  core: AthenaClientCore<TModels>,\n  viewContext: AthenaRequestContext | undefined\n): Promise<AthenaRequestContext | undefined> {\n  const configured = core.config.context;\n  const base =\n    typeof configured === \"function\" ? await configured() : configured;\n  return mergeAthenaRequestContexts(base, viewContext);\n}\n\nfunction createInternalConfig<\n  TModels extends AthenaClientModelsInput | undefined,\n>(core: AthenaClientCoreBase<TModels>) {\n  const { config, urls } = core;\n  const { url: _authUrl, ...authOptions } = config.auth ?? {};\n  const {\n    url: _storageUrl,\n    directUpload,\n    r2: _r2,\n    prefix: _r2Prefix,\n    ...storageOptions\n  } = config.storage ?? {};\n  void _authUrl;\n  void _storageUrl;\n  void _r2;\n  void _r2Prefix;\n\n  const diagnostics = resolveAthenaClientDiagnostics({\n    debugAst: config.debugAst,\n    diagnostics: config.diagnostics,\n    env: config.env,\n    findManyAst: config.findManyAst,\n    traceQueries: config.traceQueries,\n  });\n\n  return {\n    apiKey: core.key,\n    auth: authOptions,\n    authUrl: urls.auth,\n    backend:\n      typeof config.backend === \"string\"\n        ? { type: config.backend }\n        : config.backend,\n    baseUrl: urls.db ?? MISSING_DB_SENTINEL,\n    behavior: {\n      debugAst: diagnostics.debugAst,\n      findManyAst: diagnostics.findManyAst,\n      retryReads: config.retryReads,\n      traceQueries: diagnostics.traceQueries,\n    },\n    chat: config.chat,\n    chatUrl: urls.chat,\n    chatWsUrl: urls.chatWs,\n    client: core.client,\n    gatewayTransport: config.gatewayTransport,\n    headers: config.headers,\n    jdbcUrl: config.db?.jdbcUrl,\n    models: config.models as ResolvedModels<TModels>,\n    pgUri: config.db?.pgUri,\n    storage: {\n      ...storageOptions,\n      ...(directUpload ? { directUpload } : {}),\n    },\n    storageUrl: urls.storage,\n  };\n}\n\nfunction serviceGuard(urls: ResolvedServiceUrls, service: AthenaService): void {\n  if (!urls[service]) {\n    throw new AthenaConfigurationError(\n      \"ATHENA_SERVICE_NOT_CONFIGURED\",\n      `Athena ${service} is not configured.`,\n      service\n    );\n  }\n}\n\nfunction createUnavailableNamespace(\n  service: AthenaService,\n  urls: ResolvedServiceUrls,\n  path: readonly PropertyKey[] = []\n): unknown {\n  return new Proxy(() => undefined, {\n    apply() {\n      serviceGuard(urls, service);\n      throw new TypeError(\n        `Athena service property ${path.map(String).join(\".\")} is not callable.`\n      );\n    },\n    get(_target, property) {\n      return createUnavailableNamespace(service, urls, [...path, property]);\n    },\n  });\n}\n\nfunction isD1Binding(value: unknown): value is D1DatabaseLike {\n  return Boolean(\n    value &&\n      typeof value === \"object\" &&\n      typeof (value as D1DatabaseLike).prepare === \"function\"\n  );\n}\n\nfunction isR2Binding(value: unknown): value is R2BucketLike {\n  return Boolean(\n    value &&\n      typeof value === \"object\" &&\n      typeof (value as R2BucketLike).put === \"function\" &&\n      typeof (value as R2BucketLike).get === \"function\"\n  );\n}\n\n/**\n * Fold top-level Worker aliases into nested service config, then resolve\n * edge vs gateway so every path materializes through {@link createClient}.\n */\nfunction foldBindingAliases<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n  const d1 = config.db?.d1 ?? config.d1;\n  const r2 = config.storage?.r2 ?? config.r2;\n  const sessionMode = config.db?.sessionMode ?? config.sessionMode;\n  const prefix = config.storage?.prefix ?? config.storagePrefix;\n\n  let next: AthenaClientConfig<TModels> = { ...config };\n  if (d1 !== undefined || sessionMode !== undefined) {\n    next = {\n      ...next,\n      db: {\n        ...next.db,\n        ...(d1 === undefined ? {} : { d1 }),\n        ...(sessionMode === undefined ? {} : { sessionMode }),\n      },\n    };\n  }\n  if (r2 !== undefined || prefix !== undefined) {\n    next = {\n      ...next,\n      storage: {\n        ...next.storage,\n        ...(r2 === undefined ? {} : { r2 }),\n        ...(prefix === undefined ? {} : { prefix }),\n      },\n    };\n  }\n  // Strip top-level aliases so they are not mistaken for service modules later.\n  const {\n    d1: _d1,\n    r2: _r2,\n    storagePrefix: _storagePrefix,\n    sessionMode: _sessionMode,\n    ...rest\n  } = next;\n  void _d1;\n  void _r2;\n  void _storagePrefix;\n  void _sessionMode;\n  return rest;\n}\n\n/**\n * When execution resolves to gateway, drop D1 so HTTP db routing wins.\n * R2 may still attach for hybrid local objects + remote gateway DB.\n */\nfunction applyExecutionMode<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n  const d1 = config.db?.d1;\n  const hasD1 = isD1Binding(d1);\n  const hasUrl = Boolean(\n    normalizeOptional(config.url) ??\n      normalizeOptional(config.db?.url) ??\n      (config.env\n        ? (normalizeOptional(config.env.ATHENA_URL) ??\n          normalizeOptional(config.env.NEXT_PUBLIC_ATHENA_URL))\n        : undefined)\n  );\n\n  // Only resolve when there is something to choose between (or explicit mode).\n  // Use != null so omitted mode/prefer (undefined) are not treated as hints —\n  // `undefined !== null` is true and previously forced every createClient\n  // without D1 through resolveAthenaExecutionMode, breaking storage-only clients.\n  const hasModeHint =\n    config.mode != null ||\n    config.prefer != null ||\n    Boolean(config.env?.ATHENA_EXECUTION_MODE) ||\n    Boolean(config.env?.ATHENA_EXECUTION_PREFER);\n\n  if (!(hasD1 || hasModeHint)) {\n    return config;\n  }\n\n  // Pure edge (only d1, no url) or pure gateway without mode hints: keep default behavior.\n  if (hasD1 && !hasUrl && !hasModeHint) {\n    return config;\n  }\n\n  let resolved: AthenaExecutionMode | \"edge\" | \"gateway\";\n  try {\n    resolved = resolveAthenaExecutionMode({\n      d1: hasD1 ? d1 : null,\n      env: config.env,\n      mode: config.mode,\n      prefer: config.prefer,\n      url: config.url ?? config.db?.url,\n    });\n  } catch (error) {\n    // No mode/prefer and incomplete config: fall through to default materialize.\n    if (!hasModeHint) {\n      return config;\n    }\n    throw error;\n  }\n\n  if (resolved === \"gateway\" && hasD1) {\n    const { d1: _drop, sessionMode: _sm, ...dbRest } = config.db ?? {};\n    void _drop;\n    void _sm;\n    return {\n      ...config,\n      db: Object.keys(dbRest).length > 0 ? dbRest : undefined,\n      gatewayTransport: undefined,\n    };\n  }\n\n  return config;\n}\n\n/**\n * Unified remote root (top-level `url` or env ATHENA_URL / NEXT_PUBLIC_ATHENA_URL).\n * Used for billing hybrid routing and default service derivation.\n */\nfunction resolveUnifiedRemoteRoot<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): string | undefined {\n  return (\n    normalizeOptional(config.url) ??\n    readFirstEnv(config.env, ATHENA_ENV_URL_KEYS)\n  );\n}\n\nfunction isEdgeLocalSentinelUrl(url: string | undefined): boolean {\n  if (!url) {\n    return false;\n  }\n  return (\n    url === CLOUDFLARE_EDGE_BASE_URL ||\n    url.startsWith(\"https://athena.local/\") ||\n    url.startsWith(\"http://athena.local/\")\n  );\n}\n\n/**\n * True when a non-edge DB HTTP gateway is configured (nested `db.url` or env DB/gateway URL).\n * Important for hybrid `db: { d1, url: remoteGateway }` where top-level `url` may be unset.\n */\nfunction hasRemoteDbGatewayUrl<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n  const dbUrl =\n    normalizeOptional(config.db?.url) ??\n    readFirstEnv(config.env, ATHENA_ENV_DB_URL_KEYS);\n  return Boolean(dbUrl && !isEdgeLocalSentinelUrl(dbUrl));\n}\n\n/**\n * True when any remote HTTP service is configured (explicit or via env).\n * Used to decide whether the edge-local API-key sentinel is safe to inject.\n */\nfunction hasRemoteHttpServices<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n  return Boolean(\n    resolveUnifiedRemoteRoot(config) ||\n      hasRemoteDbGatewayUrl(config) ||\n      normalizeOptional(config.auth?.url) ||\n      readFirstEnv(config.env, ENV_AUTH_URL_KEYS) ||\n      normalizeOptional(config.storage?.url) ||\n      readFirstEnv(config.env, ENV_STORAGE_URL_KEYS) ||\n      normalizeOptional(config.chat?.url) ||\n      readFirstEnv(config.env, ENV_CHAT_URL_KEYS) ||\n      normalizeOptional(config.billing?.url)\n  );\n}\n\n/**\n * True when HTTP object storage is configured (explicit `storage.url`, env, or\n * a unified remote root that resolveCore can turn into `/storage`).\n */\nfunction hasRemoteHttpStorage<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n  return Boolean(\n    normalizeOptional(config.storage?.url) ||\n      readFirstEnv(config.env, ENV_STORAGE_URL_KEYS) ||\n      resolveUnifiedRemoteRoot(config)\n  );\n}\n\nfunction hasRemoteAuthService<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): boolean {\n  return Boolean(\n    normalizeOptional(config.auth?.url) ||\n      readFirstEnv(config.env, ENV_AUTH_URL_KEYS) ||\n      resolveUnifiedRemoteRoot(config)\n  );\n}\n\n/**\n * Wire Cloudflare D1/R2 bindings into the shared `createClient` config spine.\n * Drop-in: `createClient({ db: { d1 }, storage: { r2 } })` uses the same fluent\n * DB/storage call sites as gateway HTTP mode.\n */\nfunction materializeEdgeBindings<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n  const d1 = config.db?.d1;\n  const r2 = config.storage?.r2;\n  const hasD1 = isD1Binding(d1);\n  const hasR2 = isR2Binding(r2);\n  if (!(hasD1 || hasR2)) {\n    return config;\n  }\n\n  if (hasD1 && d1 && typeof d1.prepare !== \"function\") {\n    throw new AthenaConfigurationError(\n      \"ATHENA_NO_SERVICE_CONFIGURED\",\n      \"db.d1 must be a D1 binding with prepare().\",\n      \"db\"\n    );\n  }\n\n  const remoteRoot = resolveUnifiedRemoteRoot(config);\n  const remoteServices = hasRemoteHttpServices(config);\n  const remoteStorage = hasRemoteHttpStorage(config);\n  const remoteAuth = hasRemoteAuthService(config);\n  const next: AthenaClientConfig<TModels> = { ...config };\n\n  if (hasD1 && d1) {\n    if (!config.gatewayTransport) {\n      next.gatewayTransport = createCloudflareD1GatewayTransport({\n        d1,\n        defaultSessionMode: config.db?.sessionMode,\n      });\n    }\n    // Local D1 sentinel — not a real HTTP endpoint. Hybrid services must not inherit this for billing.\n    // Do not plant the sentinel when env (or explicit) remote DB gateway URLs exist:\n    // resolveCore prefers explicit `db.url` over ATHENA_DB_URL / ATHENA_GATEWAY_URL, so a\n    // sentinel would shadow those env gateways after remote key selection already succeeded.\n    const explicitDbUrl = normalizeOptional(config.db?.url);\n    const remoteDbGateway = hasRemoteDbGatewayUrl(config);\n    next.db = {\n      ...config.db,\n      d1,\n      url:\n        explicitDbUrl ??\n        (remoteDbGateway ? undefined : CLOUDFLARE_EDGE_BASE_URL),\n    };\n    // Pure edge-local needs a placeholder key for resolveCore. Hybrid clients\n    // (top-level url, env ATHENA_URL, or any explicit/env remote service URL)\n    // must not pre-fill the sentinel — leave key unset so resolveCore can use\n    // ATHENA_API_KEY / ATHENA_GATEWAY_API_KEY (etc.) from the env object.\n    const explicitKey = normalizeOptional(config.key);\n    if (explicitKey) {\n      next.key = explicitKey;\n    } else if (remoteServices) {\n      // Hybrid without top-level key: strip accidental empty key so env keys apply.\n      next.key = undefined;\n    } else {\n      next.key = CLOUDFLARE_EDGE_API_KEY;\n    }\n    if (remoteRoot) {\n      next.billing = {\n        ...(config.billing ?? {}),\n        url: normalizeOptional(config.billing?.url) ?? remoteRoot,\n      };\n    }\n    if (!config.capabilities) {\n      next.capabilities = createCloudflareEdgeCapabilities({\n        authRemote: remoteAuth,\n        findManyAst: false,\n        hasR2,\n        // Explicit storage.url / env storage URL / unified remote root all count.\n        hasRemoteStorage: remoteStorage,\n      });\n    }\n  } else if (hasR2 && r2) {\n    // R2 without D1: storage-only edge, or gateway HTTP DB + local R2 objects.\n    // ADR 0016: presence of storage.r2 alone is sufficient to configure object storage.\n    if (\n      !(\n        remoteRoot ||\n        normalizeOptional(config.db?.url) ||\n        normalizeOptional(config.storage?.url) ||\n        readFirstEnv(config.env, ENV_STORAGE_URL_KEYS)\n      )\n    ) {\n      next.storage = {\n        ...config.storage,\n        r2,\n        // Local sentinel so resolveCore accepts a storage-only binding client.\n        url: CLOUDFLARE_EDGE_BASE_URL,\n      };\n      if (!remoteServices) {\n        next.key = normalizeOptional(config.key) ?? CLOUDFLARE_EDGE_API_KEY;\n      } else if (normalizeOptional(config.key)) {\n        next.key = normalizeOptional(config.key);\n      } else {\n        next.key = undefined;\n      }\n    }\n    if (!config.capabilities) {\n      if (\n        remoteRoot ||\n        normalizeOptional(config.db?.url) ||\n        readFirstEnv(config.env, ATHENA_ENV_DB_URL_KEYS)\n      ) {\n        // Gateway (or other remote) DB + local R2: keep gateway mode.\n        // Catalogs/backups only when remote HTTP storage is also wired.\n        const base = createGatewayCapabilities({\n          authRemote: remoteAuth,\n          storageBackups: remoteStorage,\n          storageCatalogs: remoteStorage,\n          storageConfigured: remoteStorage || hasR2,\n        });\n        next.capabilities = {\n          ...base,\n          storage: {\n            ...base.storage,\n            local: true,\n            objects: true,\n          },\n        };\n      } else {\n        // Storage-only edge client — no DB binding or remote root.\n        // Explicit storage.url / env still enables HTTP catalogs/backups alongside R2.\n        next.capabilities = {\n          auth: {\n            remote: remoteAuth,\n          },\n          db: {\n            engine: \"unknown\",\n            layers: {\n              findManyAst: false,\n              flatCrud: false,\n              query: false,\n              relations: false,\n              rpc: false,\n            },\n            local: false,\n          },\n          mode: \"cloudflare-edge\",\n          storage: {\n            backups: remoteStorage,\n            catalogs: remoteStorage,\n            local: true,\n            objects: true,\n          },\n        };\n      }\n    }\n  }\n\n  return next;\n}\n\n/** Single createClient normalization pipeline: aliases → mode → edge materialize. */\nfunction normalizeCreateClientConfig<\n  TModels extends AthenaClientModelsInput | undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClientConfig<TModels> {\n  return materializeEdgeBindings(\n    applyExecutionMode(foldBindingAliases(config))\n  );\n}\n\nfunction createClientView<TModels extends AthenaClientModelsInput | undefined>(\n  core: AthenaClientCore<TModels>,\n  viewContext?: AthenaRequestContext\n): AthenaClient<TModels> {\n  // Bypass generic expansion during dts emit (TS2589).\n  const createView = createInternalClientView as unknown as (\n    internalCore: AthenaClientCore<TModels>[\"internalCore\"],\n    resolveContext: () => ReturnType<typeof resolveConfiguredContext<TModels>>\n  ) => InternalAthenaClient<ResolvedModels<TModels>>;\n  const resolved = createView(core.internalCore, () =>\n    resolveConfiguredContext(core, viewContext)\n  );\n  const requireDb = (): void => serviceGuard(core.urls, \"db\");\n\n  const { url: _billingUrl, ...billingOptions } = core.config.billing ?? {};\n  void _billingUrl;\n  const billingModule: AthenaBillingModule | unknown = core.urls.billing\n    ? createBillingModule({\n        apiKey: core.key,\n        baseUrl: core.urls.billing,\n        client: core.client,\n        headers: {\n          ...(core.config.headers ?? {}),\n          ...(billingOptions.headers ?? {}),\n        },\n        ...billingOptions,\n      })\n    : createUnavailableNamespace(\"billing\", core.urls);\n\n  const r2 = core.config.storage?.r2;\n  const hasR2Binding = isR2Binding(r2);\n  // Edge-local sentinel URLs are not real HTTP storage ports.\n  const hasHttpStorage = Boolean(\n    core.urls.storage && !isEdgeLocalSentinelUrl(core.urls.storage)\n  );\n\n  const capabilities =\n    core.config.capabilities ??\n    createGatewayCapabilities({\n      authRemote: Boolean(core.urls.auth),\n      // Match callable surface: catalogs/backups need real remote HTTP storage.\n      storageBackups: hasHttpStorage,\n      storageCatalogs: hasHttpStorage,\n      storageConfigured: hasHttpStorage || hasR2Binding,\n    });\n\n  // Hybrid: preserve HTTP storage.* (file/catalog/multipart/backup) and attach L3a R2.\n  // R2-only: L3a helpers + clear unsupported for managed ports.\n  // HTTP-only: resolved.storage. Neither: unavailable namespace.\n  const storageModule:\n    | AthenaStorageModule\n    | CloudflareR2StorageModule\n    | unknown =\n    hasR2Binding && hasHttpStorage\n      ? composeHttpAndR2Storage(resolved.storage as AthenaStorageModule, {\n          prefix: core.config.storage?.prefix ?? undefined,\n          r2,\n        })\n      : hasR2Binding\n        ? createCloudflareR2StorageModule({\n            prefix: core.config.storage?.prefix ?? undefined,\n            r2,\n          })\n        : core.urls.storage\n          ? resolved.storage\n          : createUnavailableNamespace(\"storage\", core.urls);\n\n  const client: AthenaClient<TModels> = {\n    admin: {\n      query: ((...args: unknown[]) => {\n        requireDb();\n        return Reflect.apply(resolved.admin.query, resolved.admin, args);\n      }) as AthenaClient<TModels>[\"admin\"][\"query\"],\n    },\n    auth: (core.urls.auth\n      ? resolved.auth\n      : createUnavailableNamespace(\"auth\", core.urls)) as AthenaAuthBindings,\n    billing: billingModule as AthenaBillingModule,\n    capabilities,\n    chat: (core.urls.chat\n      ? resolved.chat\n      : createUnavailableNamespace(\"chat\", core.urls)) as AthenaChatModule,\n    db: (core.urls.db\n      ? resolved.db\n      : createUnavailableNamespace(\n          \"db\",\n          core.urls\n        )) as AthenaClient<TModels>[\"db\"],\n    from: ((...args: unknown[]) => {\n      requireDb();\n      return Reflect.apply(resolved.from, resolved, args);\n    }) as AthenaClient<TModels>[\"from\"],\n    health: () => {\n      requireDb();\n      return resolved.health();\n    },\n    query<Row = unknown>(query: string, options?: AthenaGatewayCallOptions) {\n      requireDb();\n      return resolved.query<Row>(query, options);\n    },\n    request<T = unknown>(options: AthenaRequestOptions) {\n      // Absolute URLs do not need a configured service base URL.\n      if (!options.url?.trim()) {\n        serviceGuard(core.urls, options.service ?? \"db\");\n      }\n      return resolved.request<T>(options);\n    },\n    rpc: ((...args: unknown[]) => {\n      requireDb();\n      return Reflect.apply(resolved.rpc, resolved, args);\n    }) as AthenaClient<TModels>[\"rpc\"],\n    storage: storageModule as AthenaStorageModule,\n    system: {\n      compatibility: () => {\n        requireDb();\n        return resolved.system.compatibility();\n      },\n      release: () => {\n        requireDb();\n        return resolved.system.release();\n      },\n    },\n    verifyConnection(options?: AthenaGatewayConnectionOptions) {\n      requireDb();\n      return resolved.verifyConnection(options);\n    },\n    withContext(context: AthenaRequestContext): AthenaClient<TModels> {\n      warnIfEmptyRequestContext(context);\n      // Recursive view construction hits TS2589 under dts emit.\n      const next = (\n        createClientView as (c: unknown, ctx?: AthenaRequestContext) => unknown\n      )(core, mergeAthenaRequestContexts(viewContext, context));\n      return next as AthenaClient<TModels>;\n    },\n  } as AthenaClient<TModels>;\n\n  return Object.freeze(client);\n}\n\n/**\n * True when a context object carries no identity, auth, cache, or header signal.\n * Used to catch the common footgun `withContext({})` in development.\n */\nexport function isEmptyAthenaRequestContext(\n  context: AthenaRequestContext | undefined | null\n): boolean {\n  if (!context) {\n    return true;\n  }\n  const hasHeaders =\n    context.headers !== undefined &&\n    context.headers !== null &&\n    Object.keys(context.headers).length > 0;\n  // Treat omitted fields (undefined) the same as explicit null so `{}` is empty.\n  return (\n    (context.userId === undefined || context.userId === null) &&\n    (context.organizationId === undefined || context.organizationId === null) &&\n    !normalizeOptionalContextString(context.cookie) &&\n    !normalizeOptionalContextString(context.bearerToken) &&\n    !normalizeOptionalContextString(context.sessionToken) &&\n    !context.forceNoCache &&\n    !hasHeaders\n  );\n}\n\nfunction normalizeOptionalContextString(\n  value: string | null | undefined\n): string | undefined {\n  const trimmed = value?.trim();\n  return trimmed || undefined;\n}\n\nfunction warnIfEmptyRequestContext(context: AthenaRequestContext): void {\n  if (!isEmptyAthenaRequestContext(context)) {\n    return undefined;\n  }\n  // globalThis.process avoids DTS failures without @types/node (Workers CI).\n  const nodeEnv = (globalThis as { process?: { env?: { NODE_ENV?: string } } })\n    .process?.env?.NODE_ENV;\n  if (nodeEnv === \"production\") {\n    return undefined;\n  }\n  console.warn(\n    \"[athena] withContext({}) has no userId, organizationId, cookie, bearerToken, sessionToken, headers, or forceNoCache. \" +\n      \"Gateway scope headers will not change. Pass identity fields, or use createAthenaServerClient({ session, scope }).\"\n  );\n}\n\n/**\n * Materialize an Athena client (single public constructor).\n *\n * All backends and modes go through this API:\n * - Gateway HTTP: `createClient({ url, key })`\n * - Edge D1/R2: `createClient({ db: { d1 }, storage: { r2 } })` or top-level `{ d1, r2 }`\n * - Hybrid: edge D1 + `url` for remote auth/billing\n * - Switch: `mode: 'auto' | 'edge' | 'gateway'` and `prefer` when both D1 and URL exist\n *\n * Fluent `from` / `query` / `storage.*` call sites are identical across modes (ADR 0001 / 0015 / 0016).\n * `createCloudflareClient` / `createAthenaRuntime` are thin façades that only map config into this function.\n */\nexport function createClient<\n  const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n  config:\n    | (AthenaClientConfig<TModels> & { r2: R2BucketLike })\n    | AthenaClientConfigWithR2<TModels>\n): AthenaClientWithR2Storage<TModels>;\nexport function createClient<\n  const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClient<TModels>;\nexport function createClient<\n  const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n  config: AthenaClientConfig<TModels>\n): AthenaClient<TModels> | AthenaClientWithR2Storage<TModels> {\n  // Nuclear casts: createClientView/resolveCore generics overflow TS depth\n  // during declaration emit (TS2589). Keep the public overload return types;\n  // never re-instantiate AthenaClient<TModels> in the body expression tree.\n  const pipeline = normalizeCreateClientConfig as (c: unknown) => unknown;\n  const coreOf = resolveCore as (c: unknown) => unknown;\n  const viewOf = createClientView as (c: unknown) => unknown;\n  const client: unknown = viewOf(coreOf(pipeline(config)));\n  return client as AthenaClientWithR2Storage<TModels>;\n}\n","import { createClient } from \"../v3-client.ts\";\nimport type {\n  GeneratorProviderConfig,\n  PostgresDirectProviderConfig,\n  PostgresGatewayProviderConfig,\n} from \"./types.ts\";\n\n/**\n * SQL that lists non-system PostgreSQL schemas that contain base tables.\n * Used by both direct (`pg`) and gateway (`/gateway/query`) discovery paths.\n */\nexport const DISCOVER_POSTGRES_SCHEMAS_SQL = `\n  SELECT DISTINCT n.nspname AS schema_name\n  FROM pg_namespace n\n  JOIN pg_class c ON c.relnamespace = n.oid\n  WHERE c.relkind IN ('r', 'p')\n    AND n.nspname NOT IN ('pg_catalog', 'information_schema')\n    AND n.nspname NOT LIKE 'pg_toast%'\n    AND n.nspname NOT LIKE 'pg_temp_%'\n    AND n.nspname NOT LIKE 'pg_toast_temp_%'\n  ORDER BY n.nspname;\n`.trim();\n\nconst SYSTEM_SCHEMA_PREFIXES = [\"pg_\"] as const;\nconst SYSTEM_SCHEMAS = new Set([\"pg_catalog\", \"information_schema\"]);\n\ninterface SchemaNameRow {\n  nspname?: unknown;\n  schema_name?: unknown;\n  schemaName?: unknown;\n}\n\n/**\n * Filters and normalizes a raw list of schema names into a stable, unique array.\n * Drops empty strings and PostgreSQL system/catalog namespaces.\n */\nexport function normalizeDiscoveredSchemas(input: readonly string[]): string[] {\n  const schemas: string[] = [];\n  const seen = new Set<string>();\n\n  for (const value of input) {\n    const schema = value.trim();\n    if (!schema || seen.has(schema)) {\n      continue;\n    }\n    if (SYSTEM_SCHEMAS.has(schema)) {\n      continue;\n    }\n    if (SYSTEM_SCHEMA_PREFIXES.some((prefix) => schema.startsWith(prefix))) {\n      continue;\n    }\n    seen.add(schema);\n    schemas.push(schema);\n  }\n\n  return schemas;\n}\n\n/**\n * Merges configured schemas with discovered ones without dropping user intent.\n * - preserves configured order first\n * - appends newly discovered schemas\n * - never removes a configured schema that discovery did not return\n */\nexport function mergeSchemaSelections(\n  configured: readonly string[] | undefined,\n  discovered: readonly string[]\n): string[] {\n  const result: string[] = [];\n  const seen = new Set<string>();\n\n  for (const value of configured ?? []) {\n    const schema = value.trim();\n    if (!schema || seen.has(schema)) {\n      continue;\n    }\n    seen.add(schema);\n    result.push(schema);\n  }\n\n  for (const value of discovered) {\n    const schema = value.trim();\n    if (!schema || seen.has(schema)) {\n      continue;\n    }\n    seen.add(schema);\n    result.push(schema);\n  }\n\n  return result.length > 0 ? result : [\"public\"];\n}\n\n/**\n * True when two schema lists select the same set (order-insensitive).\n */\nexport function schemasEqual(\n  left: readonly string[] | undefined,\n  right: readonly string[] | undefined\n): boolean {\n  const a = normalizeDiscoveredSchemas(left ?? []);\n  const b = normalizeDiscoveredSchemas(right ?? []);\n  if (a.length !== b.length) {\n    return false;\n  }\n  const set = new Set(a);\n  return b.every((schema) => set.has(schema));\n}\n\nfunction coerceSchemaName(row: SchemaNameRow): string | undefined {\n  const raw = row.schema_name ?? row.schemaName ?? row.nspname;\n  if (typeof raw !== \"string\") {\n    return;\n  }\n  const trimmed = raw.trim();\n  return trimmed.length > 0 ? trimmed : undefined;\n}\n\nasync function loadPgPoolConstructor(): Promise<\n  new (config: {\n    connectionString: string;\n  }) => {\n    query: <T extends Record<string, unknown>>(\n      sql: string\n    ) => Promise<{ rows: T[] }>;\n    end: () => Promise<void>;\n  }\n> {\n  const module = await import(\"pg\");\n  const poolConstructor =\n    (\n      module as {\n        Pool?: new (config: {\n          connectionString: string;\n        }) => {\n          query: <T extends Record<string, unknown>>(\n            sql: string\n          ) => Promise<{ rows: T[] }>;\n          end: () => Promise<void>;\n        };\n      }\n    ).Pool ??\n    (\n      module as {\n        default?: {\n          Pool?: new (config: {\n            connectionString: string;\n          }) => {\n            query: <T extends Record<string, unknown>>(\n              sql: string\n            ) => Promise<{ rows: T[] }>;\n            end: () => Promise<void>;\n          };\n        };\n      }\n    ).default?.Pool;\n\n  if (!poolConstructor) {\n    throw new Error(\n      '@xylex-group/athena: Unable to load the PostgreSQL driver for schema discovery. Ensure \"pg\" is installed and this API runs in a Node.js server runtime.'\n    );\n  }\n\n  return poolConstructor;\n}\n\nasync function discoverDirectSchemas(\n  config: PostgresDirectProviderConfig\n): Promise<string[]> {\n  const PoolConstructor = await loadPgPoolConstructor();\n  const pool = new PoolConstructor({\n    connectionString: config.connectionString,\n  });\n  try {\n    const result = await pool.query(DISCOVER_POSTGRES_SCHEMAS_SQL);\n    const names = (result.rows as SchemaNameRow[])\n      .map(coerceSchemaName)\n      .filter((value): value is string => Boolean(value));\n    return normalizeDiscoveredSchemas(names);\n  } finally {\n    await pool.end();\n  }\n}\n\nasync function discoverGatewaySchemas(\n  config: PostgresGatewayProviderConfig\n): Promise<string[]> {\n  // Avoid ReturnType<typeof createClient> — it overflows TS instantiation depth.\n  interface GatewayQueryClient {\n    query: <T>(sql: string) => Promise<{\n      data?: T[] | null;\n      error?: { message?: string } | null;\n      status: number;\n    }>;\n  }\n  const client = (\n    createClient as unknown as (c: unknown) => GatewayQueryClient\n  )({\n    backend: {\n      type: config.backend ?? \"postgresql\",\n    },\n    client: config.client,\n    db: { url: config.gatewayUrl },\n    env: typeof process === \"undefined\" ? undefined : process.env,\n    key: config.apiKey,\n  });\n\n  const result = await client.query<SchemaNameRow>(\n    DISCOVER_POSTGRES_SCHEMAS_SQL\n  );\n  if (result.error || result.status < 200 || result.status >= 300) {\n    throw new Error(\n      result.error?.message ??\n        `Gateway schema discovery failed with status ${result.status}`\n    );\n  }\n\n  const names = (result.data ?? [])\n    .map(coerceSchemaName)\n    .filter((value): value is string => Boolean(value));\n  return normalizeDiscoveredSchemas(names);\n}\n\n/**\n * Discovers application-owned PostgreSQL schemas for generator config auto-fill.\n * Supports both direct Postgres and Athena gateway providers.\n */\nexport async function discoverPostgresSchemas(\n  provider: GeneratorProviderConfig\n): Promise<string[]> {\n  if (provider.kind === \"postgres\" && provider.mode === \"direct\") {\n    return discoverDirectSchemas(provider);\n  }\n\n  if (provider.kind === \"postgres\" && provider.mode === \"gateway\") {\n    return discoverGatewaySchemas(provider);\n  }\n\n  throw new Error(\n    `Schema discovery is only implemented for postgres direct/gateway providers (received ${provider.kind}/${\"mode\" in provider ? provider.mode : \"unknown\"}).`\n  );\n}\n","import { existsSync } from \"node:fs\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport {\n  findGeneratorConfigPath,\n  loadGeneratorConfig,\n  normalizeGeneratorConfig,\n} from \"./config.ts\";\nimport {\n  discoverPostgresSchemas,\n  mergeSchemaSelections,\n  schemasEqual,\n} from \"./schema-discovery.ts\";\nimport {\n  DEFAULT_POSTGRES_SCHEMAS,\n  normalizeSchemaSelection,\n} from \"./schema-selection.ts\";\nimport type {\n  AthenaGeneratorConfig,\n  GeneratorProviderConfig,\n  GeneratorProviderInputConfig,\n  LoadedGeneratorConfig,\n  NormalizedAthenaGeneratorConfig,\n} from \"./types.ts\";\n\nexport type GeneratorConfigFileAction =\n  | \"created\"\n  | \"updated\"\n  | \"unchanged\"\n  | \"skipped\";\n\nexport type GeneratorConfigProviderMode = \"direct\" | \"gateway\" | \"auto\";\n\nexport interface EnsureGeneratorConfigFileOptions {\n  /** Explicit path relative to cwd or absolute. Defaults to discovered path or `athena.config.ts`. */\n  configPath?: string;\n  cwd?: string;\n  /**\n   * Discover live schemas and auto-fill `provider.schemas`.\n   * Defaults to true.\n   */\n  discoverSchemas?: boolean;\n  /**\n   * When false, never write to disk (report would-be action only).\n   * Defaults to false.\n   */\n  dryRun?: boolean;\n  /**\n   * When true, rewrite the full modern template even if a file already exists.\n   * Defaults to false (intelligent surgical update only).\n   */\n  force?: boolean;\n  /**\n   * Optional pre-loaded config (skips a second disk load).\n   */\n  loaded?: LoadedGeneratorConfig;\n  /** Provider mode preference when creating a new file. */\n  mode?: GeneratorConfigProviderMode;\n  /**\n   * Pre-resolved provider used for schema discovery (avoids re-normalizing).\n   */\n  provider?: GeneratorProviderConfig;\n  /**\n   * Explicit schemas to write when discovery is disabled or fails.\n   */\n  schemas?: readonly string[];\n}\n\nexport interface EnsureGeneratorConfigFileResult {\n  absolutePath: string;\n  action: GeneratorConfigFileAction;\n  changes: string[];\n  content?: string;\n  mode: \"direct\" | \"gateway\";\n  path: string;\n  reason?: string;\n  schemas: string[];\n}\n\ntype DetectedMode = \"direct\" | \"gateway\";\n\nfunction hasEnv(keys: readonly string[]): boolean {\n  for (const key of keys) {\n    const value = process.env[key];\n    if (typeof value === \"string\" && value.trim().length > 0) {\n      return true;\n    }\n  }\n  return false;\n}\n\nconst DIRECT_CONNECTION_KEYS = [\n  \"ATHENA_GENERATOR_PG_URL\",\n  \"DATABASE_URL\",\n  \"PG_URL\",\n  \"POSTGRES_URL\",\n  \"POSTGRESQL_URL\",\n] as const;\n\nconst GATEWAY_URL_KEYS = [\n  \"ATHENA_URL\",\n  \"ATHENA_GATEWAY_URL\",\n  \"ATHENA_GENERATOR_URL\",\n] as const;\nconst GATEWAY_KEY_KEYS = [\n  \"ATHENA_API_KEY\",\n  \"ATHENA_GATEWAY_API_KEY\",\n  \"ATHENA_GENERATOR_API_KEY\",\n] as const;\n\n/**\n * Picks a provider mode from env when the caller did not force one.\n * Prefers direct when a connection string is present; otherwise gateway.\n */\nexport function detectGeneratorProviderMode(\n  preferred: GeneratorConfigProviderMode = \"auto\"\n): DetectedMode {\n  if (preferred === \"direct\" || preferred === \"gateway\") {\n    return preferred;\n  }\n\n  const hasDirect = hasEnv(DIRECT_CONNECTION_KEYS);\n  const hasGateway = hasEnv(GATEWAY_URL_KEYS) && hasEnv(GATEWAY_KEY_KEYS);\n\n  if (hasDirect) {\n    return \"direct\";\n  }\n  if (hasGateway) {\n    return \"gateway\";\n  }\n\n  // Default template favors direct; env backfill still applies at load time.\n  return \"direct\";\n}\n\nfunction formatStringArray(values: readonly string[], indent: string): string {\n  if (values.length === 0) {\n    return \"[]\";\n  }\n  const inner = values\n    .map((value) => `${indent}  ${JSON.stringify(value)}`)\n    .join(\",\\n\");\n  return `[\\n${inner},\\n${indent}]`;\n}\n\nfunction buildDirectProviderBlock(schemas: readonly string[]): string {\n  return `  provider: {\n    kind: \"postgres\",\n    mode: \"direct\",\n    connectionString: generatorEnv(\"DATABASE_URL\"),\n    database: generatorEnv(\"ATHENA_GENERATOR_DB\", { optional: true }),\n    schemas: ${formatStringArray(schemas, \"    \")},\n  }`;\n}\n\nfunction buildGatewayProviderBlock(schemas: readonly string[]): string {\n  return `  provider: {\n    kind: \"postgres\",\n    mode: \"gateway\",\n    gatewayUrl: generatorEnv(\"ATHENA_URL\"),\n    apiKey: generatorEnv(\"ATHENA_API_KEY\"),\n    client: generatorEnv(\"ATHENA_CLIENT\", { optional: true }),\n    database: generatorEnv(\"ATHENA_GENERATOR_DB\", { default: \"postgres\" }),\n    schemas: ${formatStringArray(schemas, \"    \")},\n  }`;\n}\n\n/**\n * Renders a modern, typed `athena.config.ts` using `defineGeneratorConfig` + `generatorEnv`.\n * Secrets stay env-backed so gateway and direct modes both work without hardcoding keys.\n */\nexport function renderGeneratorConfigFile(options: {\n  mode: DetectedMode;\n  schemas?: readonly string[];\n}): string {\n  const schemas =\n    options.schemas && options.schemas.length > 0\n      ? [...options.schemas]\n      : [...DEFAULT_POSTGRES_SCHEMAS];\n\n  const providerBlock =\n    options.mode === \"gateway\"\n      ? buildGatewayProviderBlock(schemas)\n      : buildDirectProviderBlock(schemas);\n\n  return `import { defineAthenaConfig, generatorEnv } from \"@xylex-group/athena\";\n\nexport default defineAthenaConfig({\n${providerBlock},\n  output: {\n    format: \"table-builder\",\n    preset: \"athena-direct\",\n    targets: {\n      model: \"src/lib/athena/generated/models/{schema_kebab}/{model_kebab}.ts\",\n      schema: \"src/lib/athena/generated/schema/{schema_kebab}.ts\",\n      database: \"src/lib/athena/generated/relations.ts\",\n      registry: \"src/lib/athena/generated/registry.ts\",\n    },\n    placeholderMap: {\n      namespace: \"athena\",\n    },\n  },\n  naming: {\n    modelType: \"pascal\",\n    modelConst: \"camel\",\n    schemaConst: \"camel\",\n    databaseConst: \"camel\",\n    registryConst: \"camel\",\n  },\n  features: {\n    emitRelations: true,\n    emitRegistry: true,\n  },\n  experimental: {\n    postgresGatewayIntrospection: false,\n    scyllaProviderContracts: true,\n  },\n});\n`;\n}\n\nfunction resolveConfigPath(\n  cwd: string,\n  configPath?: string\n): {\n  absolutePath: string;\n  relativePath: string;\n  exists: boolean;\n} {\n  if (configPath) {\n    const absolutePath = resolve(cwd, configPath);\n    return {\n      absolutePath,\n      exists: existsSync(absolutePath),\n      relativePath: configPath.replace(/\\\\/g, \"/\"),\n    };\n  }\n\n  const discovered = findGeneratorConfigPath(cwd);\n  if (discovered) {\n    const relativePath = discovered.startsWith(cwd)\n      ? discovered\n          .slice(cwd.length)\n          .replace(/^[/\\\\]/, \"\")\n          .replace(/\\\\/g, \"/\")\n      : \"athena.config.ts\";\n    return {\n      absolutePath: discovered,\n      exists: true,\n      relativePath,\n    };\n  }\n\n  const absolutePath = resolve(cwd, \"athena.config.ts\");\n  return {\n    absolutePath,\n    exists: false,\n    relativePath: \"athena.config.ts\",\n  };\n}\n\nfunction providerModeFromConfig(\n  provider: GeneratorProviderConfig | GeneratorProviderInputConfig | undefined,\n  preferred: GeneratorConfigProviderMode\n): DetectedMode {\n  if (provider && provider.kind === \"postgres\") {\n    if (provider.mode === \"gateway\") {\n      return \"gateway\";\n    }\n    if (provider.mode === \"direct\") {\n      return \"direct\";\n    }\n  }\n  return detectGeneratorProviderMode(preferred);\n}\n\nfunction schemasFromNormalized(\n  config: NormalizedAthenaGeneratorConfig\n): string[] {\n  if (config.provider.kind !== \"postgres\") {\n    return [...DEFAULT_POSTGRES_SCHEMAS];\n  }\n  return normalizeSchemaSelection(config.provider.schemas);\n}\n\n/**\n * Updates only the `schemas:` value inside an existing TypeScript config source.\n * Supports:\n * - `schemas: [\"public\", \"athena\"]`\n * - `schemas: generatorEnv.list(\"...\", { default: [\"public\"] })`\n *\n * Returns undefined when the file cannot be updated surgically (caller may full-render).\n */\nexport function patchSchemasInConfigSource(\n  source: string,\n  schemas: readonly string[]\n): string | undefined {\n  const formattedInline = `[${schemas.map((value) => JSON.stringify(value)).join(\", \")}]`;\n  const formattedMultiline = formatStringArray(schemas, \"    \");\n\n  // Prefer generatorEnv.list default updates so env override still works.\n  const listDefaultPattern =\n    /(schemas\\s*:\\s*generatorEnv\\.list\\s*\\(\\s*['\"][^'\"]+['\"]\\s*,\\s*\\{[\\s\\S]*?default\\s*:\\s*)(\\[[^\\]]*\\])/m;\n  if (listDefaultPattern.test(source)) {\n    return source.replace(listDefaultPattern, `$1${formattedInline}`);\n  }\n\n  // Literal array assignment on provider.schemas.\n  const literalPattern = /(schemas\\s*:\\s*)(\\[[^\\]]*\\])/m;\n  if (literalPattern.test(source)) {\n    const usesMultiline = /schemas\\s*:\\s*\\[\\s*\\n/.test(source);\n    return source.replace(\n      literalPattern,\n      `$1${usesMultiline ? formattedMultiline : formattedInline}`\n    );\n  }\n\n  // Missing schemas field: inject after kind/mode block if we can find provider mode.\n  const modeLine = /(mode\\s*:\\s*[\"'](?:direct|gateway)[\"']\\s*,)/m;\n  if (modeLine.test(source)) {\n    return source.replace(modeLine, `$1\\n    schemas: ${formattedInline},`);\n  }\n    return undefined;\n  }\n\n  function extractLiteralSchemas(source: string): string[] | undefined {\n    const listDefaultMatch = source.match(\n      /schemas\\s*:\\s*generatorEnv\\.list\\s*\\(\\s*['\"][^'\"]+['\"]\\s*,\\s*\\{[\\s\\S]*?default\\s*:\\s*(\\[[^\\]]*\\])/m\n    );\n    const literalMatch =\n      listDefaultMatch ?? source.match(/schemas\\s*:\\s*(\\[[^\\]]*\\])/m);\n    if (!literalMatch) {\n      return undefined;\n    }\n\n    try {\n      const parsed = JSON.parse(literalMatch[1].replace(/'/g, '\"')) as unknown;\n      if (!Array.isArray(parsed)) {\n        return undefined;\n      }\n      return parsed\n        .map((value) => (typeof value === \"string\" ? value.trim() : \"\"))\n        .filter((value) => value.length > 0);\n    } catch {\n      // Malformed JSON array literal — treat as no schemas.\n    }\n    return undefined;\n  }\n\nasync function resolveDiscoveredSchemas(options: {\n  discoverSchemas: boolean;\n  provider?: GeneratorProviderConfig;\n  loaded?: LoadedGeneratorConfig;\n  explicit?: readonly string[];\n  mode: DetectedMode;\n}): Promise<{\n  schemas: string[];\n  discovered: boolean;\n  discoveryError?: string;\n}> {\n  if (options.explicit && options.explicit.length > 0) {\n    return {\n      discovered: false,\n      schemas: normalizeSchemaSelection(options.explicit),\n    };\n  }\n\n  if (!options.discoverSchemas) {\n    if (options.loaded) {\n      return {\n        discovered: false,\n        schemas: schemasFromNormalized(options.loaded.config),\n      };\n    }\n    return {\n      discovered: false,\n      schemas: [...DEFAULT_POSTGRES_SCHEMAS],\n    };\n  }\n\n  try {\n    let provider = options.provider;\n    if (!provider && options.loaded) {\n      provider = options.loaded.config.provider;\n    }\n    if (!provider) {\n      // Build a minimal env-backed provider for discovery only.\n      const probeConfig: AthenaGeneratorConfig = {\n        provider:\n          options.mode === \"gateway\"\n            ? { kind: \"postgres\", mode: \"gateway\" }\n            : { kind: \"postgres\", mode: \"direct\" },\n      };\n      const normalized = normalizeGeneratorConfig(probeConfig);\n      provider = normalized.provider;\n    }\n\n    const discovered = await discoverPostgresSchemas(provider);\n    if (discovered.length === 0) {\n      const fallback = options.loaded\n        ? schemasFromNormalized(options.loaded.config)\n        : [...DEFAULT_POSTGRES_SCHEMAS];\n      return { discovered: true, schemas: fallback };\n    }\n\n    if (options.loaded) {\n      return {\n        discovered: true,\n        schemas: mergeSchemaSelections(\n          schemasFromNormalized(options.loaded.config),\n          discovered\n        ),\n      };\n    }\n\n    return { discovered: true, schemas: discovered };\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    const fallback = options.loaded\n      ? schemasFromNormalized(options.loaded.config)\n      : [...DEFAULT_POSTGRES_SCHEMAS];\n    return {\n      discovered: false,\n      discoveryError: message,\n      schemas: fallback,\n    };\n  }\n}\n\n/**\n * Creates or intelligently updates `athena.config.ts`.\n *\n * Intelligence rules:\n * - missing file → write modern direct/gateway template with env-backed secrets\n * - existing file + force → full rewrite\n * - existing file → only patch `provider.schemas` when auto-fill finds new values\n * - skip write when content/schemas already match (no churn, safe for typecheck CI)\n * - never removes user-listed schemas that discovery did not return\n * - gateway mode uses the same template surface as direct (generatorEnv for url/key)\n */\nexport async function ensureGeneratorConfigFile(\n  options: EnsureGeneratorConfigFileOptions = {}\n): Promise<EnsureGeneratorConfigFileResult> {\n  const cwd = options.cwd ?? process.cwd();\n  const dryRun = options.dryRun === true;\n  const discoverSchemas = options.discoverSchemas !== false;\n  const force = options.force === true;\n  const preferredMode = options.mode ?? \"auto\";\n\n  const pathInfo = resolveConfigPath(cwd, options.configPath);\n  const changes: string[] = [];\n\n  let loaded = options.loaded;\n  if (!loaded && pathInfo.exists && !force) {\n    try {\n      loaded = await loadGeneratorConfig({\n        configPath: pathInfo.absolutePath,\n        cwd,\n      });\n    } catch {\n      // Fall through to create/replace when existing file is unloadable and force is off:\n      // only patch if we can read text; otherwise report skipped with reason.\n    }\n  }\n\n  const mode = providerModeFromConfig(\n    loaded?.config.provider ?? options.provider,\n    preferredMode\n  );\n  const schemaResolution = await resolveDiscoveredSchemas({\n    discoverSchemas,\n    explicit: options.schemas,\n    loaded,\n    mode,\n    provider: options.provider ?? loaded?.config.provider,\n  });\n\n  if (schemaResolution.discoveryError) {\n    changes.push(`schema-discovery-failed: ${schemaResolution.discoveryError}`);\n  } else if (schemaResolution.discovered) {\n    changes.push(`schemas-discovered: ${schemaResolution.schemas.join(\",\")}`);\n  }\n\n  // --- Create path ---\n  if (!pathInfo.exists || force) {\n    const content = renderGeneratorConfigFile({\n      mode,\n      schemas: schemaResolution.schemas,\n    });\n\n    if (pathInfo.exists) {\n      changes.push(\"force-rewrote-config\");\n    } else {\n      changes.push(\"created-modern-config\");\n    }\n\n    if (!dryRun) {\n      await mkdir(dirname(pathInfo.absolutePath), { recursive: true });\n      await writeFile(pathInfo.absolutePath, content, \"utf8\");\n    }\n\n    return {\n      absolutePath: pathInfo.absolutePath,\n      action: pathInfo.exists ? \"updated\" : \"created\",\n      changes,\n      content,\n      mode,\n      path: pathInfo.relativePath,\n      reason: pathInfo.exists ? \"force rewrite\" : \"config file missing\",\n      schemas: schemaResolution.schemas,\n    };\n  }\n\n  // --- Update path (intelligent, non-destructive) ---\n  const existingSource = await readFile(pathInfo.absolutePath, \"utf8\");\n  const existingLiteralSchemas = extractLiteralSchemas(existingSource);\n  const existingSchemas =\n    existingLiteralSchemas ??\n    (loaded\n      ? schemasFromNormalized(loaded.config)\n      : [...DEFAULT_POSTGRES_SCHEMAS]);\n\n  if (schemasEqual(existingSchemas, schemaResolution.schemas)) {\n    return {\n      absolutePath: pathInfo.absolutePath,\n      action: \"unchanged\",\n      changes: changes.length > 0 ? changes : [\"schemas-already-current\"],\n      content: existingSource,\n      mode,\n      path: pathInfo.relativePath,\n      reason: \"schemas already match discovered/configured set\",\n      schemas: existingSchemas,\n    };\n  }\n\n  const patched = patchSchemasInConfigSource(\n    existingSource,\n    schemaResolution.schemas\n  );\n  if (!patched) {\n    return {\n      absolutePath: pathInfo.absolutePath,\n      action: \"skipped\",\n      changes: [\n        ...changes,\n        \"could-not-patch-schemas-surgically\",\n        \"re-run with force=true to rewrite full template\",\n      ],\n      content: existingSource,\n      mode,\n      path: pathInfo.relativePath,\n      reason:\n        \"existing config schemas could not be updated surgically without risking a destructive rewrite\",\n      schemas: existingSchemas,\n    };\n  }\n\n  if (patched === existingSource) {\n    return {\n      absolutePath: pathInfo.absolutePath,\n      action: \"unchanged\",\n      changes: [...changes, \"patch-noop\"],\n      content: existingSource,\n      mode,\n      path: pathInfo.relativePath,\n      reason: \"patch produced identical content\",\n      schemas: existingSchemas,\n    };\n  }\n\n  changes.push(\n    `schemas-updated: ${existingSchemas.join(\",\")} -> ${schemaResolution.schemas.join(\",\")}`\n  );\n\n  if (!dryRun) {\n    await writeFile(pathInfo.absolutePath, patched, \"utf8\");\n  }\n\n  return {\n    absolutePath: pathInfo.absolutePath,\n    action: \"updated\",\n    changes,\n    content: patched,\n    mode,\n    path: pathInfo.relativePath,\n    reason: \"auto-filled provider.schemas\",\n    schemas: schemaResolution.schemas,\n  };\n}\n","import type {\n  GeneratedArtifact,\n  GeneratorArtifactKind,\n  GeneratorArtifactWritePolicy,\n  SkippedGeneratedArtifactReason,\n  WrittenGeneratedArtifactReason,\n} from \"./types.ts\";\n\nexport interface ArtifactMergeResult {\n  action: \"write\" | \"unchanged\" | \"skip\";\n  added: string[];\n  conflicts: string[];\n  content?: string;\n  detail?: string;\n  lintErrors: string[];\n  preservedCustom: string[];\n  skipReason?: SkippedGeneratedArtifactReason;\n  writeReason?: WrittenGeneratedArtifactReason;\n}\n\ninterface StyleFingerprint {\n  indent: string;\n  newline: \"\\n\" | \"\\r\\n\";\n  quote: \"'\" | '\"';\n  semicolons: boolean;\n  trailingComma: boolean;\n}\n\ninterface NamedImport {\n  end: number;\n  module: string;\n  names: string[];\n  raw: string;\n  start: number;\n}\n\ninterface ObjectEntry {\n  key: string;\n  raw: string;\n  value: string;\n}\n\ninterface DefineBlock {\n  bodyEnd: number;\n  bodyStart: number;\n  callName: string;\n  entries: ObjectEntry[];\n  exportName: string;\n  fullEnd: number;\n  fullStart: number;\n  kind: \"database\" | \"registry\";\n  raw: string;\n}\n\ninterface MetaBlock {\n  bodyEnd: number;\n  bodyStart: number;\n  entries: ObjectEntry[];\n  fullEnd: number;\n  fullStart: number;\n  raw: string;\n}\n\nconst IMPORT_RE =\n  /^import\\s+(?:type\\s+)?(?:\\{([^}]*)\\}|([A-Za-z_$][\\w$]*))\\s+from\\s+(['\"])([^'\"]+)\\3\\s*;?\\s*$/gm;\n\nconst DEFINE_EXPORT_RE =\n  /export\\s+const\\s+([A-Za-z_$][\\w$]*)\\s*=\\s*(define(?:Database|Registry))\\s*\\(\\s*\\{/g;\n\nconst META_EXPORT_RE = /export\\s+const\\s+__athena_schema_meta\\s*=\\s*\\{/g;\n\nconst KNOWN_META_KEYS = new Set([\n  \"schemaVersion\",\n  \"generatedAt\",\n  \"database\",\n  \"outputPreset\",\n  \"outputFormat\",\n]);\n\nfunction detectNewline(source: string): \"\\n\" | \"\\r\\n\" {\n  return source.includes(\"\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n}\n\nfunction detectStyle(source: string): StyleFingerprint {\n  const newline = detectNewline(source);\n  const single = (source.match(/'/g) ?? []).length;\n  const double = (source.match(/\"/g) ?? []).length;\n  const quote: \"'\" | '\"' = double > single ? '\"' : \"'\";\n\n  const importLines = source\n    .split(/\\r?\\n/)\n    .filter((line) => line.trimStart().startsWith(\"import \"));\n  const semicolons =\n    importLines.length > 0\n      ? importLines.filter((line) => line.trimEnd().endsWith(\";\")).length >=\n        importLines.length / 2\n      : false;\n\n  const objectLines = source\n    .split(/\\r?\\n/)\n    .map((line) => line.trim())\n    .filter((line) => /^[A-Za-z0-9_'\"]+\\s*:\\s*.+/.test(line));\n  const trailingComma =\n    objectLines.length > 0\n      ? objectLines.filter((line) => line.endsWith(\",\")).length >=\n        Math.ceil(objectLines.length / 2)\n      : true;\n\n  const indentMatch = source.match(/\\n([ \\t]+)\\S/);\n  const indent = indentMatch?.[1] ?? \"  \";\n\n  return { indent, newline, quote, semicolons, trailingComma };\n}\n\nfunction quoteString(value: string, quote: \"'\" | '\"'): string {\n  const escaped = value\n    .replace(/\\\\/g, \"\\\\\\\\\")\n    .replace(new RegExp(quote, \"g\"), `\\\\${quote}`);\n  return `${quote}${escaped}${quote}`;\n}\n\nfunction parseNamedImports(source: string): NamedImport[] {\n  const imports: NamedImport[] = [];\n  IMPORT_RE.lastIndex = 0;\n  let match: RegExpExecArray | null = IMPORT_RE.exec(source);\n  while (match !== null) {\n    const named = match[1];\n    const defaultName = match[2];\n    const module = match[4];\n    const names = named\n      ? named\n          .split(\",\")\n          .map((part) => part.trim())\n          .filter(Boolean)\n          .map((part) => {\n            const alias = part.split(/\\s+as\\s+/);\n            return (alias[1] ?? alias[0]).trim();\n          })\n      : defaultName\n        ? [defaultName]\n        : [];\n\n    imports.push({\n      end: match.index + match[0].length,\n      module,\n      names,\n      raw: match[0],\n      start: match.index,\n    });\n    match = IMPORT_RE.exec(source);\n  }\n  return imports;\n}\n\nfunction findMatchingBrace(source: string, openIndex: number): number {\n  let depth = 0;\n  let inSingle = false;\n  let inDouble = false;\n  let inTemplate = false;\n  let escaped = false;\n\n  for (let i = openIndex; i < source.length; i += 1) {\n    const ch = source[i];\n    if (escaped) {\n      escaped = false;\n      continue;\n    }\n    if (ch === \"\\\\\" && (inSingle || inDouble || inTemplate)) {\n      escaped = true;\n      continue;\n    }\n    if (!(inDouble || inTemplate) && ch === \"'\") {\n      inSingle = !inSingle;\n      continue;\n    }\n    if (!(inSingle || inTemplate) && ch === '\"') {\n      inDouble = !inDouble;\n      continue;\n    }\n    if (!(inSingle || inDouble) && ch === \"`\") {\n      inTemplate = !inTemplate;\n      continue;\n    }\n    if (inSingle || inDouble || inTemplate) {\n      continue;\n    }\n    if (ch === \"{\") {\n      depth += 1;\n    } else if (ch === \"}\") {\n      depth -= 1;\n      if (depth === 0) {\n        return i;\n      }\n    }\n  }\n  return -1;\n}\n\nfunction parseObjectEntries(body: string): ObjectEntry[] {\n  const entries: ObjectEntry[] = [];\n  const lines = body.split(/\\r?\\n/);\n  for (const line of lines) {\n    const trimmed = line.trim();\n    if (!trimmed || trimmed.startsWith(\"//\") || trimmed.startsWith(\"/*\")) {\n      continue;\n    }\n    const withoutComma = trimmed.endsWith(\",\")\n      ? trimmed.slice(0, -1).trimEnd()\n      : trimmed;\n    const match = withoutComma.match(\n      /^([A-Za-z_$][\\w$]*|['\"][^'\"]+['\"])\\s*:\\s*(.+)$/\n    );\n    if (!match) {\n      continue;\n    }\n    const keyRaw = match[1];\n    const key =\n      keyRaw.startsWith(\"'\") || keyRaw.startsWith('\"')\n        ? keyRaw.slice(1, -1)\n        : keyRaw;\n    entries.push({\n      key,\n      raw: trimmed,\n      value: match[2].trim(),\n    });\n  }\n  return entries;\n}\n\nfunction parseDefineBlocks(source: string): DefineBlock[] {\n  const blocks: DefineBlock[] = [];\n  DEFINE_EXPORT_RE.lastIndex = 0;\n  let match: RegExpExecArray | null = DEFINE_EXPORT_RE.exec(source);\n  while (match !== null) {\n    const exportName = match[1];\n    const callName = match[2];\n    const openBrace = match.index + match[0].lastIndexOf(\"{\");\n    const closeBrace = findMatchingBrace(source, openBrace);\n    if (closeBrace >= 0) {\n      const body = source.slice(openBrace + 1, closeBrace);\n      const fullEnd = (() => {\n        let i = closeBrace + 1;\n        while (i < source.length && /\\s/.test(source[i])) {\n          i += 1;\n        }\n        if (source[i] === \")\") {\n          i += 1;\n        }\n        while (i < source.length && /\\s/.test(source[i])) {\n          i += 1;\n        }\n        if (source[i] === \";\") {\n          i += 1;\n        }\n        return i;\n      })();\n      blocks.push({\n        bodyEnd: closeBrace,\n        bodyStart: openBrace + 1,\n        callName,\n        entries: parseObjectEntries(body),\n        exportName,\n        fullEnd,\n        fullStart: match.index,\n        kind: callName === \"defineDatabase\" ? \"database\" : \"registry\",\n        raw: source.slice(match.index, fullEnd),\n      });\n    }\n    match = DEFINE_EXPORT_RE.exec(source);\n  }\n  return blocks;\n}\n\nfunction parseMetaBlock(source: string): MetaBlock | undefined {\n  META_EXPORT_RE.lastIndex = 0;\n  const match = META_EXPORT_RE.exec(source);\n  if (!match) {\n    return;\n  }\n  const openBrace = match.index + match[0].lastIndexOf(\"{\");\n  const closeBrace = findMatchingBrace(source, openBrace);\n  if (closeBrace < 0) {\n    return;\n  }\n  let fullEnd = closeBrace + 1;\n  const after = source.slice(fullEnd);\n  const asConst = after.match(/^\\s*as\\s+const\\s*;?/);\n  if (asConst) {\n    fullEnd += asConst[0].length;\n  } else if (source[fullEnd] === \";\") {\n    fullEnd += 1;\n  }\n  return {\n    bodyEnd: closeBrace,\n    bodyStart: openBrace + 1,\n    entries: parseObjectEntries(source.slice(openBrace + 1, closeBrace)),\n    fullEnd,\n    fullStart: match.index,\n    raw: source.slice(match.index, fullEnd),\n  };\n}\n\nfunction hasImportBinding(\n  imports: NamedImport[],\n  name: string,\n  module?: string\n): boolean {\n  return imports.some(\n    (item) =>\n      item.names.includes(name) &&\n      (module === undefined ||\n        normalizeModulePath(item.module) === normalizeModulePath(module))\n  );\n}\n\nfunction findImportForName(\n  imports: NamedImport[],\n  name: string\n): NamedImport | undefined {\n  return imports.find((item) => item.names.includes(name));\n}\n\nfunction normalizeModulePath(modulePath: string): string {\n  return modulePath\n    .replace(/\\\\/g, \"/\")\n    .replace(/^\\.\\//, \"\")\n    .replace(/\\.ts$/, \"\");\n}\n\nfunction formatImport(\n  names: string[],\n  modulePath: string,\n  style: StyleFingerprint\n): string {\n  const body = `import { ${names.join(\", \")} } from ${quoteString(modulePath, style.quote)}`;\n  return style.semicolons ? `${body};` : body;\n}\n\nfunction formatObjectEntry(\n  key: string,\n  value: string,\n  style: StyleFingerprint,\n  isLast: boolean\n): string {\n  const needsQuote = !/^[A-Za-z_$][\\w$]*$/.test(key);\n  const renderedKey = needsQuote ? quoteString(key, style.quote) : key;\n  const comma = !isLast || style.trailingComma ? \",\" : \"\";\n  return `${style.indent}${renderedKey}: ${value}${comma}`;\n}\n\nfunction replaceRange(\n  source: string,\n  start: number,\n  end: number,\n  insertion: string\n): string {\n  return source.slice(0, start) + insertion + source.slice(end);\n}\n\nfunction collectDuplicateKeys(entries: ObjectEntry[]): string[] {\n  const seen = new Set<string>();\n  const dupes: string[] = [];\n  for (const entry of entries) {\n    if (seen.has(entry.key)) {\n      dupes.push(entry.key);\n    }\n    seen.add(entry.key);\n  }\n  return dupes;\n}\n\nfunction collectDuplicateImportBindings(imports: NamedImport[]): string[] {\n  const seen = new Set<string>();\n  const dupes: string[] = [];\n  for (const item of imports) {\n    for (const name of item.names) {\n      if (seen.has(name)) {\n        dupes.push(name);\n      }\n      seen.add(name);\n    }\n  }\n  return dupes;\n}\n\nfunction lintArtifactSource(\n  source: string,\n  kind: \"database\" | \"registry\"\n): string[] {\n  const errors: string[] = [];\n  const imports = parseNamedImports(source);\n  const dupImports = collectDuplicateImportBindings(imports);\n  if (dupImports.length > 0) {\n    errors.push(`duplicate import bindings: ${dupImports.join(\", \")}`);\n  }\n\n  const blocks = parseDefineBlocks(source).filter(\n    (block) => block.kind === kind\n  );\n  if (blocks.length === 0) {\n    errors.push(\n      `missing export const … = define${kind === \"database\" ? \"Database\" : \"Registry\"}({…})`\n    );\n    return errors;\n  }\n  if (blocks.length > 1) {\n    errors.push(\n      `multiple define${kind === \"database\" ? \"Database\" : \"Registry\"} exports found`\n    );\n  }\n\n  const block = blocks[0];\n  const dupKeys = collectDuplicateKeys(block.entries);\n  if (dupKeys.length > 0) {\n    errors.push(`duplicate object keys: ${dupKeys.join(\", \")}`);\n  }\n\n  for (const entry of block.entries) {\n    const valueId = entry.value.match(/^[A-Za-z_$][\\w$]*$/)?.[0];\n    // value should be imported (schema const / database const)\n    if (\n      valueId &&\n      !hasImportBinding(imports, valueId) &&\n      valueId !== block.exportName &&\n      !(\n        source.includes(`const ${valueId}`) ||\n        source.includes(`function ${valueId}`)\n      )\n    ) {\n      errors.push(`value \"${valueId}\" for key \"${entry.key}\" is not imported`);\n    }\n  }\n\n  if (kind === \"database\" && !hasImportBinding(imports, \"defineDatabase\")) {\n    errors.push(\"missing defineDatabase import\");\n  }\n  if (kind === \"registry\" && !hasImportBinding(imports, \"defineRegistry\")) {\n    errors.push(\"missing defineRegistry import\");\n  }\n\n  return errors;\n}\n\nfunction preservedCustomUnits(\n  existing: string,\n  generated: string,\n  kind: \"database\" | \"registry\"\n): string[] {\n  const custom: string[] = [];\n  const existingImports = parseNamedImports(existing);\n  const generatedImports = parseNamedImports(generated);\n  const generatedModules = new Set(\n    generatedImports.map((item) => normalizeModulePath(item.module))\n  );\n  const generatedNames = new Set(\n    generatedImports.flatMap((item) => item.names)\n  );\n\n  for (const item of existingImports) {\n    const moduleNorm = normalizeModulePath(item.module);\n    if (moduleNorm.includes(\"@xylex-group/athena\")) {\n      continue;\n    }\n    const unexpectedNames = item.names.filter(\n      (name) => !generatedNames.has(name)\n    );\n    if (unexpectedNames.length > 0 && !generatedModules.has(moduleNorm)) {\n      custom.push(\n        `import { ${unexpectedNames.join(\", \")} } from '${item.module}'`\n      );\n    } else if (unexpectedNames.length > 0) {\n      custom.push(`import binding(s): ${unexpectedNames.join(\", \")}`);\n    }\n  }\n\n  const existingBlocks = parseDefineBlocks(existing).filter(\n    (block) => block.kind === kind\n  );\n  const generatedBlocks = parseDefineBlocks(generated).filter(\n    (block) => block.kind === kind\n  );\n  const generatedKeys = new Set(\n    generatedBlocks[0]?.entries.map((entry) => entry.key) ?? []\n  );\n  for (const entry of existingBlocks[0]?.entries ?? []) {\n    if (!generatedKeys.has(entry.key)) {\n      custom.push(`${kind} entry: ${entry.key}: ${entry.value}`);\n    }\n  }\n\n  if (kind === \"registry\") {\n    const existingMeta = parseMetaBlock(existing);\n    const generatedMeta = parseMetaBlock(generated);\n    const generatedMetaKeys = new Set(\n      generatedMeta?.entries.map((entry) => entry.key) ?? []\n    );\n    for (const entry of existingMeta?.entries ?? []) {\n      if (\n        !(generatedMetaKeys.has(entry.key) || KNOWN_META_KEYS.has(entry.key))\n      ) {\n        custom.push(`meta entry: ${entry.key}: ${entry.value}`);\n      }\n    }\n  }\n\n  // Extra top-level export const lines not in generated output\n  const exportConstRe = /^export\\s+const\\s+([A-Za-z_$][\\w$]*)\\b/gm;\n  const generatedExports = new Set<string>();\n  let match: RegExpExecArray | null;\n  exportConstRe.lastIndex = 0;\n  match = exportConstRe.exec(generated);\n  while (match !== null) {\n    generatedExports.add(match[1]);\n    match = exportConstRe.exec(generated);\n  }\n  exportConstRe.lastIndex = 0;\n  match = exportConstRe.exec(existing);\n  while (match !== null) {\n    if (\n      !generatedExports.has(match[1]) &&\n      match[1] !== \"__athena_schema_meta\"\n    ) {\n      custom.push(`export const ${match[1]}`);\n    }\n    match = exportConstRe.exec(existing);\n  }\n\n  return custom;\n}\n\nfunction insertImportAfterPackageImports(\n  source: string,\n  importLine: string,\n  style: StyleFingerprint\n): string {\n  const imports = parseNamedImports(source);\n  if (imports.length === 0) {\n    return `${importLine}${style.newline}${source}`;\n  }\n\n  // Prefer inserting after the last local/relative import; if none, after last import.\n  let anchor = imports.at(-1);\n  for (let i = imports.length - 1; i >= 0; i -= 1) {\n    if (imports[i].module.startsWith(\".\")) {\n      anchor = imports[i];\n      break;\n    }\n  }\n\n  if (!anchor) {\n    return `${importLine}${style.newline}${source}`;\n  }\n\n  const insertAt = anchor.end;\n  const before = source.slice(0, insertAt);\n  const after = source.slice(insertAt);\n  const needsLeadingNl = !before.endsWith(\"\\n\");\n  const prefix = needsLeadingNl ? style.newline : \"\";\n  return `${before}${prefix}${importLine}${after.startsWith(\"\\n\") || after.startsWith(\"\\r\\n\") ? \"\" : style.newline}${after}`;\n}\n\nfunction rewriteObjectBody(\n  entries: ObjectEntry[],\n  style: StyleFingerprint\n): string {\n  if (entries.length === 0) {\n    return style.newline;\n  }\n  const lines = entries.map((entry, index) =>\n    formatObjectEntry(\n      entry.key,\n      entry.value,\n      style,\n      index === entries.length - 1\n    )\n  );\n  return `${style.newline}${lines.join(style.newline)}${style.newline}`;\n}\n\nfunction mergeDatabaseArtifact(\n  existing: string,\n  generated: string\n): ArtifactMergeResult {\n  const style = detectStyle(existing);\n  const generatedStyle = detectStyle(generated);\n  const effectiveStyle: StyleFingerprint = {\n    ...style,\n    // Prefer existing fingerprint; fall back to generated if existing is empty-ish\n    quote:\n      existing.includes('\"') || existing.includes(\"'\")\n        ? style.quote\n        : generatedStyle.quote,\n  };\n\n  const generatedImports = parseNamedImports(generated);\n  const existingBlocks = parseDefineBlocks(existing).filter(\n    (block) => block.kind === \"database\"\n  );\n  const generatedBlocks = parseDefineBlocks(generated).filter(\n    (block) => block.kind === \"database\"\n  );\n\n  if (existingBlocks.length === 0 || generatedBlocks.length === 0) {\n    return {\n      action: \"skip\",\n      added: [],\n      conflicts: [],\n      detail: \"could not locate defineDatabase({…}) export for merge\",\n      lintErrors: [],\n      preservedCustom: [],\n      skipReason: \"merge-unparseable\",\n    };\n  }\n\n  const generatedBlock = generatedBlocks[0];\n  const conflicts: string[] = [];\n  const added: string[] = [];\n  let next = existing;\n\n  // Ensure defineDatabase import\n  if (!hasImportBinding(parseNamedImports(next), \"defineDatabase\")) {\n    const pkgImport = generatedImports.find((item) =>\n      item.names.includes(\"defineDatabase\")\n    );\n    if (pkgImport) {\n      const line = formatImport(\n        [\"defineDatabase\"],\n        pkgImport.module,\n        effectiveStyle\n      );\n      next = insertImportAfterPackageImports(next, line, effectiveStyle);\n      added.push(\"import defineDatabase\");\n    }\n  }\n\n  // Re-parse after possible import insert\n  let workingImports = parseNamedImports(next);\n  let workingBlocks = parseDefineBlocks(next).filter(\n    (block) => block.kind === \"database\"\n  );\n  let workingBlock = workingBlocks[0];\n  const entryMap = new Map(\n    workingBlock.entries.map((entry) => [entry.key, entry])\n  );\n\n  for (const desired of generatedBlock.entries) {\n    const existingEntry = entryMap.get(desired.key);\n    if (existingEntry) {\n      if (existingEntry.value !== desired.value) {\n        conflicts.push(\n          `key \"${desired.key}\" maps to ${existingEntry.value} (existing) vs ${desired.value} (generated)`\n        );\n      }\n      continue;\n    }\n\n    // Find generated import for the schema const\n    const desiredImport = generatedImports.find((item) =>\n      item.names.includes(desired.value)\n    );\n    if (desiredImport) {\n      const existingForName = findImportForName(workingImports, desired.value);\n      if (existingForName) {\n        if (\n          normalizeModulePath(existingForName.module) !==\n          normalizeModulePath(desiredImport.module)\n        ) {\n          conflicts.push(\n            `binding \"${desired.value}\" imported from '${existingForName.module}' vs '${desiredImport.module}'`\n          );\n          continue;\n        }\n      } else {\n        const line = formatImport(\n          [desired.value],\n          desiredImport.module,\n          effectiveStyle\n        );\n        next = insertImportAfterPackageImports(next, line, effectiveStyle);\n        added.push(`import ${desired.value}`);\n        workingImports = parseNamedImports(next);\n      }\n    }\n\n    // Re-locate block after import edits\n    workingBlocks = parseDefineBlocks(next).filter(\n      (block) => block.kind === \"database\"\n    );\n    workingBlock = workingBlocks[0];\n    const nextEntries = [\n      ...workingBlock.entries,\n      { key: desired.key, raw: \"\", value: desired.value },\n    ];\n    const body = rewriteObjectBody(nextEntries, effectiveStyle);\n    next = replaceRange(\n      next,\n      workingBlock.bodyStart,\n      workingBlock.bodyEnd,\n      body\n    );\n    entryMap.set(desired.key, {\n      key: desired.key,\n      raw: \"\",\n      value: desired.value,\n    });\n    added.push(`database entry: ${desired.key}`);\n  }\n\n  if (conflicts.length > 0 && added.length === 0) {\n    return {\n      action: \"skip\",\n      added: [],\n      conflicts,\n      detail: conflicts.join(\"; \"),\n      lintErrors: [],\n      preservedCustom: preservedCustomUnits(existing, generated, \"database\"),\n      skipReason: \"merge-conflict\",\n    };\n  }\n\n  const lintErrors = lintArtifactSource(next, \"database\");\n  if (lintErrors.length > 0) {\n    return {\n      action: \"skip\",\n      added,\n      conflicts,\n      detail: lintErrors.join(\"; \"),\n      lintErrors,\n      preservedCustom: preservedCustomUnits(existing, generated, \"database\"),\n      skipReason: \"merge-lint-failed\",\n    };\n  }\n\n  const preservedCustom = preservedCustomUnits(next, generated, \"database\");\n  if (\n    next === existing ||\n    next.replace(/\\r\\n/g, \"\\n\") === existing.replace(/\\r\\n/g, \"\\n\")\n  ) {\n    return {\n      action: \"unchanged\",\n      added: [],\n      conflicts,\n      content: existing,\n      detail: conflicts.length > 0 ? conflicts.join(\"; \") : undefined,\n      lintErrors: [],\n      preservedCustom,\n      skipReason: \"already-current\",\n    };\n  }\n\n  return {\n    action: \"write\",\n    added,\n    conflicts,\n    content: next.endsWith(\"\\n\") ? next : `${next}${effectiveStyle.newline}`,\n    lintErrors: [],\n    preservedCustom,\n    writeReason: \"merged\",\n  };\n}\n\nfunction mergeMetaFields(\n  existingMeta: MetaBlock | undefined,\n  generatedMeta: MetaBlock | undefined\n): { entries: ObjectEntry[]; changed: boolean; added: string[] } {\n  const added: string[] = [];\n  if (!generatedMeta) {\n    return { added, changed: false, entries: existingMeta?.entries ?? [] };\n  }\n  if (!existingMeta) {\n    return {\n      added: generatedMeta.entries.map((entry) => `meta entry: ${entry.key}`),\n      changed: true,\n      entries: generatedMeta.entries,\n    };\n  }\n\n  const map = new Map(existingMeta.entries.map((entry) => [entry.key, entry]));\n  let changed = false;\n\n  for (const desired of generatedMeta.entries) {\n    const current = map.get(desired.key);\n    if (!current) {\n      map.set(desired.key, desired);\n      added.push(`meta entry: ${desired.key}`);\n      changed = true;\n      continue;\n    }\n    // Refresh known meta fields when they differ (except generatedAt — only if other meta missing was handled).\n    // Always refresh generatedAt / schemaVersion / output fields when values differ so registry stays truthful.\n    if (KNOWN_META_KEYS.has(desired.key) && current.value !== desired.value) {\n      map.set(desired.key, desired);\n      added.push(`meta refresh: ${desired.key}`);\n      changed = true;\n    }\n  }\n\n  // Preserve order: existing keys first, then newly added known keys in generated order\n  const ordered: ObjectEntry[] = [];\n  const seen = new Set<string>();\n  for (const entry of existingMeta.entries) {\n    const next = map.get(entry.key);\n    if (next) {\n      ordered.push(next);\n      seen.add(entry.key);\n    }\n  }\n  for (const entry of generatedMeta.entries) {\n    if (!seen.has(entry.key)) {\n      const next = map.get(entry.key);\n      if (next) {\n        ordered.push(next);\n        seen.add(entry.key);\n      }\n    }\n  }\n  for (const [key, entry] of map) {\n    if (!seen.has(key)) {\n      ordered.push(entry);\n    }\n  }\n\n  return { added, changed, entries: ordered };\n}\n\nfunction mergeRegistryArtifact(\n  existing: string,\n  generated: string\n): ArtifactMergeResult {\n  const style = detectStyle(existing);\n  const effectiveStyle = style;\n  const generatedImports = parseNamedImports(generated);\n  const existingBlocks = parseDefineBlocks(existing).filter(\n    (block) => block.kind === \"registry\"\n  );\n  const generatedBlocks = parseDefineBlocks(generated).filter(\n    (block) => block.kind === \"registry\"\n  );\n\n  if (existingBlocks.length === 0 || generatedBlocks.length === 0) {\n    return {\n      action: \"skip\",\n      added: [],\n      conflicts: [],\n      detail: \"could not locate defineRegistry({…}) export for merge\",\n      lintErrors: [],\n      preservedCustom: [],\n      skipReason: \"merge-unparseable\",\n    };\n  }\n\n  const existingBlock = existingBlocks[0];\n  const generatedBlock = generatedBlocks[0];\n  const conflicts: string[] = [];\n  const added: string[] = [];\n  let next = existing;\n\n  if (!hasImportBinding(parseNamedImports(next), \"defineRegistry\")) {\n    const pkgImport = generatedImports.find((item) =>\n      item.names.includes(\"defineRegistry\")\n    );\n    if (pkgImport) {\n      next = insertImportAfterPackageImports(\n        next,\n        formatImport([\"defineRegistry\"], pkgImport.module, effectiveStyle),\n        effectiveStyle\n      );\n      added.push(\"import defineRegistry\");\n    }\n  }\n\n  // Database const import from generated (prefer existing const name if entry already present)\n  const preferredDbValue =\n    existingBlock.entries[0]?.value ?? generatedBlock.entries[0]?.value;\n  const generatedDbImport =\n    generatedImports.find((item) =>\n      item.names.includes(generatedBlock.entries[0]?.value ?? \"\")\n    ) ?? generatedImports.find((item) => item.module.startsWith(\".\"));\n\n  if (preferredDbValue && generatedDbImport) {\n    const existingForName = findImportForName(\n      parseNamedImports(next),\n      preferredDbValue\n    );\n    if (!existingForName) {\n      const modulePath = generatedDbImport.module;\n      const importName =\n        findImportForName(generatedImports, preferredDbValue)?.names[0] ??\n        generatedBlock.entries[0]?.value ??\n        preferredDbValue;\n      if (!hasImportBinding(parseNamedImports(next), importName)) {\n        next = insertImportAfterPackageImports(\n          next,\n          formatImport([importName], modulePath, effectiveStyle),\n          effectiveStyle\n        );\n        added.push(`import ${importName}`);\n      }\n    } else if (\n      normalizeModulePath(existingForName.module) !==\n      normalizeModulePath(generatedDbImport.module)\n    ) {\n      conflicts.push(\n        `binding \"${preferredDbValue}\" imported from '${existingForName.module}' vs '${generatedDbImport.module}'`\n      );\n    }\n  }\n\n  // Merge defineRegistry entries (additive)\n  let workingBlocks = parseDefineBlocks(next).filter(\n    (block) => block.kind === \"registry\"\n  );\n  let workingBlock = workingBlocks[0];\n  const entryMap = new Map(\n    workingBlock.entries.map((entry) => [entry.key, entry])\n  );\n\n  for (const desired of generatedBlock.entries) {\n    // Prefer existing value name for same key if present\n    const existingEntry = entryMap.get(desired.key);\n    if (existingEntry) {\n      // Keep existing value (const name); only conflict if we cannot reconcile\n      continue;\n    }\n\n    // Use desired key with existing imported database const if any\n    const dbImport = parseNamedImports(next).find(\n      (item) =>\n        item.module.startsWith(\".\") &&\n        item.names.some((name) => name !== \"defineRegistry\")\n    );\n    const value = dbImport?.names[0] ?? desired.value;\n    const nextEntries = [\n      ...workingBlock.entries,\n      { key: desired.key, raw: \"\", value },\n    ];\n    const body = rewriteObjectBody(nextEntries, effectiveStyle);\n    next = replaceRange(\n      next,\n      workingBlock.bodyStart,\n      workingBlock.bodyEnd,\n      body\n    );\n    entryMap.set(desired.key, { key: desired.key, raw: \"\", value });\n    added.push(`registry entry: ${desired.key}`);\n    workingBlocks = parseDefineBlocks(next).filter(\n      (block) => block.kind === \"registry\"\n    );\n    workingBlock = workingBlocks[0];\n  }\n\n  // Meta merge — only refresh meta when structural adds happened OR known fields are missing.\n  // To avoid dirty git on pure no-ops: if nothing else changed, only fill missing meta keys\n  // (do not bump generatedAt alone).\n  const existingMeta = parseMetaBlock(next);\n  const generatedMeta = parseMetaBlock(generated);\n  const structuralAdded = added.length > 0;\n\n  if (generatedMeta) {\n    if (existingMeta) {\n      const desiredEntries = structuralAdded\n        ? generatedMeta.entries\n        : generatedMeta.entries.filter((entry) => {\n            // Only add missing keys; do not refresh generatedAt when nothing else changed\n            return !existingMeta.entries.some(\n              (current) => current.key === entry.key\n            );\n          });\n\n      if (structuralAdded) {\n        const merged = mergeMetaFields(existingMeta, generatedMeta);\n        if (merged.changed) {\n          // re-parse meta on next\n          const metaNow = parseMetaBlock(next);\n          if (metaNow) {\n            const body = rewriteObjectBody(merged.entries, effectiveStyle);\n            next = replaceRange(next, metaNow.bodyStart, metaNow.bodyEnd, body);\n            added.push(...merged.added);\n          }\n        }\n      } else if (desiredEntries.length > 0) {\n        const map = new Map(\n          existingMeta.entries.map((entry) => [entry.key, entry])\n        );\n        for (const entry of desiredEntries) {\n          map.set(entry.key, entry);\n          added.push(`meta entry: ${entry.key}`);\n        }\n        const ordered = [\n          ...existingMeta.entries.map((entry) => map.get(entry.key)!),\n          ...desiredEntries.filter(\n            (entry) => !existingMeta.entries.some((e) => e.key === entry.key)\n          ),\n        ];\n        const metaNow = parseMetaBlock(next);\n        if (metaNow) {\n          const body = rewriteObjectBody(ordered, effectiveStyle);\n          next = replaceRange(next, metaNow.bodyStart, metaNow.bodyEnd, body);\n        }\n      }\n    } else {\n      // Insert meta before defineRegistry export\n      const blocks = parseDefineBlocks(next).filter(\n        (block) => block.kind === \"registry\"\n      );\n      const insertAt = blocks[0]?.fullStart ?? next.length;\n      const metaBody = rewriteObjectBody(generatedMeta.entries, effectiveStyle);\n      const metaBlock = `export const __athena_schema_meta = {${metaBody}} as const${effectiveStyle.semicolons ? \";\" : \"\"}${effectiveStyle.newline}${effectiveStyle.newline}`;\n      next = replaceRange(next, insertAt, insertAt, metaBlock);\n      added.push(\"__athena_schema_meta\");\n    }\n  }\n\n  if (conflicts.length > 0 && added.length === 0) {\n    return {\n      action: \"skip\",\n      added: [],\n      conflicts,\n      detail: conflicts.join(\"; \"),\n      lintErrors: [],\n      preservedCustom: preservedCustomUnits(existing, generated, \"registry\"),\n      skipReason: \"merge-conflict\",\n    };\n  }\n\n  const lintErrors = lintArtifactSource(next, \"registry\");\n  if (lintErrors.length > 0) {\n    return {\n      action: \"skip\",\n      added,\n      conflicts,\n      detail: lintErrors.join(\"; \"),\n      lintErrors,\n      preservedCustom: preservedCustomUnits(existing, generated, \"registry\"),\n      skipReason: \"merge-lint-failed\",\n    };\n  }\n\n  const preservedCustom = preservedCustomUnits(next, generated, \"registry\");\n  if (next.replace(/\\r\\n/g, \"\\n\") === existing.replace(/\\r\\n/g, \"\\n\")) {\n    return {\n      action: \"unchanged\",\n      added: [],\n      conflicts,\n      content: existing,\n      lintErrors: [],\n      preservedCustom,\n      skipReason: \"already-current\",\n    };\n  }\n\n  return {\n    action: \"write\",\n    added,\n    conflicts,\n    content: next.endsWith(\"\\n\") ? next : `${next}${effectiveStyle.newline}`,\n    lintErrors: [],\n    preservedCustom,\n    writeReason: \"merged\",\n  };\n}\n\n/**\n * Merge generated database/registry content into an existing on-disk file.\n * Additive only: never deletes imports or object keys.\n */\nexport function mergeProtectedArtifact(\n  kind: Extract<GeneratorArtifactKind, \"database\" | \"registry\">,\n  existing: string,\n  generated: string,\n  policy: GeneratorArtifactWritePolicy\n): ArtifactMergeResult {\n  if (policy === \"overwrite\") {\n    if (existing.replace(/\\r\\n/g, \"\\n\") === generated.replace(/\\r\\n/g, \"\\n\")) {\n      return {\n        action: \"unchanged\",\n        added: [],\n        conflicts: [],\n        content: existing,\n        lintErrors: [],\n        preservedCustom: [],\n        skipReason: \"already-current\",\n      };\n    }\n    return {\n      action: \"write\",\n      added: [\"full overwrite\"],\n      conflicts: [],\n      content: generated,\n      lintErrors: [],\n      preservedCustom: [],\n      writeReason: \"overwritten\",\n    };\n  }\n\n  if (policy === \"skip\") {\n    return {\n      action: \"skip\",\n      added: [],\n      conflicts: [],\n      detail: \"artifactWrite policy is skip\",\n      lintErrors: [],\n      preservedCustom: preservedCustomUnits(existing, generated, kind),\n      skipReason: \"protected-existing-file\",\n    };\n  }\n\n  return kind === \"database\"\n    ? mergeDatabaseArtifact(existing, generated)\n    : mergeRegistryArtifact(existing, generated);\n}\n\n/**\n * Plan write action for any generated artifact (used by pipeline).\n */\nexport function resolveArtifactWritePlan(\n  file: GeneratedArtifact,\n  existingContent: string | null,\n  policy: GeneratorArtifactWritePolicy | \"always\"\n): ArtifactMergeResult {\n  if (existingContent === null) {\n    return {\n      action: \"write\",\n      added: [\"created\"],\n      conflicts: [],\n      content: file.content,\n      lintErrors: [],\n      preservedCustom: [],\n      writeReason: \"created\",\n    };\n  }\n\n  if (file.kind === \"model\" || file.kind === \"schema\" || policy === \"always\") {\n    if (\n      existingContent.replace(/\\r\\n/g, \"\\n\") ===\n      file.content.replace(/\\r\\n/g, \"\\n\")\n    ) {\n      return {\n        action: \"unchanged\",\n        added: [],\n        conflicts: [],\n        content: existingContent,\n        lintErrors: [],\n        preservedCustom: [],\n        skipReason: \"already-current\",\n      };\n    }\n    return {\n      action: \"write\",\n      added: [\"overwritten\"],\n      conflicts: [],\n      content: file.content,\n      lintErrors: [],\n      preservedCustom: [],\n      writeReason: existingContent ? \"overwritten\" : \"created\",\n    };\n  }\n\n  return mergeProtectedArtifact(\n    file.kind,\n    existingContent,\n    file.content,\n    policy\n  );\n}\n","import type {\n  IntrospectionColumn,\n  IntrospectionRelation,\n  IntrospectionSchema,\n  IntrospectionTable,\n  ModelRelationKind,\n} from \"./types.ts\";\n\nexport interface ColumnQueryRow {\n  array_dimensions: number;\n  column_name: string;\n  data_type: string;\n  has_default: boolean;\n  is_generated: boolean;\n  is_nullable: boolean;\n  schema_name: string;\n  table_name: string;\n  type_kind_code: string;\n  type_oid: number;\n  udt_name: string;\n}\n\nexport interface PrimaryKeyQueryRow {\n  columns: string[];\n  schema_name: string;\n  table_name: string;\n}\n\nexport interface ForeignKeyQueryRow {\n  constraint_name: string;\n  source_columns: string[];\n  source_is_unique: boolean;\n  source_schema: string;\n  source_table: string;\n  target_columns: string[];\n  target_schema: string;\n  target_table: string;\n}\n\nexport interface EnumQueryRow {\n  enum_label: string;\n  type_oid: number;\n}\n\ninterface BridgeCandidate {\n  foreignKeys: ForeignKeyQueryRow[];\n  schema: string;\n  table: string;\n}\n\nexport const POSTGRES_CATALOG_SQL = {\n  columns: `\n    SELECT\n      n.nspname AS schema_name,\n      c.relname AS table_name,\n      a.attname AS column_name,\n      format_type(a.atttypid, a.atttypmod) AS data_type,\n      t.typname AS udt_name,\n      t.typtype AS type_kind_code,\n      t.oid AS type_oid,\n      NOT a.attnotnull AS is_nullable,\n      (ad.adbin IS NOT NULL) AS has_default,\n      (a.attgenerated <> '') AS is_generated,\n      a.attndims AS array_dimensions\n    FROM pg_attribute a\n    JOIN pg_class c ON c.oid = a.attrelid\n    JOIN pg_namespace n ON n.oid = c.relnamespace\n    JOIN pg_type t ON t.oid = a.atttypid\n    LEFT JOIN pg_attrdef ad ON ad.adrelid = a.attrelid AND ad.adnum = a.attnum\n    WHERE c.relkind IN ('r', 'p')\n      AND a.attnum > 0\n      AND NOT a.attisdropped\n      AND n.nspname = ANY($1::text[])\n    ORDER BY n.nspname, c.relname, a.attnum;\n  `,\n  enums: `\n    SELECT\n      t.oid AS type_oid,\n      e.enumlabel AS enum_label\n    FROM pg_type t\n    JOIN pg_enum e ON e.enumtypid = t.oid\n    ORDER BY t.oid, e.enumsortorder;\n  `,\n  foreignKeys: `\n    SELECT\n      sn.nspname AS source_schema,\n      sc.relname AS source_table,\n      con.conname AS constraint_name,\n      ARRAY_AGG(sa.attname ORDER BY cols.ordinality) AS source_columns,\n      tn.nspname AS target_schema,\n      tc.relname AS target_table,\n      ARRAY_AGG(ta.attname ORDER BY cols.ordinality) AS target_columns,\n      EXISTS (\n        SELECT 1\n        FROM pg_constraint uq\n        WHERE uq.conrelid = con.conrelid\n          AND uq.contype IN ('p', 'u')\n          AND uq.conkey = con.conkey\n      ) AS source_is_unique\n    FROM pg_constraint con\n    JOIN pg_class sc ON sc.oid = con.conrelid\n    JOIN pg_namespace sn ON sn.oid = sc.relnamespace\n    JOIN pg_class tc ON tc.oid = con.confrelid\n    JOIN pg_namespace tn ON tn.oid = tc.relnamespace\n    JOIN unnest(con.conkey, con.confkey) WITH ORDINALITY AS cols(source_attnum, target_attnum, ordinality) ON TRUE\n    JOIN pg_attribute sa ON sa.attrelid = con.conrelid AND sa.attnum = cols.source_attnum\n    JOIN pg_attribute ta ON ta.attrelid = con.confrelid AND ta.attnum = cols.target_attnum\n    WHERE con.contype = 'f'\n      AND sn.nspname = ANY($1::text[])\n      AND tn.nspname = ANY($1::text[])\n    GROUP BY\n      sn.nspname,\n      sc.relname,\n      con.conname,\n      tn.nspname,\n      tc.relname,\n      con.conkey,\n      con.conrelid\n    ORDER BY sn.nspname, sc.relname, con.conname;\n  `,\n  primaryKeys: `\n    SELECT\n      n.nspname AS schema_name,\n      c.relname AS table_name,\n      ARRAY_AGG(a.attname ORDER BY ck.ordinality) AS columns\n    FROM pg_constraint con\n    JOIN pg_class c ON c.oid = con.conrelid\n    JOIN pg_namespace n ON n.oid = c.relnamespace\n    JOIN unnest(con.conkey) WITH ORDINALITY AS ck(attnum, ordinality) ON TRUE\n    JOIN pg_attribute a ON a.attrelid = c.oid AND a.attnum = ck.attnum\n    WHERE con.contype = 'p'\n      AND n.nspname = ANY($1::text[])\n    GROUP BY n.nspname, c.relname\n    ORDER BY n.nspname, c.relname;\n  `,\n} as const;\n\nfunction tableKey(schema: string, table: string): string {\n  return `${schema}.${table}`;\n}\n\nfunction relationKey(...parts: string[]): string {\n  const base = parts\n    .join(\"_\")\n    .replace(/[^A-Za-z0-9_]+/g, \"_\")\n    .replace(/^_+|_+$/g, \"\");\n  return base.length > 0 ? base : \"relation\";\n}\n\nfunction toTypeKind(code: string): IntrospectionColumn[\"typeKind\"] {\n  switch (code) {\n    case \"e\":\n      return \"enum\";\n    case \"d\":\n      return \"domain\";\n    case \"r\":\n      return \"range\";\n    case \"m\":\n      return \"multirange\";\n    case \"c\":\n      return \"composite\";\n    default:\n      return \"scalar\";\n  }\n}\n\nfunction escapeSqlLiteral(value: string): string {\n  return value.replace(/'/g, \"''\");\n}\n\nfunction parsePostgresArrayLiteral(text: string): string[] {\n  const body = text.slice(1, -1).trim();\n  if (!body) {\n    return [];\n  }\n\n  const values: string[] = [];\n  let current = \"\";\n  let inQuotes = false;\n  let escaped = false;\n\n  for (const char of body) {\n    if (escaped) {\n      current += char;\n      escaped = false;\n      continue;\n    }\n    if (char === \"\\\\\") {\n      escaped = true;\n      continue;\n    }\n    if (char === '\"') {\n      inQuotes = !inQuotes;\n      continue;\n    }\n    if (char === \",\" && !inQuotes) {\n      values.push(current);\n      current = \"\";\n      continue;\n    }\n    current += char;\n  }\n\n  values.push(current);\n  return values\n    .map((value) => value.trim())\n    .filter((value) => value.length > 0);\n}\n\nfunction coerceStringArray(value: unknown): string[] {\n  if (Array.isArray(value)) {\n    return value\n      .map((item) => (typeof item === \"string\" ? item : String(item)))\n      .map((item) => item.trim())\n      .filter((item) => item.length > 0);\n  }\n\n  if (typeof value === \"string\") {\n    const trimmed = value.trim();\n    if (!trimmed) {\n      return [];\n    }\n\n    if (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\")) {\n      try {\n        const parsed = JSON.parse(trimmed) as unknown;\n        return coerceStringArray(parsed);\n      } catch {\n        // Fall through to more permissive parsing paths.\n      }\n    }\n\n    if (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) {\n      return parsePostgresArrayLiteral(trimmed);\n    }\n\n    return trimmed\n      .split(\",\")\n      .map((item) => item.trim())\n      .filter((item) => item.length > 0);\n  }\n\n  return [];\n}\n\nexport function normalizePostgresCatalogSchemas(\n  schemas?: readonly string[]\n): string[] {\n  const normalized: string[] = [];\n  const seen = new Set<string>();\n\n  for (const value of schemas ?? []) {\n    const schema = value.trim();\n    if (!schema || seen.has(schema)) {\n      continue;\n    }\n    seen.add(schema);\n    normalized.push(schema);\n  }\n\n  return normalized.length > 0 ? normalized : [\"public\"];\n}\n\nexport function buildSchemaArrayLiteral(schemas: readonly string[]): string {\n  const normalized = normalizePostgresCatalogSchemas(schemas);\n  const literals = normalized\n    .map((schema) => `'${escapeSqlLiteral(schema)}'`)\n    .join(\", \");\n  return `ARRAY[${literals}]`;\n}\n\nfunction inlineSchemaLiteral(sql: string, schemas: readonly string[]): string {\n  const schemaArray = `${buildSchemaArrayLiteral(schemas)}::text[]`;\n  return sql.replace(/\\$1::text\\[\\]/g, schemaArray);\n}\n\nexport function buildGatewayCatalogQueries(schemas: readonly string[]): {\n  columns: string;\n  enums: string;\n  primaryKeys: string;\n  foreignKeys: string;\n} {\n  return {\n    columns: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.columns, schemas),\n    enums: POSTGRES_CATALOG_SQL.enums,\n    foreignKeys: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.foreignKeys, schemas),\n    primaryKeys: inlineSchemaLiteral(POSTGRES_CATALOG_SQL.primaryKeys, schemas),\n  };\n}\n\nexport class PostgresCatalogSnapshotAssembler {\n  private readonly schemas: Record<string, IntrospectionSchema> = {};\n\n  addColumnRows(columnRows: ColumnQueryRow[], enumMap: Map<number, string[]>) {\n    for (const row of columnRows) {\n      const table = this.ensureTable(row.schema_name, row.table_name);\n      table.columns[row.column_name] = {\n        arrayDimensions: row.array_dimensions ?? 0,\n        dataType: row.data_type,\n        enumValues: enumMap.get(row.type_oid),\n        hasDefault: row.has_default,\n        isGenerated: row.is_generated,\n        isNullable: row.is_nullable,\n        isPrimaryKey: false,\n        name: row.column_name,\n        typeKind: toTypeKind(row.type_kind_code),\n        udtName: row.udt_name,\n      };\n    }\n  }\n\n  addPrimaryKeyRows(primaryKeyRows: PrimaryKeyQueryRow[]) {\n    for (const row of primaryKeyRows) {\n      const table = this.ensureTable(row.schema_name, row.table_name);\n      const primaryKeyColumns = coerceStringArray(row.columns);\n      row.columns = primaryKeyColumns;\n      table.primaryKey = primaryKeyColumns;\n      for (const columnName of primaryKeyColumns) {\n        const column = table.columns[columnName];\n        if (column) {\n          column.isPrimaryKey = true;\n        }\n      }\n    }\n  }\n\n  addForeignKeyRows(foreignKeyRows: ForeignKeyQueryRow[]) {\n    for (const row of foreignKeyRows) {\n      const sourceTable = this.ensureTable(row.source_schema, row.source_table);\n      const targetTable = this.ensureTable(row.target_schema, row.target_table);\n      const sourceColumns = coerceStringArray(row.source_columns);\n      const targetColumns = coerceStringArray(row.target_columns);\n      row.source_columns = sourceColumns;\n      row.target_columns = targetColumns;\n\n      const sourceRelationKind: ModelRelationKind = row.source_is_unique\n        ? \"one-to-one\"\n        : \"many-to-one\";\n      this.upsertRelation(\n        sourceTable,\n        relationKey(row.constraint_name, row.target_table),\n        {\n          kind: sourceRelationKind,\n          name: row.constraint_name,\n          sourceColumns,\n          targetColumns,\n          targetModel: row.target_table,\n          targetSchema: row.target_schema,\n        }\n      );\n\n      const targetRelationKind: ModelRelationKind = row.source_is_unique\n        ? \"one-to-one\"\n        : \"one-to-many\";\n      this.upsertRelation(targetTable, relationKey(row.source_table), {\n        kind: targetRelationKind,\n        name: relationKey(row.source_table, row.constraint_name),\n        sourceColumns: targetColumns,\n        targetColumns: sourceColumns,\n        targetModel: row.source_table,\n        targetSchema: row.source_schema,\n      });\n    }\n  }\n\n  addManyToManyRows(foreignKeyRows: ForeignKeyQueryRow[]) {\n    const bySourceTable = new Map<string, BridgeCandidate>();\n    for (const fk of foreignKeyRows) {\n      const key = tableKey(fk.source_schema, fk.source_table);\n      const current = bySourceTable.get(key) ?? {\n        foreignKeys: [],\n        schema: fk.source_schema,\n        table: fk.source_table,\n      };\n      current.foreignKeys.push(fk);\n      bySourceTable.set(key, current);\n    }\n\n    for (const candidate of bySourceTable.values()) {\n      const bridgeTable =\n        this.schemas[candidate.schema]?.tables[candidate.table];\n      if (!bridgeTable) {\n        continue;\n      }\n\n      const primaryKey = bridgeTable.primaryKey;\n      if (candidate.foreignKeys.length !== 2 || primaryKey.length === 0) {\n        continue;\n      }\n\n      const combinedForeignColumns = Array.from(\n        new Set(candidate.foreignKeys.flatMap((fk) => fk.source_columns))\n      );\n      if (\n        combinedForeignColumns.length !== primaryKey.length ||\n        !primaryKey.every((column) => combinedForeignColumns.includes(column))\n      ) {\n        continue;\n      }\n\n      const [first, second] = candidate.foreignKeys;\n      const firstTarget =\n        this.schemas[first.target_schema]?.tables[first.target_table];\n      const secondTarget =\n        this.schemas[second.target_schema]?.tables[second.target_table];\n      if (!(firstTarget && secondTarget)) {\n        continue;\n      }\n\n      this.upsertRelation(firstTarget, relationKey(second.target_table), {\n        kind: \"many-to-many\",\n        name: relationKey(\n          candidate.table,\n          first.constraint_name,\n          second.constraint_name\n        ),\n        sourceColumns: first.target_columns,\n        targetColumns: second.target_columns,\n        targetModel: second.target_table,\n        targetSchema: second.target_schema,\n        through: {\n          model: candidate.table,\n          schema: candidate.schema,\n          sourceColumns: first.source_columns,\n          targetColumns: second.source_columns,\n        },\n      });\n\n      this.upsertRelation(secondTarget, relationKey(first.target_table), {\n        kind: \"many-to-many\",\n        name: relationKey(\n          candidate.table,\n          second.constraint_name,\n          first.constraint_name\n        ),\n        sourceColumns: second.target_columns,\n        targetColumns: first.target_columns,\n        targetModel: first.target_table,\n        targetSchema: first.target_schema,\n        through: {\n          model: candidate.table,\n          schema: candidate.schema,\n          sourceColumns: second.source_columns,\n          targetColumns: first.source_columns,\n        },\n      });\n    }\n  }\n\n  toSchemas(): Record<string, IntrospectionSchema> {\n    return this.schemas;\n  }\n\n  private ensureTable(\n    schemaName: string,\n    tableName: string\n  ): IntrospectionTable {\n    if (!this.schemas[schemaName]) {\n      this.schemas[schemaName] = {\n        name: schemaName,\n        tables: {},\n      };\n    }\n\n    const schema = this.schemas[schemaName];\n    if (!schema.tables[tableName]) {\n      schema.tables[tableName] = {\n        columns: {},\n        name: tableName,\n        primaryKey: [],\n        relations: {},\n        schema: schemaName,\n      };\n    }\n\n    return schema.tables[tableName];\n  }\n\n  private upsertRelation(\n    table: IntrospectionTable,\n    baseKey: string,\n    relation: IntrospectionRelation\n  ) {\n    let key = baseKey;\n    let suffix = 2;\n    while (table.relations[key]) {\n      key = `${baseKey}_${suffix}`;\n      suffix += 1;\n    }\n    table.relations[key] = relation;\n  }\n}\n","import type { Pool, PoolClient, PoolConfig, QueryResult, QueryResultRow } from \"pg\";\n\n/**\n * Narrow pool surface used by Athena tooling (introspection + migrations).\n * Avoids leaking the full `pg` type graph into every consumer.\n */\nexport interface AthenaPostgresPool {\n  connect(): Promise<AthenaPostgresClient>;\n  end(): Promise<void>;\n  query<T extends QueryResultRow = QueryResultRow>(\n    text: string,\n    values?: unknown[]\n  ): Promise<QueryResult<T>>;\n}\n\nexport interface AthenaPostgresClient {\n  query<T extends QueryResultRow = QueryResultRow>(\n    text: string,\n    values?: unknown[]\n  ): Promise<QueryResult<T>>;\n  release(err?: Error | boolean): void;\n}\n\ntype PgPoolConstructor = new (config: PoolConfig) => Pool;\n\nlet pgPoolConstructorPromise: Promise<PgPoolConstructor> | undefined;\n\n/**\n * Lazily loads the Node-only `pg` Pool constructor.\n * Safe to call only from server/CLI tooling entry points.\n */\nexport async function loadPgPoolConstructor(): Promise<PgPoolConstructor> {\n  if (!pgPoolConstructorPromise) {\n    pgPoolConstructorPromise = import(\"pg\").then((module) => {\n      const poolConstructor =\n        (module as { Pool?: PgPoolConstructor }).Pool ??\n        (module as { default?: { Pool?: PgPoolConstructor } }).default?.Pool;\n\n      if (!poolConstructor) {\n        throw new Error(\n          '@xylex-group/athena: Unable to load the PostgreSQL driver. Ensure \"pg\" is installed and this API runs in a Node.js server runtime.'\n        );\n      }\n\n      return poolConstructor;\n    });\n  }\n\n  return pgPoolConstructorPromise;\n}\n\n/**\n * Creates a PostgreSQL connection pool for Node tooling.\n */\nexport async function createPostgresPool(\n  connectionString: string,\n  config: Omit<PoolConfig, \"connectionString\"> = {}\n): Promise<AthenaPostgresPool> {\n  const PoolConstructor = await loadPgPoolConstructor();\n  const pool = new PoolConstructor({\n    ...config,\n    connectionString,\n  });\n  return pool as unknown as AthenaPostgresPool;\n}\n\nexport type { Pool, PoolClient, QueryResult, QueryResultRow };\n","import {\n  type AthenaPostgresPool,\n  createPostgresPool,\n} from \"../postgres/driver.ts\";\nimport {\n  type ColumnQueryRow,\n  type EnumQueryRow,\n  type ForeignKeyQueryRow,\n  normalizePostgresCatalogSchemas,\n  POSTGRES_CATALOG_SQL,\n  PostgresCatalogSnapshotAssembler,\n  type PrimaryKeyQueryRow,\n} from \"./postgres-introspection-core.ts\";\nimport type {\n  IntrospectionInspectOptions,\n  IntrospectionSnapshot,\n  SchemaIntrospectionProvider,\n} from \"./types.ts\";\n\n/**\n * Constructor options for the PostgreSQL introspection provider.\n */\nexport interface PostgresIntrospectionProviderOptions {\n  connectionString: string;\n  database?: string;\n  schemas?: readonly string[];\n}\n\nclass PgCatalogClient {\n  constructor(private readonly pool: AthenaPostgresPool) {}\n\n  async queryColumns(schemas: string[]): Promise<ColumnQueryRow[]> {\n    const result = await this.pool.query<ColumnQueryRow>(\n      POSTGRES_CATALOG_SQL.columns,\n      [schemas]\n    );\n    return result.rows;\n  }\n\n  async queryEnums(): Promise<Map<number, string[]>> {\n    const result = await this.pool.query<EnumQueryRow>(\n      POSTGRES_CATALOG_SQL.enums\n    );\n    const enumMap = new Map<number, string[]>();\n    for (const row of result.rows) {\n      const existing = enumMap.get(row.type_oid) ?? [];\n      existing.push(row.enum_label);\n      enumMap.set(row.type_oid, existing);\n    }\n    return enumMap;\n  }\n\n  async queryPrimaryKeys(schemas: string[]): Promise<PrimaryKeyQueryRow[]> {\n    const result = await this.pool.query<PrimaryKeyQueryRow>(\n      POSTGRES_CATALOG_SQL.primaryKeys,\n      [schemas]\n    );\n    return result.rows;\n  }\n\n  async queryForeignKeys(schemas: string[]): Promise<ForeignKeyQueryRow[]> {\n    const result = await this.pool.query<ForeignKeyQueryRow>(\n      POSTGRES_CATALOG_SQL.foreignKeys,\n      [schemas]\n    );\n    return result.rows;\n  }\n}\n\nclass PostgresIntrospectionProvider implements SchemaIntrospectionProvider {\n  readonly backend = \"postgresql\" as const;\n\n  private readonly connectionString: string;\n  private readonly database: string;\n  private readonly schemas: string[];\n\n  constructor(options: PostgresIntrospectionProviderOptions) {\n    this.connectionString = options.connectionString;\n    this.database = options.database ?? \"postgres\";\n    this.schemas = normalizePostgresCatalogSchemas(options.schemas);\n  }\n\n  async inspect(\n    options?: IntrospectionInspectOptions\n  ): Promise<IntrospectionSnapshot> {\n    const schemas =\n          options?.schemas && options.schemas.length > 0\n            ? normalizePostgresCatalogSchemas(options.schemas)\n            : this.schemas;\n        const pool = await createPostgresPool(this.connectionString);\n        const catalogClient = new PgCatalogClient(pool);\n\n    try {\n      const [columnRows, enumMap, primaryKeyRows, foreignKeyRows] =\n        await Promise.all([\n          catalogClient.queryColumns(schemas),\n          catalogClient.queryEnums(),\n          catalogClient.queryPrimaryKeys(schemas),\n          catalogClient.queryForeignKeys(schemas),\n        ]);\n\n      const assembler = new PostgresCatalogSnapshotAssembler();\n      assembler.addColumnRows(columnRows, enumMap);\n      assembler.addPrimaryKeyRows(primaryKeyRows);\n      assembler.addForeignKeyRows(foreignKeyRows);\n      assembler.addManyToManyRows(foreignKeyRows);\n\n      return {\n        backend: \"postgresql\",\n        database: this.database,\n        generatedAt: new Date().toISOString(),\n        schemas: assembler.toSchemas(),\n      };\n    } finally {\n      await pool.end();\n    }\n  }\n}\n\n/**\n * Creates a PostgreSQL-backed schema introspection provider.\n */\nexport function createPostgresIntrospectionProvider(\n  options: PostgresIntrospectionProviderOptions\n): SchemaIntrospectionProvider {\n  return new PostgresIntrospectionProvider(options);\n}\n","import {\n  buildGatewayCatalogQueries,\n  type ColumnQueryRow,\n  type EnumQueryRow,\n  type ForeignKeyQueryRow,\n  PostgresCatalogSnapshotAssembler,\n  type PrimaryKeyQueryRow,\n} from \"../schema/postgres-introspection-core.ts\";\nimport { createPostgresIntrospectionProvider } from \"../schema/postgres-provider.ts\";\nimport type {\n  IntrospectionInspectOptions,\n  IntrospectionSnapshot,\n  SchemaIntrospectionProvider,\n} from \"../schema/types.ts\";\nimport { type AthenaClient, createClient } from \"../v3-client.ts\";\nimport { normalizeSchemaSelection } from \"./schema-selection.ts\";\nimport type {\n  GeneratorExperimentalFlags,\n  GeneratorProviderConfig,\n  PostgresDirectProviderConfig,\n  PostgresGatewayProviderConfig,\n  ScyllaDirectProviderConfig,\n} from \"./types.ts\";\n\nclass AthenaGatewayCatalogClient {\n  constructor(private readonly client: AthenaClient) {}\n\n  async queryRows<T>(query: string): Promise<T[]> {\n    const result = await this.client.query<T & Record<string, unknown>>(query);\n    if (result.error || result.status < 200 || result.status >= 300) {\n      throw new Error(\n        result.error?.message ??\n          `Gateway query failed with status ${result.status}`\n      );\n    }\n    return (result.data ?? []) as T[];\n  }\n\n  async queryColumns(query: string): Promise<ColumnQueryRow[]> {\n    return this.queryRows<ColumnQueryRow>(query);\n  }\n\n  async queryEnums(query: string): Promise<Map<number, string[]>> {\n    const rows = await this.queryRows<EnumQueryRow>(query);\n    const enumMap = new Map<number, string[]>();\n    for (const row of rows) {\n      const existing = enumMap.get(row.type_oid) ?? [];\n      existing.push(row.enum_label);\n      enumMap.set(row.type_oid, existing);\n    }\n    return enumMap;\n  }\n\n  async queryPrimaryKeys(query: string): Promise<PrimaryKeyQueryRow[]> {\n    return this.queryRows<PrimaryKeyQueryRow>(query);\n  }\n\n  async queryForeignKeys(query: string): Promise<ForeignKeyQueryRow[]> {\n    return this.queryRows<ForeignKeyQueryRow>(query);\n  }\n}\n\nclass AthenaGatewayPostgresIntrospectionProvider\n  implements SchemaIntrospectionProvider\n{\n  readonly backend = \"postgresql\" as const;\n\n  private readonly client: AthenaClient;\n  private readonly schemas: string[];\n\n  constructor(private readonly config: PostgresGatewayProviderConfig) {\n    // Set unified `url` as well as `db.url` so root/chatWs resolution uses the\n    // configured gateway and is not poisoned by ambient invalid ATHENA_URL env\n    // placeholders (e.g. unexpanded `${ATHENA_URL}`).\n    // Cast through unknown: createClient generics overflow TS depth (TS2589).\n    this.client = (\n      createClient as unknown as (config: unknown) => AthenaClient\n    )({\n      backend: {\n        type: this.config.backend ?? \"postgresql\",\n      },\n      // Multi-tenant gateways reject DEFAULT_CLIENT; prefer explicit config.\n      // Also pass process.env so ATHENA_CLIENT / ATHENA_GATEWAY_CLIENT still resolve\n      // when the field was not normalized into provider config.\n      client: this.config.client,\n      db: { url: this.config.gatewayUrl },\n      env: typeof process === \"undefined\" ? undefined : process.env,\n      key: this.config.apiKey,\n      url: this.config.gatewayUrl,\n    });\n    this.schemas = normalizeSchemaSelection(this.config.schemas);\n  }\n\n  async inspect(\n    options?: IntrospectionInspectOptions\n  ): Promise<IntrospectionSnapshot> {\n    const schemas =\n      options?.schemas && options.schemas.length > 0\n        ? normalizeSchemaSelection(options.schemas)\n        : this.schemas;\n\n    const catalogClient = new AthenaGatewayCatalogClient(this.client);\n    const queries = buildGatewayCatalogQueries(schemas);\n\n    const [columnRows, enumMap, primaryKeyRows, foreignKeyRows] =\n      await Promise.all([\n        catalogClient.queryColumns(queries.columns),\n        catalogClient.queryEnums(queries.enums),\n        catalogClient.queryPrimaryKeys(queries.primaryKeys),\n        catalogClient.queryForeignKeys(queries.foreignKeys),\n      ]);\n\n    const assembler = new PostgresCatalogSnapshotAssembler();\n    assembler.addColumnRows(columnRows, enumMap);\n    assembler.addPrimaryKeyRows(primaryKeyRows);\n    assembler.addForeignKeyRows(foreignKeyRows);\n    assembler.addManyToManyRows(foreignKeyRows);\n\n    return {\n      backend: \"postgresql\",\n      database: this.config.database,\n      generatedAt: new Date().toISOString(),\n      schemas: assembler.toSchemas(),\n    };\n  }\n}\n\nclass ScyllaIntrospectionProvider implements SchemaIntrospectionProvider {\n  readonly backend = \"scylladb\" as const;\n\n  constructor(private readonly config: ScyllaDirectProviderConfig) {}\n\n  async inspect(): Promise<IntrospectionSnapshot> {\n    throw new Error(\n      `Scylla introspection provider is not implemented yet for keyspace ${this.config.keyspace}.`\n    );\n  }\n}\n\nfunction createPostgresProvider(\n  config: PostgresDirectProviderConfig\n): SchemaIntrospectionProvider {\n  return createPostgresIntrospectionProvider({\n    connectionString: config.connectionString,\n    database: config.database,\n    schemas: normalizeSchemaSelection(config.schemas),\n  });\n}\n\n/**\n * Resolves a runtime introspection provider from generator config.\n */\nexport function resolveGeneratorProvider(\n  providerConfig: GeneratorProviderConfig,\n  experimentalFlags: GeneratorExperimentalFlags\n): SchemaIntrospectionProvider {\n  if (providerConfig.kind === \"postgres\" && providerConfig.mode === \"direct\") {\n    return createPostgresProvider(providerConfig);\n  }\n\n  if (providerConfig.kind === \"postgres\" && providerConfig.mode === \"gateway\") {\n    return new AthenaGatewayPostgresIntrospectionProvider(providerConfig);\n  }\n\n  if (providerConfig.kind === \"scylla\") {\n    if (!experimentalFlags.scyllaProviderContracts) {\n      throw new Error(\n        \"Scylla provider contracts are disabled. Set experimental.scyllaProviderContracts=true to enable placeholders.\"\n      );\n    }\n    return new ScyllaIntrospectionProvider(providerConfig);\n  }\n\n  throw new Error(\n    `Unsupported generator provider kind: ${(providerConfig as { kind?: string }).kind ?? \"unknown\"}`\n  );\n}\n","export function slugify(input: string): string {\n  return input\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, \"-\")\n    .replace(/^-+|-+$/g, \"\")\n    .slice(0, 64);\n}\n","import { slugify } from \"../utils/slugify.ts\";\nimport type { NamingStyle } from \"./types.ts\";\n\nconst IDENTIFIER_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\nconst RESERVED_IDENTIFIERS = new Set([\n  \"break\",\n  \"case\",\n  \"catch\",\n  \"class\",\n  \"const\",\n  \"continue\",\n  \"debugger\",\n  \"default\",\n  \"delete\",\n  \"do\",\n  \"else\",\n  \"enum\",\n  \"export\",\n  \"extends\",\n  \"false\",\n  \"finally\",\n  \"for\",\n  \"function\",\n  \"if\",\n  \"import\",\n  \"in\",\n  \"instanceof\",\n  \"new\",\n  \"null\",\n  \"return\",\n  \"super\",\n  \"switch\",\n  \"this\",\n  \"throw\",\n  \"true\",\n  \"try\",\n  \"typeof\",\n  \"var\",\n  \"void\",\n  \"while\",\n  \"with\",\n  \"as\",\n  \"implements\",\n  \"interface\",\n  \"let\",\n  \"package\",\n  \"private\",\n  \"protected\",\n  \"public\",\n  \"static\",\n  \"yield\",\n  \"any\",\n  \"boolean\",\n  \"constructor\",\n  \"declare\",\n  \"get\",\n  \"module\",\n  \"require\",\n  \"number\",\n  \"set\",\n  \"string\",\n  \"symbol\",\n  \"type\",\n  \"from\",\n  \"of\",\n]);\n\nfunction splitWords(input: string): string[] {\n  return input\n    .trim()\n    .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n    .replace(/([A-Z]+)([A-Z][a-z0-9]+)/g, \"$1 $2\")\n    .replace(/[^A-Za-z0-9]+/g, \" \")\n    .split(\" \")\n    .map((word) => word.trim())\n    .filter((word) => word.length > 0);\n}\n\nfunction capitalize(word: string): string {\n  return word.length > 0\n    ? `${word[0].toUpperCase()}${word.slice(1).toLowerCase()}`\n    : word;\n}\n\nfunction ensureValidIdentifier(candidate: string, fallback: string): string {\n  const normalized = candidate.length > 0 ? candidate : fallback;\n  const prefixed = /^[0-9]/.test(normalized) ? `_${normalized}` : normalized;\n  if (RESERVED_IDENTIFIERS.has(prefixed)) {\n    return `${prefixed}_value`;\n  }\n  return prefixed;\n}\n\nexport function applyNamingStyle(input: string, style: NamingStyle): string {\n  const words = splitWords(input);\n  if (words.length === 0) {\n    return \"\";\n  }\n\n  switch (style) {\n    case \"preserve\":\n      return input;\n    case \"camel\": {\n      const [first, ...rest] = words;\n      return `${first.toLowerCase()}${rest.map(capitalize).join(\"\")}`;\n    }\n    case \"pascal\":\n      return words.map(capitalize).join(\"\");\n    case \"snake\":\n      return words.map((word) => word.toLowerCase()).join(\"_\");\n    case \"kebab\":\n      return slugify(words.join(\"-\"));\n    default:\n      return input;\n  }\n}\n\nexport function toSafeIdentifier(\n  input: string,\n  style: NamingStyle,\n  fallback = \"value\"\n): string {\n  const transformed = applyNamingStyle(input, style);\n  const normalized = transformed\n    .replace(/[^A-Za-z0-9_$]+/g, \"_\")\n    .replace(/^_+|_+$/g, \"\");\n  const fallbackValue = splitWords(input).join(\"\");\n  return ensureValidIdentifier(\n    normalized.length > 0 ? normalized : fallbackValue,\n    fallback\n  );\n}\n\nexport function escapeTypePropertyName(propertyName: string): string {\n  if (\n    IDENTIFIER_PATTERN.test(propertyName) &&\n    !RESERVED_IDENTIFIERS.has(propertyName)\n  ) {\n    return propertyName;\n  }\n  return `'${propertyName.replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\")}'`;\n}\n\nexport function escapeStringLiteral(value: string): string {\n  return `'${value.replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\")}'`;\n}\n","import type { IntrospectionColumn } from \"../schema/types.ts\";\n\nconst NUMBER_TYPES = new Set([\n  \"int2\",\n  \"int4\",\n  \"float4\",\n  \"float8\",\n  \"smallint\",\n  \"integer\",\n  \"real\",\n  \"double precision\",\n]);\n\nconst STRING_NUMERIC_TYPES = new Set([\n  \"int8\",\n  \"bigint\",\n  \"serial8\",\n  \"bigserial\",\n  \"numeric\",\n  \"decimal\",\n  \"money\",\n]);\n\nconst TEXT_TYPES = new Set([\n  \"char\",\n  \"bpchar\",\n  \"varchar\",\n  \"character varying\",\n  \"text\",\n  \"citext\",\n  \"name\",\n  \"uuid\",\n  \"date\",\n  \"time\",\n  \"timetz\",\n  \"timestamp\",\n  \"timestamptz\",\n  \"interval\",\n  \"inet\",\n  \"cidr\",\n  \"macaddr\",\n  \"macaddr8\",\n  \"point\",\n  \"line\",\n  \"lseg\",\n  \"box\",\n  \"path\",\n  \"polygon\",\n  \"circle\",\n  \"bit\",\n  \"varbit\",\n  \"xml\",\n  \"tsvector\",\n  \"tsquery\",\n  \"jsonpath\",\n]);\n\nfunction normalizeTypeLabel(column: IntrospectionColumn): string {\n  const preferred = (column.udtName || column.dataType).toLowerCase().trim();\n  if (column.arrayDimensions > 0 && preferred.startsWith(\"_\")) {\n    return preferred.slice(1);\n  }\n  return preferred;\n}\n\nfunction wrapArrayType(baseType: string, depth: number): string {\n  let wrapped = baseType;\n  for (let index = 0; index < depth; index += 1) {\n    wrapped = `Array<${wrapped}>`;\n  }\n  return wrapped;\n}\n\nfunction resolveScalarType(column: IntrospectionColumn): string {\n  const label = normalizeTypeLabel(column);\n\n  if (NUMBER_TYPES.has(label)) {\n    return \"number\";\n  }\n\n  if (STRING_NUMERIC_TYPES.has(label)) {\n    return \"string\";\n  }\n\n  if (label === \"bool\" || label === \"boolean\") {\n    return \"boolean\";\n  }\n\n  if (label === \"bytea\") {\n    return \"Buffer\";\n  }\n\n  if (label === \"json\" || label === \"jsonb\") {\n    return \"Record<string, unknown>\";\n  }\n\n  if (TEXT_TYPES.has(label)) {\n    return \"string\";\n  }\n\n  if (label.endsWith(\"range\") || label.endsWith(\"multirange\")) {\n    return \"string\";\n  }\n\n  return \"unknown\";\n}\n\nfunction resolveKindAwareType(column: IntrospectionColumn): string {\n  if (column.typeKind === \"enum\") {\n    const values = column.enumValues ?? [];\n    if (values.length === 0) {\n      return \"string\";\n    }\n    return values\n      .map((value) => `'${value.replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\")}'`)\n      .join(\" | \");\n  }\n\n  if (column.typeKind === \"composite\") {\n    return \"Record<string, unknown>\";\n  }\n\n  if (\n    column.typeKind === \"domain\" ||\n    column.typeKind === \"range\" ||\n    column.typeKind === \"multirange\"\n  ) {\n    return \"string\";\n  }\n\n  return resolveScalarType(column);\n}\n\nexport function resolvePostgresColumnType(column: IntrospectionColumn): string {\n  const baseType = resolveKindAwareType(column);\n  if (!column.arrayDimensions || column.arrayDimensions <= 0) {\n    return baseType;\n  }\n  return wrapArrayType(baseType, column.arrayDimensions);\n}\n","import { applyNamingStyle } from \"./naming.ts\";\nimport type { GeneratorArtifactKind, GeneratorOutputConfig } from \"./types.ts\";\n\nexport interface PlaceholderContext {\n  database: string;\n  kind: GeneratorArtifactKind;\n  model: string;\n  provider: string;\n  schema: string;\n}\n\nfunction createStyleTokens(\n  prefix: string,\n  value: string\n): Record<string, string> {\n  return {\n    [prefix]: value,\n    [`${prefix}_camel`]: applyNamingStyle(value, \"camel\"),\n    [`${prefix}_pascal`]: applyNamingStyle(value, \"pascal\"),\n    [`${prefix}_snake`]: applyNamingStyle(value, \"snake\"),\n    [`${prefix}_kebab`]: applyNamingStyle(value, \"kebab\"),\n  };\n}\n\nfunction renderTemplate(\n  template: string,\n  tokenMap: Record<string, string>\n): string {\n  return template.replace(/\\{([A-Za-z0-9_]+)\\}/g, (_match, token) => {\n    if (!(token in tokenMap)) {\n      throw new Error(\n        `Unknown placeholder token \"${token}\" in template \"${template}\"`\n      );\n    }\n    return tokenMap[token];\n  });\n}\n\nfunction resolvePlaceholderMap(\n  baseTokens: Record<string, string>,\n  outputConfig: GeneratorOutputConfig\n): Record<string, string> {\n  const resolved: Record<string, string> = {\n    ...baseTokens,\n  };\n  const reservedTokenKeys = new Set(Object.keys(baseTokens));\n\n  const entries = Object.entries(outputConfig.placeholderMap ?? {});\n  for (const [key, value] of entries) {\n    if (reservedTokenKeys.has(key)) {\n      continue;\n    }\n\n    let current = value;\n    for (let depth = 0; depth < 8; depth += 1) {\n      const next = renderTemplate(current, resolved);\n      if (next === current) {\n        break;\n      }\n      current = next;\n    }\n    resolved[key] = current;\n  }\n\n  return resolved;\n}\n\nexport function renderOutputPath(\n  template: string,\n  context: PlaceholderContext,\n  outputConfig: GeneratorOutputConfig\n): string {\n  const baseTokens: Record<string, string> = {\n    kind: context.kind,\n    provider: context.provider,\n    ...createStyleTokens(\"database\", context.database),\n    ...createStyleTokens(\"schema\", context.schema),\n    ...createStyleTokens(\"model\", context.model),\n  };\n\n  const tokens = resolvePlaceholderMap(baseTokens, outputConfig);\n  return renderTemplate(template, tokens);\n}\n","import { posix } from \"node:path\";\nimport type {\n  IntrospectionRelation,\n  IntrospectionSnapshot,\n  IntrospectionTable,\n} from \"../schema/types.ts\";\nimport {\n  applyNamingStyle,\n  escapeStringLiteral,\n  escapeTypePropertyName,\n  toSafeIdentifier,\n} from \"./naming.ts\";\nimport { renderOutputPath } from \"./placeholders.ts\";\nimport type {\n  GeneratedArtifact,\n  GeneratedArtifacts,\n  NormalizedAthenaGeneratorConfig,\n} from \"./types.ts\";\n\ntype OutputPathKind = \"model\" | \"schema\" | \"database\" | \"registry\";\n\ninterface OutputPathTokens {\n  database: string;\n  kind: OutputPathKind;\n  model: string;\n  provider: string;\n  schema: string;\n}\n\ninterface SchemaScopedPathDescriptor {\n  filePath: string;\n  schemaName: string;\n}\n\ninterface DatabaseArtifactDescriptor<\n  TSchema extends SchemaArtifactDescriptor = SchemaArtifactDescriptor,\n> {\n  databaseConstName: string;\n  filePath: string;\n  schemas: TSchema[];\n}\n\ninterface ComposeGeneratorArtifactsInput<\n  TModel extends ModelArtifactDescriptorBase,\n> {\n  config: NormalizedAthenaGeneratorConfig;\n  createModelDescriptor: (input: {\n    providerName: string;\n    databaseName: string;\n    schemaName: string;\n    tableName: string;\n    table: IntrospectionTable;\n  }) => TModel;\n  renderModelArtifact: (descriptor: TModel) => GeneratedArtifact;\n  snapshot: IntrospectionSnapshot;\n}\n\nexport interface ModelArtifactDescriptorBase\n  extends SchemaScopedPathDescriptor {\n  exportConstName: string;\n  table: IntrospectionTable;\n  tableName: string;\n}\n\nexport interface SchemaArtifactDescriptor<\n  TModel extends ModelArtifactDescriptorBase = ModelArtifactDescriptorBase,\n> extends SchemaScopedPathDescriptor {\n  models: TModel[];\n  schemaConstName: string;\n}\n\nexport function normalizePath(pathValue: string): string {\n  return pathValue.replace(/\\\\/g, \"/\");\n}\n\n/**\n * Banner required on every generated Athena artifact (Architecture 4.0).\n */\nexport const GENERATED_FILE_BANNER = `/**\n * Generated by Athena.\n *\n * Do not edit manually.\n *\n * Source:\n * athena.config.ts\n */\n`;\n\n/** Prepend the generated banner when missing (idempotent). */\nexport function withGeneratedFileBanner(content: string): string {\n  const trimmed = content.trimStart();\n  if (\n    trimmed.startsWith(\"/**\") &&\n    trimmed.includes(\"Generated by Athena\") &&\n    trimmed.includes(\"Do not edit manually\")\n  ) {\n    return content;\n  }\n  return `${GENERATED_FILE_BANNER}\\n${content.replace(/^\\uFEFF?/, \"\")}`;\n}\n\nfunction withoutTypeScriptExtension(pathValue: string): string {\n  return pathValue.replace(/\\.tsx?$/i, \"\");\n}\n\nexport function toModuleImportPath(\n  fromFile: string,\n  targetFile: string\n): string {\n  const relativePath = withoutTypeScriptExtension(\n    normalizePath(posix.relative(posix.dirname(fromFile), targetFile))\n  );\n  return relativePath.startsWith(\".\") ? relativePath : `./${relativePath}`;\n}\n\nexport function resolveOutputPath(\n  target: string,\n  tokens: OutputPathTokens,\n  config: NormalizedAthenaGeneratorConfig\n): string {\n  return normalizePath(renderOutputPath(target, tokens, config.output));\n}\n\nexport function renderObjectKey(key: string): string {\n  return escapeTypePropertyName(key);\n}\n\nexport function renderRelationLiteral(relation: IntrospectionRelation): string {\n  const through = relation.through\n    ? `,\n      through: {\n        schema: ${escapeStringLiteral(relation.through.schema)},\n        model: ${escapeStringLiteral(relation.through.model)},\n        sourceColumns: [${relation.through.sourceColumns.map((value) => escapeStringLiteral(value)).join(\", \")}],\n        targetColumns: [${relation.through.targetColumns.map((value) => escapeStringLiteral(value)).join(\", \")}],\n      }`\n    : \"\";\n\n  return `{\n      kind: ${escapeStringLiteral(relation.kind)},\n      sourceColumns: [${relation.sourceColumns.map((value) => escapeStringLiteral(value)).join(\", \")}],\n      targetSchema: ${escapeStringLiteral(relation.targetSchema)},\n      targetModel: ${escapeStringLiteral(relation.targetModel)},\n      targetColumns: [${relation.targetColumns.map((value) => escapeStringLiteral(value)).join(\", \")}]${through}\n    }`;\n}\n\nexport function renderSchemaArtifact<\n  TModel extends ModelArtifactDescriptorBase,\n>(descriptor: SchemaArtifactDescriptor<TModel>): GeneratedArtifact {\n  const importLines = descriptor.models\n    .map((modelDescriptor) => {\n      const importPath = toModuleImportPath(\n        descriptor.filePath,\n        modelDescriptor.filePath\n      );\n      return `import { ${modelDescriptor.exportConstName} } from '${importPath}'`;\n    })\n    .join(\"\\n\");\n\n  const modelEntries = descriptor.models\n    .map(\n      (modelDescriptor) =>\n        `  ${renderObjectKey(modelDescriptor.tableName)}: ${modelDescriptor.exportConstName}`\n    )\n    .join(\",\\n\");\n\n  const content = `import { defineSchema } from '@xylex-group/athena'\n${importLines ? `\\n${importLines}\\n` : \"\\n\"}\nexport const ${descriptor.schemaConstName} = defineSchema({\n${modelEntries}\n})\n`;\n\n  return {\n    content,\n    kind: \"schema\",\n    path: descriptor.filePath,\n  };\n}\n\nexport function renderDatabaseArtifact<\n  TSchema extends SchemaArtifactDescriptor,\n>(descriptor: DatabaseArtifactDescriptor<TSchema>): GeneratedArtifact {\n  const importLines = descriptor.schemas\n    .map((schemaDescriptor) => {\n      const importPath = toModuleImportPath(\n        descriptor.filePath,\n        schemaDescriptor.filePath\n      );\n      return `import { ${schemaDescriptor.schemaConstName} } from '${importPath}'`;\n    })\n    .join(\"\\n\");\n\n  const schemaEntries = descriptor.schemas\n    .map(\n      (schemaDescriptor) =>\n        `  ${renderObjectKey(schemaDescriptor.schemaName)}: ${schemaDescriptor.schemaConstName}`\n    )\n    .join(\",\\n\");\n\n  const content = `import { defineDatabase } from '@xylex-group/athena'\n${importLines ? `\\n${importLines}\\n` : \"\\n\"}\nexport const ${descriptor.databaseConstName} = defineDatabase({\n${schemaEntries}\n})\n`;\n\n  return {\n    content,\n    kind: \"database\",\n    path: descriptor.filePath,\n  };\n}\n\nexport function renderRegistryArtifact(\n  registryPath: string,\n  databasePath: string,\n  databaseConstName: string,\n  registryConstName: string,\n  databaseName: string,\n  generatedAt: string,\n  outputPreset: NormalizedAthenaGeneratorConfig[\"output\"][\"preset\"],\n  outputFormat: NormalizedAthenaGeneratorConfig[\"output\"][\"format\"],\n  schemaVersion: number\n): GeneratedArtifact {\n  const databaseImportPath = toModuleImportPath(registryPath, databasePath);\n  const content = `import { defineRegistry } from '@xylex-group/athena'\nimport { ${databaseConstName} } from '${databaseImportPath}'\n\nexport const __athena_schema_meta = {\n  schemaVersion: ${schemaVersion},\n  generatedAt: ${escapeStringLiteral(generatedAt)},\n  database: ${escapeStringLiteral(databaseName)},\n  outputPreset: ${escapeStringLiteral(outputPreset)},\n  outputFormat: ${escapeStringLiteral(outputFormat)},\n} as const\n\nexport const ${registryConstName} = defineRegistry({\n  ${renderObjectKey(databaseName)}: ${databaseConstName}\n})\n`;\n\n  return {\n    content,\n    kind: \"registry\",\n    path: registryPath,\n  };\n}\n\nfunction assertNoDuplicatePaths(files: GeneratedArtifact[]) {\n  const seen = new Map<string, GeneratedArtifact>();\n  for (const file of files) {\n    const existing = seen.get(file.path);\n    if (existing) {\n      throw new Error(\n        [\n          `Generator output collision detected for path: ${file.path}`,\n          `Collision: ${existing.kind} and ${file.kind}.`,\n          \"Use explicit placeholders such as {model}, {model_kebab}, {schema}, or {schema_kebab} in output targets so each artifact resolves to a unique path.\",\n        ].join(\" \")\n      );\n    }\n    seen.set(file.path, file);\n  }\n}\n\nfunction addSchemaSegmentToPath(pathValue: string, schemaName: string): string {\n  const normalizedPath = normalizePath(pathValue);\n  const parsedPath = posix.parse(normalizedPath);\n  const schemaSegment = applyNamingStyle(schemaName, \"kebab\");\n  if (!schemaSegment) {\n    return normalizedPath;\n  }\n\n  const dir =\n    parsedPath.dir.length > 0\n      ? `${parsedPath.dir}/${schemaSegment}`\n      : schemaSegment;\n  return normalizePath(posix.join(dir, parsedPath.base));\n}\n\nfunction scopeDuplicateDescriptorPathsBySchema<\n  TDescriptor extends SchemaScopedPathDescriptor,\n>(descriptors: TDescriptor[]): TDescriptor[] {\n  const nextDescriptors = descriptors.map((descriptor) => ({ ...descriptor }));\n  const duplicates = new Map<string, number[]>();\n\n  for (let index = 0; index < nextDescriptors.length; index += 1) {\n    const descriptor = nextDescriptors[index];\n    const indexes = duplicates.get(descriptor.filePath) ?? [];\n    indexes.push(index);\n    duplicates.set(descriptor.filePath, indexes);\n  }\n\n  let appliedSchemaScoping = false;\n  for (const indexes of duplicates.values()) {\n    if (indexes.length <= 1) {\n      continue;\n    }\n\n    const schemaNames = new Set(\n      indexes.map((index) => nextDescriptors[index].schemaName)\n    );\n    if (schemaNames.size <= 1) {\n      continue;\n    }\n\n    for (const index of indexes) {\n      const descriptor = nextDescriptors[index];\n      descriptor.filePath = addSchemaSegmentToPath(\n        descriptor.filePath,\n        descriptor.schemaName\n      );\n    }\n    appliedSchemaScoping = true;\n  }\n\n  if (!appliedSchemaScoping) {\n    return nextDescriptors;\n  }\n\n  const normalizedPaths = new Set<string>();\n  for (const descriptor of nextDescriptors) {\n    if (normalizedPaths.has(descriptor.filePath)) {\n      throw new Error(\n        [\n          `Generator output collision detected for path: ${descriptor.filePath}`,\n          \"Automatic schema path scoping was applied but collisions remain.\",\n          \"Add explicit placeholders such as {model}, {model_kebab}, {schema}, or {schema_kebab} to your output targets.\",\n        ].join(\" \")\n      );\n    }\n    normalizedPaths.add(descriptor.filePath);\n  }\n\n  return nextDescriptors;\n}\n\nexport function composeGeneratorArtifacts<\n  TModel extends ModelArtifactDescriptorBase,\n>(input: ComposeGeneratorArtifactsInput<TModel>): GeneratedArtifacts {\n  const { snapshot, config, createModelDescriptor, renderModelArtifact } =\n    input;\n  const providerName = snapshot.backend;\n  const databaseName = snapshot.database;\n  const modelDescriptors: TModel[] = [];\n\n  for (const schemaName of Object.keys(snapshot.schemas).sort()) {\n    const schema = snapshot.schemas[schemaName];\n    for (const tableName of Object.keys(schema.tables).sort()) {\n      modelDescriptors.push(\n        createModelDescriptor({\n          databaseName,\n          providerName,\n          schemaName,\n          table: schema.tables[tableName],\n          tableName,\n        })\n      );\n    }\n  }\n\n  const scopedModelDescriptors =\n    scopeDuplicateDescriptorPathsBySchema(modelDescriptors);\n\n  let schemaDescriptors: SchemaArtifactDescriptor<TModel>[] = Object.keys(\n    snapshot.schemas\n  )\n    .sort()\n    .map((schemaName) => ({\n      filePath: resolveOutputPath(\n        config.output.targets.schema,\n        {\n          database: databaseName,\n          kind: \"schema\",\n          model: \"index\",\n          provider: providerName,\n          schema: schemaName,\n        },\n        config\n      ),\n      models: scopedModelDescriptors.filter(\n        (model) => model.schemaName === schemaName\n      ),\n      schemaConstName: toSafeIdentifier(\n        `${schemaName} schema`,\n        config.naming.schemaConst,\n        \"schema\"\n      ),\n      schemaName,\n    }));\n\n  schemaDescriptors = scopeDuplicateDescriptorPathsBySchema(schemaDescriptors);\n\n  const databaseDescriptor: DatabaseArtifactDescriptor<\n    SchemaArtifactDescriptor<TModel>\n  > = {\n    databaseConstName: toSafeIdentifier(\n      `${databaseName} database`,\n      config.naming.databaseConst,\n      \"database\"\n    ),\n    filePath: resolveOutputPath(\n      config.output.targets.database,\n      {\n        database: databaseName,\n        kind: \"database\",\n        model: \"index\",\n        provider: providerName,\n        schema: \"index\",\n      },\n      config\n    ),\n    schemas: schemaDescriptors,\n  };\n\n  const files: GeneratedArtifact[] = [];\n\n  for (const modelDescriptor of scopedModelDescriptors) {\n    files.push(renderModelArtifact(modelDescriptor));\n  }\n\n  for (const schemaDescriptor of schemaDescriptors) {\n    files.push(renderSchemaArtifact(schemaDescriptor));\n  }\n\n  files.push(renderDatabaseArtifact(databaseDescriptor));\n\n  if (config.features.emitRegistry) {\n    const registryPath = resolveOutputPath(\n      config.output.targets.registry,\n      {\n        database: databaseName,\n        kind: \"registry\",\n        model: \"index\",\n        provider: providerName,\n        schema: \"index\",\n      },\n      config\n    );\n    files.push(\n      renderRegistryArtifact(\n        registryPath,\n        databaseDescriptor.filePath,\n        databaseDescriptor.databaseConstName,\n        toSafeIdentifier(\"registry\", config.naming.registryConst, \"registry\"),\n        databaseName,\n        snapshot.generatedAt,\n        config.output.preset,\n        config.output.format,\n        config.internal.schemaVersion\n      )\n    );\n  }\n\n  assertNoDuplicatePaths(files);\n\n  return {\n    files: files.map((file) => ({\n      ...file,\n      content: withGeneratedFileBanner(file.content),\n    })),\n    snapshot,\n  };\n}\n","import type {\n  IntrospectionColumn,\n  IntrospectionSnapshot,\n} from \"../schema/types.ts\";\nimport { normalizeGeneratorConfig } from \"./config.ts\";\nimport {\n  escapeStringLiteral,\n  escapeTypePropertyName,\n  toSafeIdentifier,\n} from \"./naming.ts\";\nimport { resolvePostgresColumnType } from \"./postgres-type-mapping.ts\";\nimport {\n  composeGeneratorArtifacts,\n  type ModelArtifactDescriptorBase,\n  renderObjectKey,\n  renderRelationLiteral,\n  resolveOutputPath,\n} from \"./render-shared.ts\";\nimport type {\n  AthenaGeneratorConfig,\n  GeneratedArtifact,\n  GeneratedArtifacts,\n  NormalizedAthenaGeneratorConfig,\n} from \"./types.ts\";\n\ntype ModelRenderDescriptor = ModelArtifactDescriptorBase & {\n  rowTypeName: string;\n  insertTypeName: string;\n  updateTypeName: string;\n  formValuesTypeName: string;\n  tableConstName: string;\n};\n\nconst SAFE_NUMBER_TYPES = new Set([\n  \"int2\",\n  \"int4\",\n  \"float4\",\n  \"float8\",\n  \"smallint\",\n  \"integer\",\n  \"real\",\n  \"double precision\",\n]);\n\nconst JSON_TYPES = new Set([\"json\", \"jsonb\"]);\nconst BOOLEAN_TYPES = new Set([\"bool\", \"boolean\"]);\nconst STRING_TYPES = new Set([\n  \"int8\",\n  \"bigint\",\n  \"serial8\",\n  \"bigserial\",\n  \"numeric\",\n  \"decimal\",\n  \"money\",\n  \"bytea\",\n]);\n\nfunction normalizeTypeLabel(column: IntrospectionColumn): string {\n  const preferred = (column.udtName || column.dataType).toLowerCase().trim();\n  if (column.arrayDimensions > 0 && preferred.startsWith(\"_\")) {\n    return preferred.slice(1);\n  }\n  return preferred;\n}\n\nfunction renderColumnBuilder(column: IntrospectionColumn): {\n  helper: \"boolean\" | \"number\" | \"string\" | \"json\" | \"enumeration\";\n  expression: string;\n} {\n  const label = normalizeTypeLabel(column);\n  let helper: \"boolean\" | \"number\" | \"string\" | \"json\" | \"enumeration\";\n  let expression: string;\n\n  if (\n    column.typeKind === \"enum\" &&\n    column.enumValues &&\n    column.enumValues.length > 0\n  ) {\n    helper = \"enumeration\";\n    expression = `enumeration([${column.enumValues.map((value) => escapeStringLiteral(value)).join(\", \")}] as const)`;\n  } else if (\n    column.arrayDimensions > 0 ||\n    JSON_TYPES.has(label) ||\n    column.typeKind === \"composite\"\n  ) {\n    helper = \"json\";\n    expression = `json<${resolvePostgresColumnType(column)}>()`;\n  } else if (BOOLEAN_TYPES.has(label)) {\n    helper = \"boolean\";\n    expression = \"boolean()\";\n  } else if (SAFE_NUMBER_TYPES.has(label)) {\n    helper = \"number\";\n    expression = \"number()\";\n  } else if (STRING_TYPES.has(label)) {\n    helper = \"string\";\n    expression = \"string()\";\n  } else {\n    helper = \"string\";\n    expression = \"string()\";\n  }\n\n  if (column.isNullable) {\n    expression = `${expression}.optional()`;\n  }\n  if (column.hasDefault) {\n    expression = `${expression}.defaulted()`;\n  }\n  if (column.isGenerated) {\n    expression = `${expression}.generated()`;\n  }\n\n  return { expression, helper };\n}\n\nfunction renderModelArtifact(\n  descriptor: ModelRenderDescriptor,\n  config: NormalizedAthenaGeneratorConfig\n): GeneratedArtifact {\n  const helperImports = new Set<string>([\"table\"]);\n  const columnLines = Object.entries(descriptor.table.columns)\n    .map(([columnName, column]) => {\n      const propertyName = escapeTypePropertyName(columnName);\n      const rendered = renderColumnBuilder(column);\n      helperImports.add(rendered.helper);\n      return `    ${propertyName}: ${rendered.expression}`;\n    })\n    .join(\",\\n\");\n\n  const helperImportLine = Array.from(helperImports).sort().join(\", \");\n  const rowSchemaConstName = `${descriptor.tableConstName}_row_schema`;\n  const insertSchemaConstName = `${descriptor.tableConstName}_insert_schema`;\n  const updateSchemaConstName = `${descriptor.tableConstName}_update_schema`;\n  const formSchemaConstName = `${descriptor.tableConstName}_form_schema`;\n\n  const relationEntries = Object.entries(descriptor.table.relations);\n  const relationsAssignment =\n    config.features.emitRelations && relationEntries.length > 0\n      ? `\nObject.assign(${descriptor.tableConstName}.meta, {\n  relations: {\n${relationEntries\n  .map(\n    ([relationKey, relationValue]) =>\n      `    ${renderObjectKey(relationKey)}: ${renderRelationLiteral(relationValue)}`\n  )\n  .join(\",\\n\")}\n  }\n})\n`\n      : \"\";\n\n  const content = `import { ${helperImportLine} } from '@xylex-group/athena'\nimport type { FormValuesOf, InsertOf, RowOf, UpdateOf } from '@xylex-group/athena'\n\nexport const ${descriptor.tableConstName} = table(${escapeStringLiteral(descriptor.tableName)})\n  .schema(${escapeStringLiteral(descriptor.schemaName)})\n  .columns({\n${columnLines}\n  })\n  ${\n    descriptor.table.primaryKey.length > 0\n      ? `.primaryKey(${descriptor.table.primaryKey.map((value) => escapeStringLiteral(value)).join(\", \")})`\n      : \".withoutPrimaryKey()\"\n  }\n${relationsAssignment ? `${relationsAssignment}` : \"\"}\nexport type ${descriptor.rowTypeName} = RowOf<typeof ${descriptor.tableConstName}>\nexport type ${descriptor.insertTypeName} = InsertOf<typeof ${descriptor.tableConstName}>\nexport type ${descriptor.updateTypeName} = UpdateOf<typeof ${descriptor.tableConstName}>\nexport type ${descriptor.formValuesTypeName} = FormValuesOf<typeof ${descriptor.tableConstName}>\n\nexport const ${rowSchemaConstName} = ${descriptor.tableConstName}.schemas.row\nexport const ${insertSchemaConstName} = ${descriptor.tableConstName}.schemas.insert\nexport const ${updateSchemaConstName} = ${descriptor.tableConstName}.schemas.update\nexport const ${formSchemaConstName} = ${descriptor.tableConstName}.schemas.form\n`;\n\n  return {\n    content,\n    kind: \"model\",\n    path: descriptor.filePath,\n  };\n}\n\nexport function generateTableBuilderArtifactsFromSnapshot(\n  snapshot: IntrospectionSnapshot,\n  config: AthenaGeneratorConfig | NormalizedAthenaGeneratorConfig\n): GeneratedArtifacts {\n  const normalizedConfig =\n    \"internal\" in config\n      ? (config as NormalizedAthenaGeneratorConfig)\n      : normalizeGeneratorConfig(config as AthenaGeneratorConfig);\n  return composeGeneratorArtifacts({\n    config: normalizedConfig,\n    createModelDescriptor({\n      providerName,\n      databaseName,\n      schemaName,\n      tableName,\n      table,\n    }) {\n      const tableConstName = toSafeIdentifier(tableName, \"preserve\", \"table\");\n      return {\n        exportConstName: tableConstName,\n        filePath: resolveOutputPath(\n          normalizedConfig.output.targets.model,\n          {\n            database: databaseName,\n            kind: \"model\",\n            model: tableName,\n            provider: providerName,\n            schema: schemaName,\n          },\n          normalizedConfig\n        ),\n        formValuesTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}FormValues`,\n        insertTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Insert`,\n        rowTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Row`,\n        schemaName,\n        table,\n        tableConstName,\n        tableName,\n        updateTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Update`,\n      };\n    },\n    renderModelArtifact: (descriptor) =>\n      renderModelArtifact(descriptor, normalizedConfig),\n    snapshot,\n  });\n}\n","import type { IntrospectionSnapshot } from \"../schema/types.ts\";\nimport { normalizeGeneratorConfig } from \"./config.ts\";\nimport {\n  escapeStringLiteral,\n  escapeTypePropertyName,\n  toSafeIdentifier,\n} from \"./naming.ts\";\nimport { resolvePostgresColumnType } from \"./postgres-type-mapping.ts\";\nimport {\n  composeGeneratorArtifacts,\n  type ModelArtifactDescriptorBase,\n  renderObjectKey,\n  renderRelationLiteral,\n  resolveOutputPath,\n} from \"./render-shared.ts\";\nimport { generateTableBuilderArtifactsFromSnapshot } from \"./table-builder-renderer.ts\";\nimport { filterIntrospectionSnapshot } from \"./table-selection.ts\";\nimport type {\n  AthenaGeneratorConfig,\n  GeneratedArtifact,\n  GeneratedArtifacts,\n  NormalizedAthenaGeneratorConfig,\n} from \"./types.ts\";\n\ntype ModelRenderDescriptor = ModelArtifactDescriptorBase & {\n  rowTypeName: string;\n  insertTypeName: string;\n  updateTypeName: string;\n  modelConstName: string;\n};\n\nfunction renderModelArtifact(\n  databaseName: string,\n  descriptor: ModelRenderDescriptor,\n  config: NormalizedAthenaGeneratorConfig\n): GeneratedArtifact {\n  const columnLines = Object.values(descriptor.table.columns)\n    .map((column) => {\n      const propertyName = escapeTypePropertyName(column.name);\n      const baseType = resolvePostgresColumnType(column);\n      const isOptional = column.isNullable;\n      const typeWithNullability = column.isNullable\n        ? `${baseType} | null`\n        : baseType;\n      return `  ${propertyName}${isOptional ? \"?\" : \"\"}: ${typeWithNullability}`;\n    })\n    .join(\"\\n\");\n\n  const nullableLines = Object.values(descriptor.table.columns)\n    .map(\n      (column) =>\n        `      ${renderObjectKey(column.name)}: ${column.isNullable ? \"true\" : \"false\"}`\n    )\n    .join(\",\\n\");\n\n  const relationEntries = Object.entries(descriptor.table.relations);\n  const relationBlock =\n    config.features.emitRelations && relationEntries.length > 0\n      ? `,\n    relations: {\n${relationEntries\n  .map(\n    ([relationKey, relationValue]) =>\n      `      ${renderObjectKey(relationKey)}: ${renderRelationLiteral(relationValue)}`\n  )\n  .join(\",\\n\")}\n    }`\n      : \"\";\n\n  const content = `import { defineModel } from '@xylex-group/athena'\n\nexport interface ${descriptor.rowTypeName} {\n${columnLines}\n}\n\nexport type ${descriptor.insertTypeName} = Partial<${descriptor.rowTypeName}>\nexport type ${descriptor.updateTypeName} = Partial<${descriptor.insertTypeName}>\n\nexport const ${descriptor.modelConstName} = defineModel<${descriptor.rowTypeName}, ${descriptor.insertTypeName}, ${descriptor.updateTypeName}>({\n  meta: {\n    database: ${escapeStringLiteral(databaseName)},\n    schema: ${escapeStringLiteral(descriptor.schemaName)},\n    model: ${escapeStringLiteral(descriptor.tableName)},\n    tableName: ${escapeStringLiteral(`${descriptor.schemaName}.${descriptor.tableName}`)},\n    primaryKey: [${descriptor.table.primaryKey.map((value) => escapeStringLiteral(value)).join(\", \")}],\n    nullable: {\n${nullableLines}\n    }${relationBlock}\n  }\n})\n`;\n\n  return {\n    content,\n    kind: \"model\",\n    path: descriptor.filePath,\n  };\n}\n\n/**\n * Generates model/schema/database/registry source artifacts from an introspection snapshot.\n */\nexport function generateArtifactsFromSnapshot(\n  snapshot: IntrospectionSnapshot,\n  config: AthenaGeneratorConfig | NormalizedAthenaGeneratorConfig\n): GeneratedArtifacts {\n  const normalizedConfig =\n    \"internal\" in config\n      ? (config as NormalizedAthenaGeneratorConfig)\n      : normalizeGeneratorConfig(config as AthenaGeneratorConfig);\n  const filteredSnapshot = filterIntrospectionSnapshot(\n    snapshot,\n    normalizedConfig.filter\n  );\n  if (normalizedConfig.output.format === \"table-builder\") {\n    return generateTableBuilderArtifactsFromSnapshot(\n      filteredSnapshot,\n      normalizedConfig\n    );\n  }\n  return composeGeneratorArtifacts({\n    config: normalizedConfig,\n    createModelDescriptor({\n      providerName,\n      databaseName,\n      schemaName,\n      tableName,\n      table,\n    }) {\n      const modelConstName = toSafeIdentifier(\n        `${schemaName} ${tableName} model`,\n        normalizedConfig.naming.modelConst,\n        \"model\"\n      );\n      return {\n        exportConstName: modelConstName,\n        filePath: resolveOutputPath(\n          normalizedConfig.output.targets.model,\n          {\n            database: databaseName,\n            kind: \"model\",\n            model: tableName,\n            provider: providerName,\n            schema: schemaName,\n          },\n          normalizedConfig\n        ),\n        insertTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Insert`,\n        modelConstName,\n        rowTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Row`,\n        schemaName,\n        table,\n        tableName,\n        updateTypeName: `${toSafeIdentifier(`${schemaName} ${tableName}`, normalizedConfig.naming.modelType, \"Model\")}Update`,\n      };\n    },\n    renderModelArtifact: (descriptor) =>\n      renderModelArtifact(\n        filteredSnapshot.database,\n        descriptor,\n        normalizedConfig\n      ),\n    snapshot: filteredSnapshot,\n  });\n}\n","import { mkdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport { dirname, relative, resolve } from \"node:path\";\nimport { resolveArtifactWritePlan } from \"./artifact-merge.ts\";\nimport {\n  GENERATED_MANIFEST_REL,\n  loadGeneratorConfig,\n} from \"./config.ts\";\nimport { ensureGeneratorConfigFile } from \"./config-file.ts\";\nimport { resolveGeneratorProvider } from \"./providers.ts\";\nimport { generateArtifactsFromSnapshot } from \"./renderer.ts\";\nimport {\n  discoverPostgresSchemas,\n  mergeSchemaSelections,\n} from \"./schema-discovery.ts\";\nimport { resolveProviderSchemas } from \"./schema-selection.ts\";\nimport type {\n  GeneratedArtifact,\n  GeneratedManifest,\n  GeneratorConfigEnsureSummary,\n  LoadGeneratorConfigOptions,\n  NormalizedAthenaGeneratorConfig,\n  RunGeneratorOptions,\n  RunGeneratorResult,\n  SkippedGeneratedArtifact,\n  WrittenGeneratedArtifact,\n} from \"./types.ts\";\n\nconst GENERATOR_VERSION = \"4.0.0\";\n\nfunction toPosixRel(pathValue: string): string {\n  return pathValue.replace(/\\\\/g, \"/\");\n}\n\nfunction buildGeneratedManifest(input: {\n  configPath: string;\n  cwd: string;\n  files: GeneratedArtifact[];\n}): GeneratedManifest {\n  const configRel =\n    input.configPath === \"[environment defaults]\"\n      ? \"athena.config.ts\"\n      : toPosixRel(relative(input.cwd, input.configPath));\n  const outputs = [\n    ...new Set(input.files.map((file) => toPosixRel(file.path))),\n  ].sort();\n  return {\n    config: configRel.startsWith(\"..\") ? \"athena.config.ts\" : configRel,\n    generatorVersion: GENERATOR_VERSION,\n    outputs,\n  };\n}\n\nasync function writeGeneratedManifest(\n  cwd: string,\n  manifest: GeneratedManifest,\n  dryRun: boolean\n): Promise<string> {\n  const rel = GENERATED_MANIFEST_REL;\n  const absolutePath = resolve(cwd, rel);\n  const body = `${JSON.stringify(manifest, null, 2)}\\n`;\n  if (!dryRun) {\n    await mkdir(dirname(absolutePath), { recursive: true });\n    await writeFile(absolutePath, body, \"utf8\");\n  }\n  return rel;\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n  try {\n    await stat(path);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nasync function readExisting(path: string): Promise<string | null> {\n  try {\n    return await readFile(path, \"utf8\");\n  } catch {\n    return null;\n  }\n}\n\nfunction policyForArtifact(\n  file: GeneratedArtifact,\n  config: NormalizedAthenaGeneratorConfig\n):\n  | \"always\"\n  | NormalizedAthenaGeneratorConfig[\"output\"][\"artifactWrite\"][\"database\"] {\n  if (file.kind === \"model\" || file.kind === \"schema\") {\n    return \"always\";\n  }\n  if (file.kind === \"database\") {\n    return config.output.artifactWrite.database;\n  }\n  return config.output.artifactWrite.registry;\n}\n\nasync function writeArtifacts(\n  files: GeneratedArtifact[],\n  cwd: string,\n  config: NormalizedAthenaGeneratorConfig,\n  dryRun: boolean\n): Promise<{\n  writtenFiles: string[];\n  writtenDetails: WrittenGeneratedArtifact[];\n  skippedFiles: SkippedGeneratedArtifact[];\n}> {\n  const writtenFiles: string[] = [];\n  const writtenDetails: WrittenGeneratedArtifact[] = [];\n  const skippedFiles: SkippedGeneratedArtifact[] = [];\n\n  for (const file of files) {\n    const absolutePath = resolve(cwd, file.path);\n    const exists = await fileExists(absolutePath);\n    const existingContent = exists ? await readExisting(absolutePath) : null;\n    const policy = policyForArtifact(file, config);\n    const plan = resolveArtifactWritePlan(file, existingContent, policy);\n\n    if (plan.action === \"skip\" || plan.action === \"unchanged\") {\n      skippedFiles.push({\n        conflicts: plan.conflicts.length > 0 ? plan.conflicts : undefined,\n        detail: plan.detail,\n        kind: file.kind,\n        lintErrors: plan.lintErrors.length > 0 ? plan.lintErrors : undefined,\n        path: file.path,\n        preservedCustom:\n          plan.preservedCustom.length > 0 ? plan.preservedCustom : undefined,\n        reason: plan.skipReason ?? \"already-current\",\n      });\n      continue;\n    }\n\n    if (!(plan.content && plan.writeReason)) {\n      skippedFiles.push({\n        detail: \"merge produced no content\",\n        kind: file.kind,\n        lintErrors: plan.lintErrors,\n        path: file.path,\n        reason: \"merge-lint-failed\",\n      });\n      continue;\n    }\n\n    if (!dryRun) {\n      await mkdir(dirname(absolutePath), { recursive: true });\n      await writeFile(absolutePath, plan.content, \"utf8\");\n    }\n\n    writtenFiles.push(file.path);\n    writtenDetails.push({\n      added: plan.added.length > 0 ? plan.added : undefined,\n      kind: file.kind,\n      path: file.path,\n      preservedCustom:\n        plan.preservedCustom.length > 0 ? plan.preservedCustom : undefined,\n      reason: plan.writeReason,\n    });\n  }\n\n  return {\n    skippedFiles,\n    writtenDetails,\n    writtenFiles,\n  };\n}\n\nfunction withPostgresSchemas(\n  config: NormalizedAthenaGeneratorConfig,\n  schemas: string[]\n): NormalizedAthenaGeneratorConfig {\n  if (config.provider.kind !== \"postgres\") {\n    return config;\n  }\n\n  return {\n    ...config,\n    provider: {\n      ...config.provider,\n      schemas,\n    },\n  };\n}\n\n/**\n * End-to-end generator execution: load config, introspect, render, and optionally write files.\n *\n * When `writeConfig` is enabled (default), also ensures `athena.config.ts` exists and\n * auto-fills discovered schemas without clobbering custom config fields.\n */\nexport async function runSchemaGenerator(\n  options: RunGeneratorOptions = {}\n): Promise<RunGeneratorResult> {\n  const cwd = options.cwd ?? process.cwd();\n  const dryRun = options.dryRun === true;\n  const writeConfig = options.writeConfig !== false;\n  const discoverSchemas = options.discoverSchemas !== false;\n  const configOptions: LoadGeneratorConfigOptions = {\n    configPath: options.configPath,\n    cwd,\n  };\n\n  const loaded = await loadGeneratorConfig(configOptions);\n  let { configPath, config } = loaded;\n  let configEnsure: GeneratorConfigEnsureSummary | undefined;\n\n  // Expand schemas from live discovery before introspection so gateway/direct\n  // multi-schema databases generate fully without requiring a hand-maintained list.\n  // Injected test/custom providers skip live discovery to avoid real network I/O.\n  let effectiveSchemas = resolveProviderSchemas(config.provider);\n  const canDiscoverLive =\n    discoverSchemas && config.provider.kind === \"postgres\" && !options.provider;\n\n  if (canDiscoverLive) {\n    try {\n      const discovered = await discoverPostgresSchemas(config.provider);\n      if (discovered.length > 0) {\n        effectiveSchemas = mergeSchemaSelections(effectiveSchemas, discovered);\n      }\n    } catch {\n      // Discovery is best-effort during generate; configured schemas still run.\n    }\n  }\n\n  config = withPostgresSchemas(config, effectiveSchemas);\n\n  // Intelligent config ensure: create when missing, patch schemas when expanded.\n  // Skip when a custom provider is injected (unit tests / programmatic overrides).\n  const shouldEnsureConfig =\n    writeConfig && config.provider.kind === \"postgres\" && !options.provider;\n\n  if (shouldEnsureConfig) {\n    const ensureResult = await ensureGeneratorConfigFile({\n      configPath: options.configPath,\n      cwd,\n      // Schemas already resolved above — avoid a second discovery round-trip.\n      discoverSchemas: false,\n      dryRun,\n      loaded: { config, configPath },\n      mode: config.provider.mode,\n      provider: config.provider,\n      schemas: effectiveSchemas,\n    });\n\n    configEnsure = {\n      action: ensureResult.action,\n      changes: ensureResult.changes,\n      path: ensureResult.path,\n      reason: ensureResult.reason,\n      schemas: ensureResult.schemas,\n    };\n\n    // Prefer the durable config path once a real file was created/updated.\n    if (\n      ensureResult.action === \"created\" ||\n      ensureResult.action === \"updated\" ||\n      (ensureResult.action === \"unchanged\" &&\n        configPath === \"[environment defaults]\")\n    ) {\n      configPath = ensureResult.absolutePath;\n      if (ensureResult.schemas.length > 0) {\n        effectiveSchemas = ensureResult.schemas;\n        config = withPostgresSchemas(config, effectiveSchemas);\n      }\n    }\n  }\n\n  const provider =\n    options.provider ??\n    resolveGeneratorProvider(config.provider, config.experimental);\n\n  const snapshot = await provider.inspect({\n    schemas: effectiveSchemas,\n  });\n\n  const generated = generateArtifactsFromSnapshot(snapshot, config);\n  const writeResult = await writeArtifacts(\n    generated.files,\n    cwd,\n    config,\n    dryRun\n  );\n\n  const generatedManifest = buildGeneratedManifest({\n    configPath,\n    cwd,\n    files: generated.files,\n  });\n  const generatedManifestPath = await writeGeneratedManifest(\n    cwd,\n    generatedManifest,\n    dryRun\n  );\n\n  return {\n    ...generated,\n    config,\n    configEnsure,\n    configPath,\n    generatedManifest,\n    generatedManifestPath,\n    skippedFiles: writeResult.skippedFiles,\n    writtenDetails: writeResult.writtenDetails,\n    writtenFiles: writeResult.writtenFiles,\n  };\n}\n","import { createHash } from \"node:crypto\";\n\n/**\n * Deterministic SHA-256 checksum of exact UTF-8 migration SQL bytes.\n * No line-ending normalization — file content is hashed as authored.\n */\nexport function checksumMigrationSql(sql: string): string {\n  return createHash(\"sha256\").update(sql, \"utf8\").digest(\"hex\");\n}\n","/**\n * Domain types for Athena JS application SQL migrations.\n * Tooling-only — never imported by browser/runtime client paths.\n */\n\n/** Local migration file discovered under the migrations directory. */\nexport interface MigrationFile {\n  checksum: string;\n  filename: string;\n  name: string;\n  path: string;\n  sql: string;\n  version: number;\n}\n\n/** Row persisted in the application migration ledger. */\nexport interface AppliedMigration {\n  appliedAt: Date;\n  checksum: string;\n  executionMs: number;\n  name: string;\n  version: number;\n}\n\nexport type MigrationPlanStatus = \"applied\" | \"pending\";\n\nexport type MigrationConflictKind = \"checksum-mismatch\" | \"missing-local\";\n\nexport type MigrationDisplayStatus =\n  | MigrationPlanStatus\n  | MigrationConflictKind;\n\nexport interface MigrationPlanEntry {\n  migration: MigrationFile;\n  status: MigrationPlanStatus;\n}\n\nexport interface MigrationConflict {\n  applied?: AppliedMigration;\n  kind: MigrationConflictKind;\n  local?: MigrationFile;\n  version: number;\n}\n\nexport interface MigrationPlan {\n  applied: MigrationPlanEntry[];\n  conflicts: MigrationConflict[];\n  pending: MigrationPlanEntry[];\n}\n\n/** Result of applying a single migration successfully. */\nexport interface AppliedMigrationResult extends AppliedMigration {\n  filename: string;\n}\n\nexport interface MigrationBackend {\n  readonly kind: string;\n  acquireLock(): Promise<void>;\n  applyMigration(migration: MigrationFile): Promise<AppliedMigrationResult>;\n  close(): Promise<void>;\n  ensureLedger(): Promise<void>;\n  listAppliedMigrations(): Promise<AppliedMigration[]>;\n  releaseLock(): Promise<void>;\n}\n\nexport type MigrationCommandMode = \"apply\" | \"status\" | \"plan\" | \"dry-run\";\n\nexport interface RunMigrationsOptions {\n  /**\n   * When set, overrides config-resolved migrations directory\n   * (relative to cwd or absolute).\n   */\n  configPath?: string;\n  cwd?: string;\n  /** Defaults to false. When true, never mutates the database. */\n  dryRun?: boolean;\n  /**\n   * Injectable backend factory for tests. When omitted, created from config.\n   */\n  createBackend?: (context: MigrationBackendContext) => Promise<MigrationBackend>;\n  /**\n   * Injectable discovery for tests.\n   */\n  discover?: (directory: string) => Promise<MigrationFile[]>;\n  log?: (message: string) => void;\n  mode?: MigrationCommandMode;\n}\n\nexport interface MigrationBackendContext {\n  connectionString: string;\n  database?: string;\n}\n\nexport interface MigrationRunSummary {\n  appliedCount: number;\n  conflicts: MigrationConflict[];\n  directory: string;\n  dryRun: boolean;\n  failedCount: number;\n  mode: MigrationCommandMode;\n  pendingCount: number;\n  plan: MigrationPlan;\n  providerLabel: string;\n  databaseLabel: string;\n  skippedCount: number;\n  newlyApplied: AppliedMigrationResult[];\n}\n\nexport class MigrationError extends Error {\n  readonly code:\n    | \"CONFIG\"\n    | \"DISCOVERY\"\n    | \"INTEGRITY\"\n    | \"HISTORY\"\n    | \"PROVIDER\"\n    | \"EXECUTION\"\n    | \"LOCK\"\n    | \"LEDGER\";\n\n  constructor(\n    code: MigrationError[\"code\"],\n    message: string,\n    options?: { cause?: unknown }\n  ) {\n    super(message, options?.cause !== undefined ? { cause: options.cause } : undefined);\n    this.name = \"MigrationError\";\n    this.code = code;\n  }\n}\n","import { MigrationError } from \"./types.ts\";\n\n/**\n * Transaction-control forms that would terminate the runner's outer transaction\n * if executed inside migration SQL. Plain PL/pgSQL `BEGIN`/`END` blocks are\n * intentionally allowed.\n */\nconst TRANSACTION_CONTROL_RE =\n  /\\b(?:COMMIT(?:\\s+(?:WORK|TRANSACTION))?|ROLLBACK(?:\\s+(?:WORK|TRANSACTION))?|ABORT(?:\\s+(?:WORK|TRANSACTION))?|START\\s+TRANSACTION|BEGIN\\s+(?:WORK|TRANSACTION)|END\\s+TRANSACTION|PREPARE\\s+TRANSACTION)\\b/i;\n\n/**\n * Strips SQL comments and quoted literals so keyword scans avoid false positives\n * inside strings or comments. Not a full SQL parser.\n */\nexport function stripSqlCommentsAndLiterals(sql: string): string {\n  let output = \"\";\n  let index = 0;\n\n  while (index < sql.length) {\n    const ch = sql[index];\n    const next = sql[index + 1];\n\n    // Line comment\n    if (ch === \"-\" && next === \"-\") {\n      index += 2;\n      while (index < sql.length && sql[index] !== \"\\n\") {\n        index += 1;\n      }\n      output += \" \";\n      continue;\n    }\n\n    // Block comment\n    if (ch === \"/\" && next === \"*\") {\n      index += 2;\n      while (index < sql.length) {\n        if (sql[index] === \"*\" && sql[index + 1] === \"/\") {\n          index += 2;\n          break;\n        }\n        index += 1;\n      }\n      output += \" \";\n      continue;\n    }\n\n    // Single-quoted string ('' escapes)\n    if (ch === \"'\") {\n      index += 1;\n      while (index < sql.length) {\n        if (sql[index] === \"'\") {\n          if (sql[index + 1] === \"'\") {\n            index += 2;\n            continue;\n          }\n          index += 1;\n          break;\n        }\n        index += 1;\n      }\n      output += \" \";\n      continue;\n    }\n\n    // Dollar-quoted string: $tag$ ... $tag$\n    if (ch === \"$\") {\n      const rest = sql.slice(index);\n      const tagMatch = rest.match(/^\\$([A-Za-z_][\\w]*)?\\$/);\n      if (tagMatch) {\n        const opener = tagMatch[0];\n        index += opener.length;\n        const closer = opener;\n        const closeAt = sql.indexOf(closer, index);\n        if (closeAt === -1) {\n          // Unterminated: drop remainder\n          break;\n        }\n        index = closeAt + closer.length;\n        output += \" \";\n        continue;\n      }\n    }\n\n    output += ch;\n    index += 1;\n  }\n\n  return output;\n}\n\n/**\n * Returns the matched transaction-control keyword if present in executable SQL.\n */\nexport function findTransactionControlStatement(sql: string): string | undefined {\n  const scanned = stripSqlCommentsAndLiterals(sql);\n  const match = TRANSACTION_CONTROL_RE.exec(scanned);\n  if (!match) {\n    return undefined;\n  }\n  return match[0]?.replace(/\\s+/g, \" \").toUpperCase();\n}\n\n/**\n * Fail closed when migration SQL could end the runner-owned transaction.\n */\nexport function assertMigrationSqlAllowsOuterTransaction(\n  sql: string,\n  filename?: string\n): void {\n  const found = findTransactionControlStatement(sql);\n  if (!found) {\n    return;\n  }\n\n  const where = filename ? ` in ${filename}` : \"\";\n  throw new MigrationError(\n    \"DISCOVERY\",\n    [\n      \"Migration error:\",\n      `Transaction control statement ${found} is not allowed${where}.`,\n      \"\",\n      \"athena-js migrate wraps each migration in its own transaction and writes\",\n      \"the ledger row in that same transaction. COMMIT/ROLLBACK/START TRANSACTION\",\n      \"(and similar) would break that atomicity.\",\n      \"\",\n      \"Remove transaction control from the migration SQL. PL/pgSQL BEGIN/END blocks\",\n      \"inside functions remain allowed.\",\n    ].join(\"\\n\")\n  );\n}\n","import { readdir, readFile, stat } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { checksumMigrationSql } from \"./checksum.ts\";\nimport { DEFAULT_MIGRATIONS_DIRECTORY } from \"./constants.ts\";\nimport { assertMigrationSqlAllowsOuterTransaction } from \"./sql-guards.ts\";\nimport { MigrationError, type MigrationFile } from \"./types.ts\";\n\nexport { DEFAULT_MIGRATIONS_DIRECTORY };\n\n/**\n * Canonical filename pattern: `<digits>_<name>.sql`\n * Digits may be any positive length (0001, 01, 10001, …).\n * Gaps in version numbers are allowed; duplicates are not.\n */\nconst MIGRATION_FILENAME_RE = /^(\\d+)_(.+)\\.sql$/i;\n\nconst IGNORED_BASENAMES = new Set([\n  \".ds_store\",\n  \".gitkeep\",\n  \"readme\",\n  \"readme.md\",\n  \"readme.txt\",\n]);\n\nfunction shouldIgnoreEntry(filename: string): boolean {\n  const base = filename.toLowerCase();\n  if (base.startsWith(\".\")) {\n    return true;\n  }\n  if (IGNORED_BASENAMES.has(base)) {\n    return true;\n  }\n  // Non-SQL incidental files (docs, keep files) are ignored.\n  if (!base.endsWith(\".sql\")) {\n    return true;\n  }\n  return false;\n}\n\nfunction formatVersion(version: number, width: number): string {\n  return String(version).padStart(Math.max(width, 4), \"0\");\n}\n\n/**\n * Parses a migration basename into version + name.\n * Returns undefined when the name is not a migration SQL file pattern.\n */\nexport function parseMigrationFilename(\n  filename: string\n): { name: string; version: number } | undefined {\n  const match = MIGRATION_FILENAME_RE.exec(filename);\n  if (!match) {\n    return undefined;\n  }\n  const version = Number.parseInt(match[1] ?? \"\", 10);\n  const name = match[2] ?? \"\";\n  if (!Number.isFinite(version) || version < 0 || name.length === 0) {\n    return undefined;\n  }\n  return { name, version };\n}\n\nexport interface DiscoverMigrationsOptions {\n  /** Absolute or cwd-relative directory path. */\n  directory: string;\n  cwd?: string;\n}\n\n/**\n * Discovers and loads ordered migration files from a directory.\n *\n * Rules:\n * - Ignores incidental non-SQL files (README.md, .gitkeep, dotfiles).\n * - Rejects malformed `*.sql` filenames.\n * - Rejects duplicate versions.\n * - Orders by numeric version ascending (gaps allowed).\n */\nexport async function discoverMigrations(\n  options: DiscoverMigrationsOptions\n): Promise<MigrationFile[]> {\n  const cwd = options.cwd ?? process.cwd();\n  const absoluteDirectory = resolve(cwd, options.directory);\n\n  let directoryStat;\n  try {\n    directoryStat = await stat(absoluteDirectory);\n  } catch (error) {\n    const code =\n      typeof error === \"object\" &&\n      error !== null &&\n      \"code\" in error &&\n      typeof (error as { code?: unknown }).code === \"string\"\n        ? (error as { code: string }).code\n        : undefined;\n    if (code === \"ENOENT\") {\n      return [];\n    }\n    throw new MigrationError(\n      \"DISCOVERY\",\n      `Unable to read migration directory \"${options.directory}\": ${\n        error instanceof Error ? error.message : String(error)\n      }`,\n      { cause: error }\n    );\n  }\n\n  if (!directoryStat.isDirectory()) {\n    throw new MigrationError(\n      \"DISCOVERY\",\n      `Migration path \"${options.directory}\" is not a directory.`\n    );\n  }\n\n  let entries: string[];\n  try {\n    entries = await readdir(absoluteDirectory);\n  } catch (error) {\n    throw new MigrationError(\n      \"DISCOVERY\",\n      `Unable to list migration directory \"${options.directory}\": ${\n        error instanceof Error ? error.message : String(error)\n      }`,\n      { cause: error }\n    );\n  }\n\n  const parsed: Array<{\n    filename: string;\n    name: string;\n    path: string;\n    version: number;\n  }> = [];\n  const malformedSql: string[] = [];\n\n  for (const filename of entries) {\n      // Ignore README/.gitkeep/dotfiles and other non-SQL incidental files.\n      if (shouldIgnoreEntry(filename)) {\n        continue;\n      }\n\n      // Remaining entries are *.sql (shouldIgnore filters non-sql).\n      const identity = parseMigrationFilename(filename);\n      if (!identity) {\n        malformedSql.push(join(options.directory, filename).replace(/\\\\/g, \"/\"));\n        continue;\n      }\n\n      parsed.push({\n        filename,\n        name: identity.name,\n        path: join(absoluteDirectory, filename),\n        version: identity.version,\n      });\n    }\n\n  if (malformedSql.length > 0) {\n    throw new MigrationError(\n      \"DISCOVERY\",\n      [\n        \"Migration error:\",\n        \"Malformed migration filename(s). Expected <digits>_<name>.sql:\",\n        ...malformedSql.map((path) => `  ${path}`),\n      ].join(\"\\n\")\n    );\n  }\n\n  const byVersion = new Map<number, string[]>();\n  for (const item of parsed) {\n    const list = byVersion.get(item.version) ?? [];\n    list.push(join(options.directory, item.filename).replace(/\\\\/g, \"/\"));\n    byVersion.set(item.version, list);\n  }\n\n  const duplicates = [...byVersion.entries()].filter(\n    ([, paths]) => paths.length > 1\n  );\n  if (duplicates.length > 0) {\n    const blocks = duplicates.map(([version, paths]) => {\n      const width = Math.max(\n        4,\n        ...paths.map((p) => {\n          const base = p.split(\"/\").pop() ?? \"\";\n          const m = /^(\\d+)_/.exec(base);\n          return m?.[1]?.length ?? 4;\n        })\n      );\n      return [\n        `Duplicate migration version ${formatVersion(version, width)}:`,\n        ...paths.map((path) => `  ${path}`),\n      ].join(\"\\n\");\n    });\n    throw new MigrationError(\n      \"DISCOVERY\",\n      [\"Migration error:\", ...blocks].join(\"\\n\")\n    );\n  }\n\n  parsed.sort((a, b) => a.version - b.version || a.filename.localeCompare(b.filename));\n\n  const migrations: MigrationFile[] = [];\n  for (const item of parsed) {\n    let sql: string;\n    try {\n      sql = await readFile(item.path, \"utf8\");\n    } catch (error) {\n      throw new MigrationError(\n        \"DISCOVERY\",\n        `Unable to read migration file \"${item.filename}\": ${\n          error instanceof Error ? error.message : String(error)\n        }`,\n        { cause: error }\n      );\n    }\n\n    assertMigrationSqlAllowsOuterTransaction(sql, item.filename);\n\n        migrations.push({\n          checksum: checksumMigrationSql(sql),\n          filename: item.filename,\n          name: item.name,\n          path: item.path,\n          sql,\n          version: item.version,\n        });\n      }\n\n  return migrations;\n}\n","import type {\n  AppliedMigration,\n  MigrationConflict,\n  MigrationFile,\n  MigrationPlan,\n  MigrationPlanEntry,\n} from \"./types.ts\";\n\nexport interface PlanMigrationsInput {\n  applied: readonly AppliedMigration[];\n  local: readonly MigrationFile[];\n}\n\n/**\n * Pure planner: compares local migration files with ledger rows.\n *\n * - applied: local files present in ledger with matching checksum\n * - pending: local files not yet in ledger\n * - conflicts: checksum-mismatch or missing-local (DB ahead / deleted file)\n *\n * Duplicate applied rows for the same version are treated as integrity conflicts\n * when checksums disagree with local or with each other.\n */\nexport function planMigrations(input: PlanMigrationsInput): MigrationPlan {\n  const localByVersion = new Map<number, MigrationFile>();\n  for (const file of input.local) {\n    localByVersion.set(file.version, file);\n  }\n\n  const appliedByVersion = new Map<number, AppliedMigration[]>();\n  for (const row of input.applied) {\n    const list = appliedByVersion.get(row.version) ?? [];\n    list.push(row);\n    appliedByVersion.set(row.version, list);\n  }\n\n  const conflicts: MigrationConflict[] = [];\n  const appliedEntries: MigrationPlanEntry[] = [];\n  const pendingEntries: MigrationPlanEntry[] = [];\n\n  const versions = new Set<number>([\n    ...localByVersion.keys(),\n    ...appliedByVersion.keys(),\n  ]);\n  const orderedVersions = [...versions].sort((a, b) => a - b);\n\n  for (const version of orderedVersions) {\n    const local = localByVersion.get(version);\n    const appliedRows = appliedByVersion.get(version) ?? [];\n\n    if (appliedRows.length > 1) {\n      const checksums = new Set(appliedRows.map((row) => row.checksum));\n      if (checksums.size > 1 || (local && !checksums.has(local.checksum))) {\n        conflicts.push({\n          applied: appliedRows[0],\n          kind: \"checksum-mismatch\",\n          local,\n          version,\n        });\n        continue;\n      }\n    }\n\n    const applied = appliedRows[0];\n\n    if (applied && !local) {\n      conflicts.push({\n        applied,\n        kind: \"missing-local\",\n        version,\n      });\n      continue;\n    }\n\n    if (applied && local) {\n      if (applied.checksum !== local.checksum) {\n        conflicts.push({\n          applied,\n          kind: \"checksum-mismatch\",\n          local,\n          version,\n        });\n        continue;\n      }\n      appliedEntries.push({ migration: local, status: \"applied\" });\n      continue;\n    }\n\n    if (local) {\n      pendingEntries.push({ migration: local, status: \"pending\" });\n    }\n  }\n\n  return {\n    applied: appliedEntries,\n    conflicts,\n    pending: pendingEntries,\n  };\n}\n\nexport function planHasBlockingConflicts(plan: MigrationPlan): boolean {\n  return plan.conflicts.length > 0;\n}\n","import {\n  type AthenaPostgresClient,\n  type AthenaPostgresPool,\n  createPostgresPool,\n} from \"../postgres/driver.ts\";\nimport type { MigrationBackend } from \"./backend.ts\";\nimport { assertMigrationSqlAllowsOuterTransaction } from \"./sql-guards.ts\";\nimport {\n  type AppliedMigration,\n  type AppliedMigrationResult,\n  type MigrationBackendContext,\n  MigrationError,\n  type MigrationFile,\n} from \"./types.ts\";\n\n/**\n * Stable session advisory-lock key pair for Athena JS app migrations.\n * Derived from ASCII \"ATHA\" / \"MIGS\" — not a secret; must remain fixed.\n */\nexport const ATHENA_MIGRATION_LOCK_KEY1 = 0x41_54_48_41; // ATHA\nexport const ATHENA_MIGRATION_LOCK_KEY2 = 0x4d_49_47_53; // MIGS\n\nconst LEDGER_BOOTSTRAP_SQL = `\nCREATE SCHEMA IF NOT EXISTS athena;\n\nCREATE TABLE IF NOT EXISTS athena.schema_migrations (\n  version BIGINT PRIMARY KEY,\n  name TEXT NOT NULL,\n  checksum TEXT NOT NULL,\n  applied_at TIMESTAMPTZ NOT NULL DEFAULT now(),\n  execution_ms BIGINT NOT NULL\n);\n`.trim();\n\nconst LIST_APPLIED_SQL = `\nSELECT version, name, checksum, applied_at, execution_ms\nFROM athena.schema_migrations\nORDER BY version ASC\n`.trim();\n\ninterface LedgerRow {\n  applied_at: Date | string;\n  checksum: string;\n  execution_ms: string | number | bigint;\n  name: string;\n  version: string | number | bigint;\n}\n\nfunction toNumber(value: string | number | bigint): number {\n  if (typeof value === \"number\") {\n    return value;\n  }\n  if (typeof value === \"bigint\") {\n    return Number(value);\n  }\n  return Number.parseInt(value, 10);\n}\n\nfunction toDate(value: Date | string): Date {\n  if (value instanceof Date) {\n    return value;\n  }\n  return new Date(value);\n}\n\nfunction mapLedgerRow(row: LedgerRow): AppliedMigration {\n  return {\n    appliedAt: toDate(row.applied_at),\n    checksum: row.checksum,\n    executionMs: toNumber(row.execution_ms),\n    name: row.name,\n    version: toNumber(row.version),\n  };\n}\n\nfunction sanitizePgMessage(message: string): string {\n  // Strip common connection-string shapes if a driver ever embeds them.\n  return message\n    .replace(/postgres(?:ql)?:\\/\\/[^\\s'\"]+/gi, \"[redacted-connection]\")\n    .replace(/password\\s*=\\s*[^;\\s]+/gi, \"password=[redacted]\");\n}\n\n/** True when athena.schema_migrations (or schema athena) is not present yet. */\nfunction isMissingLedgerError(error: unknown): boolean {\n  if (error && typeof error === \"object\") {\n    const code =\n      \"code\" in error && (error as { code?: unknown }).code != null\n        ? String((error as { code?: unknown }).code)\n        : \"\";\n    // 42P01 undefined_table, 3F000 invalid_schema_name\n    if (code === \"42P01\" || code === \"3F000\") {\n      return true;\n    }\n  }\n\n  const message = error instanceof Error ? error.message : String(error);\n  return (\n    /relation [\"']?athena\\.schema_migrations[\"']? does not exist/i.test(\n      message\n    ) ||\n    /relation [\"']?schema_migrations[\"']? does not exist/i.test(message) ||\n    /schema [\"']?athena[\"']? does not exist/i.test(message)\n  );\n}\n\nexport interface PostgresMigrationBackendOptions extends MigrationBackendContext {\n  pool?: AthenaPostgresPool;\n}\n\n/**\n * Applies `provider.database` (or PGDATABASE fallback) onto the connection URL\n * path so the pool targets the configured database even when the URL omits it\n * or names a different database.\n *\n * Does not log or return secrets beyond rewriting the pathname.\n */\nexport function applyDatabaseToConnectionString(\n  connectionString: string,\n  database?: string\n): string {\n  const trimmed = typeof database === \"string\" ? database.trim() : \"\";\n  if (trimmed.length === 0) {\n    return connectionString;\n  }\n\n  try {\n    const usesPostgresql = /^postgresql:/i.test(connectionString);\n    const normalized = connectionString.replace(/^postgresql:/i, \"postgres:\");\n    const url = new URL(normalized);\n    if (url.protocol !== \"postgres:\") {\n      return connectionString;\n    }\n\n    const current = decodeURIComponent(url.pathname.replace(/^\\/+/, \"\"));\n    if (current === trimmed) {\n      return connectionString;\n    }\n\n    url.pathname = `/${encodeURIComponent(trimmed)}`;\n    const rewritten = url.toString();\n    return usesPostgresql\n      ? rewritten.replace(/^postgres:/i, \"postgresql:\")\n      : rewritten;\n  } catch {\n    return connectionString;\n  }\n}\n\n/**\n * Pool options for migration backends: connection string plus explicit database\n * override so node-pg cannot silently ignore a configured database name.\n */\nexport function buildPostgresMigrationPoolOptions(\n  connectionString: string,\n  database?: string\n): {\n  connectionString: string;\n  poolConfig: { database?: string };\n} {\n  const trimmed = typeof database === \"string\" ? database.trim() : \"\";\n  const resolvedConnectionString = applyDatabaseToConnectionString(\n    connectionString,\n    trimmed || undefined\n  );\n  return {\n    connectionString: resolvedConnectionString,\n    poolConfig: trimmed.length > 0 ? { database: trimmed } : {},\n  };\n}\n\n/**\n * PostgreSQL direct-mode migration backend.\n *\n * - Idempotent ledger bootstrap under schema `athena`\n * - Session advisory lock held for the full run\n * - One transaction per migration (SQL + ledger insert)\n */\nexport class PostgresMigrationBackend implements MigrationBackend {\n  readonly kind = \"postgres\";\n\n  private readonly connectionString: string;\n  private readonly database?: string;\n  private pool: AthenaPostgresPool | undefined;\n  private ownsPool: boolean;\n  private client: AthenaPostgresClient | undefined;\n  private lockHeld = false;\n\n  constructor(options: PostgresMigrationBackendOptions) {\n    this.connectionString = options.connectionString;\n    this.database =\n      typeof options.database === \"string\" && options.database.trim().length > 0\n        ? options.database.trim()\n        : undefined;\n    this.pool = options.pool;\n    this.ownsPool = !options.pool;\n  }\n\n  private async ensureClient(): Promise<AthenaPostgresClient> {\n    if (this.client) {\n      return this.client;\n    }\n    if (!this.pool) {\n      const { connectionString, poolConfig } = buildPostgresMigrationPoolOptions(\n        this.connectionString,\n        this.database\n      );\n      this.pool = await createPostgresPool(connectionString, poolConfig);\n      this.ownsPool = true;\n    }\n    this.client = await this.pool.connect();\n    return this.client;\n  }\n\n  async acquireLock(): Promise<void> {\n    const client = await this.ensureClient();\n    try {\n      await client.query(\"SELECT pg_advisory_lock($1, $2)\", [\n        ATHENA_MIGRATION_LOCK_KEY1,\n        ATHENA_MIGRATION_LOCK_KEY2,\n      ]);\n      this.lockHeld = true;\n    } catch (error) {\n      throw new MigrationError(\n        \"LOCK\",\n        `Unable to acquire migration advisory lock: ${sanitizePgMessage(\n          error instanceof Error ? error.message : String(error)\n        )}`,\n        { cause: error }\n      );\n    }\n  }\n\n  async releaseLock(): Promise<void> {\n    if (!(this.client && this.lockHeld)) {\n      return;\n    }\n    try {\n      await this.client.query(\"SELECT pg_advisory_unlock($1, $2)\", [\n        ATHENA_MIGRATION_LOCK_KEY1,\n        ATHENA_MIGRATION_LOCK_KEY2,\n      ]);\n    } catch {\n      // Session end / pool release will drop session-level locks.\n    } finally {\n      this.lockHeld = false;\n    }\n  }\n\n  async ensureLedger(): Promise<void> {\n    const client = await this.ensureClient();\n    try {\n      await client.query(LEDGER_BOOTSTRAP_SQL);\n    } catch (error) {\n      throw new MigrationError(\n        \"LEDGER\",\n        `Unable to create migration ledger (athena.schema_migrations): ${sanitizePgMessage(\n          error instanceof Error ? error.message : String(error)\n        )}`,\n        { cause: error }\n      );\n    }\n  }\n\n  async listAppliedMigrations(): Promise<AppliedMigration[]> {\n    const client = await this.ensureClient();\n    try {\n      const result = await client.query<LedgerRow>(LIST_APPLIED_SQL);\n      return result.rows.map(mapLedgerRow);\n    } catch (error) {\n        // status / plan / dry-run may run before the ledger exists; treat as empty.\n        if (isMissingLedgerError(error)) {\n          return [];\n        }\n        throw new MigrationError(\n          \"LEDGER\",\n          `Unable to read migration ledger: ${sanitizePgMessage(\n            error instanceof Error ? error.message : String(error)\n          )}`,\n          { cause: error }\n        );\n      }\n    }\n\n  async applyMigration(\n    migration: MigrationFile\n  ): Promise<AppliedMigrationResult> {\n      // Fail closed before opening a transaction if SQL could terminate it.\n      assertMigrationSqlAllowsOuterTransaction(migration.sql, migration.filename);\n\n      const client = await this.ensureClient();\n      const started = Date.now();\n\n      try {\n        await client.query(\"BEGIN\");\n      } catch (error) {\n        throw new MigrationError(\n          \"EXECUTION\",\n          `Failed to begin transaction for ${migration.filename}: ${sanitizePgMessage(\n            error instanceof Error ? error.message : String(error)\n          )}`,\n          { cause: error }\n        );\n      }\n\n      try {\n        // Execute the full SQL file as authored (no semicolon splitting).\n        await client.query(migration.sql);\n\n      const executionMs = Math.max(0, Date.now() - started);\n      await client.query(\n        `\nINSERT INTO athena.schema_migrations (version, name, checksum, execution_ms)\nVALUES ($1, $2, $3, $4)\n`.trim(),\n        [migration.version, migration.name, migration.checksum, executionMs]\n      );\n\n      await client.query(\"COMMIT\");\n\n      return {\n        appliedAt: new Date(),\n        checksum: migration.checksum,\n        executionMs,\n        filename: migration.filename,\n        name: migration.name,\n        version: migration.version,\n      };\n    } catch (error) {\n      try {\n        await client.query(\"ROLLBACK\");\n      } catch {\n        // ignore rollback errors; surface original failure\n      }\n\n      throw new MigrationError(\n        \"EXECUTION\",\n        [\n          \"Migration failed\",\n          \"\",\n          migration.filename,\n          \"\",\n          \"PostgreSQL:\",\n          sanitizePgMessage(\n            error instanceof Error ? error.message : String(error)\n          ),\n          \"\",\n          \"The migration was rolled back.\",\n          \"No later migrations were attempted.\",\n        ].join(\"\\n\"),\n        { cause: error }\n      );\n    }\n  }\n\n  async close(): Promise<void> {\n    try {\n      await this.releaseLock();\n    } finally {\n      if (this.client) {\n        try {\n          this.client.release();\n        } catch {\n          // ignore\n        }\n        this.client = undefined;\n      }\n      if (this.pool && this.ownsPool) {\n        try {\n          await this.pool.end();\n        } catch {\n          // ignore\n        }\n      }\n      this.pool = undefined;\n    }\n  }\n}\n\nexport async function createPostgresMigrationBackend(\n  context: MigrationBackendContext\n): Promise<MigrationBackend> {\n  return new PostgresMigrationBackend(context);\n}\n","import { resolve } from \"node:path\";\nimport { loadGeneratorConfig } from \"../generator/config.ts\";\nimport type { NormalizedAthenaGeneratorConfig } from \"../generator/types.ts\";\nimport type { MigrationBackend } from \"./backend.ts\";\nimport {\n  DEFAULT_MIGRATIONS_DIRECTORY,\n  discoverMigrations,\n} from \"./discovery.ts\";\nimport { planHasBlockingConflicts, planMigrations } from \"./planner.ts\";\nimport { createPostgresMigrationBackend } from \"./postgres.ts\";\nimport {\n  type AppliedMigrationResult,\n  type MigrationCommandMode,\n  MigrationError,\n  type MigrationPlan,\n  type MigrationRunSummary,\n  type RunMigrationsOptions,\n} from \"./types.ts\";\n\nfunction resolveMigrationsDirectory(\n  config: NormalizedAthenaGeneratorConfig,\n  cwd: string\n): string {\n  const configured = config.migrations.directory;\n  return resolve(cwd, configured || DEFAULT_MIGRATIONS_DIRECTORY);\n}\n\nfunction providerLabel(config: NormalizedAthenaGeneratorConfig): string {\n  const { provider } = config;\n  if (provider.kind === \"postgres\") {\n    return `postgres/${provider.mode}`;\n  }\n  return `${provider.kind}/${provider.mode}`;\n}\n\nfunction databaseLabel(config: NormalizedAthenaGeneratorConfig): string {\n  const { provider } = config;\n  if (provider.kind === \"postgres\") {\n    if (provider.mode === \"direct\") {\n      return provider.database ?? extractDatabaseName(provider.connectionString) ?? \"postgres\";\n    }\n    return provider.database;\n  }\n  if (provider.kind === \"scylla\") {\n    return provider.keyspace;\n  }\n  return \"unknown\";\n}\n\nfunction extractDatabaseName(connectionString: string): string | undefined {\n  try {\n    const normalized = connectionString.replace(/^postgresql:/i, \"postgres:\");\n    const url = new URL(normalized);\n    const name = url.pathname.replace(/^\\//, \"\");\n    return name.length > 0 ? decodeURIComponent(name) : undefined;\n  } catch {\n    return undefined;\n  }\n}\n\nfunction relativeDirectoryDisplay(cwd: string, absoluteDirectory: string): string {\n  const normalizedCwd = cwd.replace(/\\\\/g, \"/\");\n  const normalizedDir = absoluteDirectory.replace(/\\\\/g, \"/\");\n  if (normalizedDir.startsWith(`${normalizedCwd}/`)) {\n    return normalizedDir.slice(normalizedCwd.length + 1);\n  }\n  if (normalizedDir === normalizedCwd) {\n    return \".\";\n  }\n  return absoluteDirectory.replace(/\\\\/g, \"/\");\n}\n\nfunction formatConflictBlock(plan: MigrationPlan): string {\n  const lines: string[] = [];\n  for (const conflict of plan.conflicts) {\n    if (conflict.kind === \"checksum-mismatch\") {\n      const filename =\n        conflict.local?.filename ??\n        `${String(conflict.version).padStart(4, \"0\")}_${conflict.applied?.name ?? \"unknown\"}.sql`;\n      lines.push(\n        [\n          \"Migration integrity error\",\n          \"\",\n          `${filename} was already applied but its contents have changed.`,\n          \"\",\n          \"Stored checksum:\",\n          conflict.applied?.checksum ?? \"(missing)\",\n          \"\",\n          \"Current checksum:\",\n          conflict.local?.checksum ?? \"(missing local file)\",\n          \"\",\n          \"Applied migrations are immutable.\",\n          \"Create a new migration instead of editing an applied migration.\",\n        ].join(\"\\n\")\n      );\n      continue;\n    }\n\n    if (conflict.kind === \"missing-local\") {\n      const label = conflict.applied\n        ? `${String(conflict.version).padStart(4, \"0\")}_${conflict.applied.name}`\n        : String(conflict.version).padStart(4, \"0\");\n      lines.push(\n        [\n          \"Migration history conflict\",\n          \"\",\n          `Database contains migration ${label}`,\n          \"but no matching local migration exists.\",\n          \"\",\n          \"Refusing to continue because this checkout is older than the database migration history.\",\n        ].join(\"\\n\")\n      );\n    }\n  }\n  return lines.join(\"\\n\\n\");\n}\n\nfunction assertDirectPostgres(\n  config: NormalizedAthenaGeneratorConfig\n): { connectionString: string; database?: string } {\n  const { provider } = config;\n  if (provider.kind !== \"postgres\") {\n    throw new MigrationError(\n      \"PROVIDER\",\n      `athena-js migrate currently requires a direct PostgreSQL provider.\\nUnsupported provider: ${provider.kind}/${provider.mode}.`\n    );\n  }\n  if (provider.mode !== \"direct\") {\n    throw new MigrationError(\n      \"PROVIDER\",\n      [\n        \"athena-js migrate currently requires a direct PostgreSQL provider.\",\n        \"Gateway-backed migration execution is not yet supported.\",\n        \"Raw DDL needs privileged database access outside the normal query gateway.\",\n      ].join(\"\\n\")\n    );\n  }\n  if (!provider.connectionString) {\n    throw new MigrationError(\n      \"CONFIG\",\n      \"Direct PostgreSQL provider is missing connectionString (set DATABASE_URL / PG_URL or provider.connectionString).\"\n    );\n  }\n  return {\n    connectionString: provider.connectionString,\n    database: provider.database,\n  };\n}\n\nfunction padFilename(filename: string, width = 34): string {\n  if (filename.length >= width) {\n    return filename;\n  }\n  return filename + \" \".repeat(width - filename.length);\n}\n\nfunction printHeader(\n  log: (message: string) => void,\n  summary: Pick<\n    MigrationRunSummary,\n    \"providerLabel\" | \"databaseLabel\" | \"directory\"\n  >\n): void {\n  log(\"Athena migrations\");\n  log(\"\");\n  log(`Provider: ${summary.providerLabel}`);\n  log(`Database: ${summary.databaseLabel}`);\n  log(`Directory: ${summary.directory}`);\n  log(\"\");\n}\n\n/**\n * Programmatic migration runner (Node/tooling only).\n */\nexport async function runMigrations(\n  options: RunMigrationsOptions = {}\n): Promise<MigrationRunSummary> {\n  const cwd = options.cwd ?? process.cwd();\n  const log = options.log ?? (() => undefined);\n  const mode: MigrationCommandMode =\n    options.mode ?? (options.dryRun ? \"dry-run\" : \"apply\");\n  const dryRun = mode === \"dry-run\" || mode === \"plan\" || Boolean(options.dryRun);\n\n  const loaded = await loadGeneratorConfig({\n    configPath: options.configPath,\n    cwd,\n  });\n  const config = loaded.config;\n  const absoluteDirectory = resolveMigrationsDirectory(config, cwd);\n  const directoryDisplay = relativeDirectoryDisplay(cwd, absoluteDirectory);\n\n  const discover = options.discover ?? ((directory: string) =>\n    discoverMigrations({ cwd, directory })\n  );\n\n  // Discovery uses path relative to cwd when possible\n  const local = await discover(\n    absoluteDirectory.startsWith(cwd)\n      ? relativeDirectoryDisplay(cwd, absoluteDirectory)\n      : absoluteDirectory\n  );\n\n  const needsBackend = true;\n  let backend: MigrationBackend | undefined;\n  const newlyApplied: AppliedMigrationResult[] = [];\n  let plan: MigrationPlan = { applied: [], conflicts: [], pending: [] };\n\n  try {\n    if (needsBackend) {\n      const pg = assertDirectPostgres(config);\n      backend =\n        (await options.createBackend?.({\n          connectionString: pg.connectionString,\n          database: pg.database,\n        })) ??\n        (await createPostgresMigrationBackend({\n          connectionString: pg.connectionString,\n          database: pg.database,\n        }));\n\n      await backend.acquireLock();\n            // Inspection modes must stay non-mutating: no CREATE SCHEMA/TABLE.\n            // Apply is the only mode allowed to bootstrap the ledger.\n            if (mode === \"apply\") {\n              await backend.ensureLedger();\n            }\n            const applied = await backend.listAppliedMigrations();\n            plan = planMigrations({ applied, local });\n          }\n\n    const summaryBase = {\n      databaseLabel: databaseLabel(config),\n      directory: directoryDisplay,\n      dryRun,\n      mode,\n      plan,\n      providerLabel: providerLabel(config),\n    };\n\n    if (mode === \"status\" || mode === \"plan\") {\n      printHeader(log, summaryBase);\n      if (local.length === 0 && plan.applied.length === 0 && plan.conflicts.length === 0) {\n        log(`No migration directory found at ${directoryDisplay}.`);\n        log(\"\");\n      }\n\n      log(\"Migration                              Status\");\n      for (const entry of plan.applied) {\n        log(`${padFilename(entry.migration.filename)} applied`);\n      }\n      for (const conflict of plan.conflicts) {\n        if (conflict.kind === \"checksum-mismatch\") {\n          const name =\n            conflict.local?.filename ??\n            `${String(conflict.version).padStart(4, \"0\")}_*.sql`;\n          log(`${padFilename(name)} checksum-mismatch`);\n        } else {\n          const name = conflict.applied\n            ? `${String(conflict.version).padStart(4, \"0\")}_${conflict.applied.name}`\n            : String(conflict.version);\n          log(`${padFilename(name)} missing-local`);\n        }\n      }\n      for (const entry of plan.pending) {\n        log(`${padFilename(entry.migration.filename)} pending`);\n      }\n      if (\n        plan.applied.length === 0 &&\n        plan.pending.length === 0 &&\n        plan.conflicts.length === 0\n      ) {\n        log(\"(none)\");\n      }\n      log(\"\");\n      log(`${plan.applied.length} applied`);\n      log(`${plan.pending.length} pending`);\n      log(`${plan.conflicts.length} conflict(s)`);\n\n      if (planHasBlockingConflicts(plan) && mode === \"plan\") {\n        log(\"\");\n        log(formatConflictBlock(plan));\n        throw new MigrationError(\"HISTORY\", formatConflictBlock(plan));\n      }\n\n      // status may display conflicts without failing closed unless history is broken\n      // Prefer fail-closed when conflicts exist so CI notices.\n      if (planHasBlockingConflicts(plan)) {\n        throw new MigrationError(\"HISTORY\", formatConflictBlock(plan));\n      }\n\n      return {\n        ...summaryBase,\n        appliedCount: plan.applied.length,\n        conflicts: plan.conflicts,\n        failedCount: 0,\n        newlyApplied: [],\n        pendingCount: plan.pending.length,\n        skippedCount: 0,\n      };\n    }\n\n    if (planHasBlockingConflicts(plan)) {\n      printHeader(log, summaryBase);\n      log(formatConflictBlock(plan));\n      throw new MigrationError(\"HISTORY\", formatConflictBlock(plan));\n    }\n\n    if (mode === \"dry-run\") {\n      printHeader(log, summaryBase);\n      if (plan.pending.length === 0) {\n        log(\"No pending migrations.\");\n        log(\"\");\n        log(\"No database changes were made.\");\n      } else {\n        log(\"Pending migrations:\");\n        for (const entry of plan.pending) {\n          log(`  ${entry.migration.filename}`);\n        }\n        log(\"\");\n        log(\"No database changes were made.\");\n      }\n      return {\n        ...summaryBase,\n        appliedCount: plan.applied.length,\n        conflicts: plan.conflicts,\n        failedCount: 0,\n        newlyApplied: [],\n        pendingCount: plan.pending.length,\n        skippedCount: plan.pending.length,\n      };\n    }\n\n    // apply\n    printHeader(log, summaryBase);\n\n    if (local.length === 0 && plan.pending.length === 0) {\n      log(\"No migrations found.\");\n      log(\"\");\n      log(\"0 applied\");\n      log(\"0 pending\");\n      return {\n        ...summaryBase,\n        appliedCount: 0,\n        conflicts: [],\n        failedCount: 0,\n        newlyApplied: [],\n        pendingCount: 0,\n        skippedCount: 0,\n      };\n    }\n\n    for (const entry of plan.applied) {\n      log(`✓ ${padFilename(entry.migration.filename)} already applied`);\n    }\n\n    if (plan.pending.length === 0) {\n      log(\"\");\n      log(\"Database is up to date.\");\n      log(\"\");\n      log(`${plan.applied.length} applied`);\n      log(\"0 pending\");\n      return {\n        ...summaryBase,\n        appliedCount: plan.applied.length,\n        conflicts: [],\n        failedCount: 0,\n        newlyApplied: [],\n        pendingCount: 0,\n        skippedCount: 0,\n      };\n    }\n\n    if (!backend) {\n      throw new MigrationError(\"PROVIDER\", \"Migration backend was not initialized.\");\n    }\n\n    for (const entry of plan.pending) {\n      log(`→ ${padFilename(entry.migration.filename)} applying`);\n      const result = await backend.applyMigration(entry.migration);\n      newlyApplied.push(result);\n      log(\n        `✓ ${padFilename(entry.migration.filename)} ${result.executionMs} ms`\n      );\n    }\n\n    log(\"\");\n    log(`${plan.applied.length + newlyApplied.length} migrations`);\n    log(`${newlyApplied.length} applied`);\n    log(`${plan.applied.length} unchanged`);\n    log(\"0 failed\");\n\n    return {\n      ...summaryBase,\n      appliedCount: plan.applied.length + newlyApplied.length,\n      conflicts: [],\n      failedCount: 0,\n      newlyApplied,\n      pendingCount: 0,\n      skippedCount: 0,\n    };\n  } catch (error) {\n    if (error instanceof MigrationError) {\n      throw error;\n    }\n    throw new MigrationError(\n      \"EXECUTION\",\n      error instanceof Error ? error.message : String(error),\n      { cause: error }\n    );\n  } finally {\n    if (backend) {\n      await backend.close();\n    }\n  }\n}\n","import { ensureGeneratorConfigFile } from \"../generator/config-file.ts\";\nimport { runSchemaGenerator } from \"../generator/pipeline.ts\";\nimport { runMigrations } from \"../migrations/runner.ts\";\nimport type { MigrationCommandMode } from \"../migrations/types.ts\";\nimport { MigrationError } from \"../migrations/types.ts\";\n\nfunction setCliExitCode(code: number): void {\n  const proc = (globalThis as { process?: { exitCode?: number } }).process;\n  if (proc) {\n    proc.exitCode = code;\n  }\n}\n\ninterface GenerateCommand {\n  command: \"generate\";\n  configPath?: string;\n  /** When false, skip live schema discovery. Default true. */\n  discoverSchemas: boolean;\n  dryRun: boolean;\n  /** When false, never write/update athena.config.ts. Default true. */\n  writeConfig: boolean;\n}\n\ninterface InitCommand {\n  command: \"init\";\n  configPath?: string;\n  discoverSchemas: boolean;\n  dryRun: boolean;\n  force: boolean;\n  mode: \"direct\" | \"gateway\" | \"auto\";\n}\n\ninterface MigrateCommand {\n  command: \"migrate\";\n  configPath?: string;\n  dryRun: boolean;\n  mode: Exclude<MigrationCommandMode, \"dry-run\"> | \"dry-run\";\n}\n\ninterface HelpCommand {\n  command: \"help\";\n  topic: \"root\" | \"generate\" | \"init\" | \"migrate\" | \"migrate-status\";\n}\n\ntype CliCommand = GenerateCommand | InitCommand | MigrateCommand | HelpCommand;\n\nexport interface CliRuntime {\n  ensureConfig?: typeof ensureGeneratorConfigFile;\n  /** Defaults to `console.error`. */\n  errorLog?: (message: string) => void;\n  log?: (message: string) => void;\n  runGenerator?: typeof runSchemaGenerator;\n  runMigrations?: typeof runMigrations;\n}\n\ninterface ErrorWithCode {\n  address?: unknown;\n  cause?: unknown;\n  code?: unknown;\n  errno?: unknown;\n  hostname?: unknown;\n  message?: unknown;\n  port?: unknown;\n  stack?: unknown;\n  syscall?: unknown;\n}\n\nfunction isDebugEnabled(): boolean {\n  const value = (\n    globalThis as { process?: { env?: Record<string, string | undefined> } }\n  ).process?.env?.ATHENA_JS_DEBUG;\n  return value === \"1\" || value === \"true\";\n}\n\nfunction rootUsage(): string {\n  return [\n    \"athena-js CLI\",\n    \"\",\n    \"Usage:\",\n    \"  athena-js generate [--config <path>] [--dry-run] [--no-write-config] [--no-discover-schemas]\",\n    \"  athena-js init [--config <path>] [--mode direct|gateway] [--force] [--dry-run] [--no-discover-schemas]\",\n    \"  athena-js migrate [--config <path>] [--dry-run]\",\n    \"  athena-js migrate status [--config <path>]\",\n    \"  athena-js migrate plan [--config <path>]\",\n    \"\",\n    \"Examples:\",\n    \"  athena-js init\",\n    \"  athena-js generate\",\n    \"  athena-js migrate\",\n    \"  athena-js migrate status\",\n    \"  DATABASE_URL=******127.0.0.1:5432/app_db athena-js generate --dry-run\",\n    \"  ATHENA_URL=https://athena.example.com ATHENA_API_KEY=secret athena-js init --mode gateway\",\n    \"  athena-js generate --config ./athena.config.ts --dry-run\",\n    \"  athena-js generate --help\",\n    \"  athena-js migrate --help\",\n  ].join(\"\\n\");\n}\n\nfunction migrateUsage(): string {\n  return [\n    \"athena-js migrate\",\n    \"\",\n    \"Usage:\",\n    \"  athena-js migrate [--config <path>] [--dry-run]\",\n    \"  athena-js migrate status [--config <path>]\",\n    \"  athena-js migrate plan [--config <path>]\",\n    \"\",\n    \"Options:\",\n    \"  --config <path>         Explicit path to athena.config.ts or athena-js.config.ts\",\n    \"  --dry-run               Show pending migrations without applying them\",\n    \"  -h, --help              Show help for migrate\",\n    \"\",\n    \"Behavior:\",\n    \"  - discovers ordered SQL files under athena/migrations (or config.migrations.directory)\",\n    \"  - requires provider.kind=postgres and provider.mode=direct\",\n    \"  - applies each pending migration in its own transaction with SHA-256 checksum ledger\",\n    \"  - uses a PostgreSQL session advisory lock against concurrent deploys\",\n    \"  - refuses checksum changes and database-ahead history conflicts (fail closed)\",\n    \"\",\n    \"Examples:\",\n    \"  athena-js migrate\",\n    \"  athena-js migrate --dry-run\",\n    \"  athena-js migrate status\",\n    \"  athena-js migrate plan\",\n    \"  athena-js migrate --config ./athena.config.ts\",\n  ].join(\"\\n\");\n}\n\nfunction migrateStatusUsage(): string {\n  return [\n    \"athena-js migrate status\",\n    \"\",\n    \"Usage:\",\n    \"  athena-js migrate status [--config <path>]\",\n    \"\",\n    \"Options:\",\n    \"  --config <path>         Explicit path to athena.config.ts or athena-js.config.ts\",\n    \"  -h, --help              Show help for migrate status\",\n    \"\",\n    \"Prints applied/pending/conflict rows from the local files + athena.schema_migrations ledger.\",\n    \"Does not apply migrations.\",\n  ].join(\"\\n\");\n}\nfunction generateUsage(): string {\n  return [\n    \"athena-js generate\",\n    \"\",\n    \"Usage:\",\n    \"  athena-js generate [--config <path>] [--dry-run] [--no-write-config] [--no-discover-schemas]\",\n    \"\",\n    \"Options:\",\n    \"  --config <path>         Explicit path to athena.config.ts or athena-js.config.ts\",\n    \"  --dry-run               Build generated files in memory without writing them to disk and print mode/target hints\",\n    \"  --no-write-config       Do not create/update athena.config.ts (env-only CI mode)\",\n    \"  --no-discover-schemas   Skip live schema discovery; use only configured/env schemas\",\n    \"  -h, --help              Show help for generate\",\n    \"\",\n    \"Config resolution:\",\n    \"  - uses athena.config.* discovery first\",\n    \"  - falls back to env-only direct mode when DATABASE_URL/PG_URL is present\",\n    \"  - falls back to env-only gateway mode when ATHENA_URL + ATHENA_API_KEY are present\",\n    \"  - by default creates/updates athena.config.ts intelligently (schemas auto-fill, no override when current)\",\n    \"\",\n    \"Examples:\",\n    \"  athena-js generate\",\n    \"  DATABASE_URL=postgres://postgres:postgres@127.0.0.1:5432/app_db athena-js generate --dry-run\",\n    \"  athena-js generate --config ./athena.config.ts --dry-run\",\n    \"  athena-js generate --no-write-config\",\n  ].join(\"\\n\");\n}\n\nfunction initUsage(): string {\n  return [\n    \"athena-js init\",\n    \"\",\n    \"Usage:\",\n    \"  athena-js init [--config <path>] [--mode direct|gateway] [--force] [--dry-run] [--no-discover-schemas]\",\n    \"\",\n    \"Options:\",\n    \"  --config <path>         Target path (default: athena.config.ts in cwd)\",\n    \"  --mode direct|gateway   Force provider mode (default: auto from env)\",\n    \"  --force                 Rewrite the full modern template even if a config already exists\",\n    \"  --dry-run               Print the planned action without writing\",\n    \"  --no-discover-schemas   Skip live schema discovery; keep public (or existing) schemas\",\n    \"  -h, --help              Show help for init\",\n    \"\",\n    \"Behavior:\",\n    \"  - missing file → write modern athena-direct config with generatorEnv-backed secrets\",\n    \"  - existing file → only patch provider.schemas when discovery finds new schemas\",\n    \"  - skips write when schemas already match (safe for typecheck / CI)\",\n    \"  - gateway mode works fully via ATHENA_URL + ATHENA_API_KEY env fallbacks\",\n    \"\",\n    \"Examples:\",\n    \"  athena-js init\",\n    \"  athena-js init --mode gateway\",\n    \"  athena-js init --dry-run\",\n    \"  athena-js init --force\",\n  ].join(\"\\n\");\n}\n\nfunction normalizePath(pathValue: string): string {\n  return pathValue.replace(/\\\\/g, \"/\");\n}\n\nfunction isLegacyConfigRegistryTarget(target: string): boolean {\n  const path = normalizePath(target);\n  return (\n    path === \"athena/config.ts\" ||\n    path === \"athena/registry.generated.ts\" ||\n    path.startsWith(\"athena/\")\n  );\n}\n\nfunction isFlatSchemaTarget(target: string): boolean {\n  return normalizePath(target) === \"athena/schema.ts\";\n}\n\nfunction isCanonicalRegistryTarget(target: string): boolean {\n  return (\n    normalizePath(target) === \"src/lib/athena/generated/registry.ts\"\n  );\n}\n\nfunction formatProviderLine(\n  result: Awaited<ReturnType<typeof runSchemaGenerator>>\n): string {\n  const { provider } = result.config;\n  if (provider.kind === \"postgres\") {\n    const schemaList = Array.isArray(provider.schemas)\n      ? provider.schemas.join(\",\")\n      : typeof provider.schemas === \"string\"\n        ? provider.schemas\n        : \"public\";\n    const database = provider.database ? ` database=${provider.database}` : \"\";\n    const backend =\n      provider.mode === \"gateway\" && provider.backend\n        ? ` backend=${provider.backend}`\n        : \"\";\n    return `[provider] kind=${provider.kind} mode=${provider.mode}${database}${backend} schemas=${schemaList}`;\n  }\n\n  const datacenter = provider.datacenter\n    ? ` datacenter=${provider.datacenter}`\n    : \"\";\n  return `[provider] kind=${provider.kind} mode=${provider.mode} keyspace=${provider.keyspace} contactPoints=${provider.contactPoints.join(\",\")}${datacenter}`;\n}\n\nfunction formatFilterLine(\n  result: Awaited<ReturnType<typeof runSchemaGenerator>>\n): string | undefined {\n  const { includeTables, excludeTables } = result.config.filter;\n  if (includeTables.length === 0 && excludeTables.length === 0) {\n    return;\n  }\n\n  return `[filter] include=${includeTables.length > 0 ? includeTables.join(\",\") : \"-\"} exclude=${excludeTables.length > 0 ? excludeTables.join(\",\") : \"-\"}`;\n}\n\nfunction formatGeneratorModeLines(\n  result: Awaited<ReturnType<typeof runSchemaGenerator>>\n): string[] {\n  const lines = [\n    `[mode] preset=${result.config.output.preset} format=${result.config.output.format} modelTarget=${result.config.output.targets.model}`,\n    formatProviderLine(result),\n    `[targets] schema=${result.config.output.targets.schema} database=${result.config.output.targets.database} registry=${result.config.output.targets.registry}`,\n  ];\n  const filterLine = formatFilterLine(result);\n  if (filterLine) {\n    lines.push(filterLine);\n  }\n\n  if (result.config.output.format === \"define-model\") {\n    lines.push(\n      '[note] Legacy define-model compatibility output is active. Set output.format=\"table-builder\" or ATHENA_GENERATOR_OUTPUT_FORMAT=table-builder to emit table(...).schema(...).columns(...).primaryKey(...).'\n    );\n  }\n\n  if (result.config.output.preset === \"legacy\") {\n    lines.push(\n      '[note] Legacy (N-1) preset is active — root athena/* output. Prefer output.preset=\"athena-direct\" for Architecture 4.0 src/lib/athena/generated/*.'\n    );\n  }\n\n  lines.push(\n    \"[note] Default generator mode is preset=athena-direct + format=table-builder → src/lib/athena/generated/. findManyAst only affects runtime findMany(...) transport and does not enable generator table output.\"\n  );\n\n  if (\n    isLegacyConfigRegistryTarget(result.config.output.targets.registry) &&\n    !isCanonicalRegistryTarget(result.config.output.targets.registry)\n  ) {\n    lines.push(\n      '[warn] Registry target is outside src/lib/athena/generated/registry.ts (N-1 layout). Prefer output.preset=\"athena-direct\" or migrate with create-athena-app migrate --to 4.'\n    );\n  }\n\n  if (isFlatSchemaTarget(result.config.output.targets.schema)) {\n    lines.push(\n      \"[warn] Schema target points at athena/schema.ts. Prefer schema-scoped output under src/lib/athena/generated/schema/{schema_kebab}.ts.\"\n    );\n  }\n\n  return lines;\n}\n\nexport function usage(topic: HelpCommand[\"topic\"] = \"root\"): string {\n  if (topic === \"generate\") {\n    return generateUsage();\n  }\n  if (topic === \"init\") {\n    return initUsage();\n  }\n  if (topic === \"migrate\") {\n    return migrateUsage();\n  }\n  if (topic === \"migrate-status\") {\n    return migrateStatusUsage();\n  }\n  return rootUsage();\n}\n\nfunction parseMigrateCommand(rest: string[]): CliCommand {\n  let configPath: string | undefined;\n  let dryRun = false;\n  let mode: MigrateCommand[\"mode\"] = \"apply\";\n\n  for (let index = 0; index < rest.length; index += 1) {\n    const token = rest[index];\n    if (token === \"--help\" || token === \"-h\") {\n      if (mode === \"status\") {\n        return { command: \"help\", topic: \"migrate-status\" };\n      }\n      return { command: \"help\", topic: \"migrate\" };\n    }\n\n    if (token === \"status\") {\n      if (mode !== \"apply\" || dryRun) {\n        throw new Error(\n          'Unexpected \"status\" subcommand placement. Use: athena-js migrate status'\n        );\n      }\n      mode = \"status\";\n      continue;\n    }\n\n    if (token === \"plan\") {\n      if (mode !== \"apply\" || dryRun) {\n        throw new Error(\n          'Unexpected \"plan\" subcommand placement. Use: athena-js migrate plan'\n        );\n      }\n      mode = \"plan\";\n      continue;\n    }\n\n    if (token === \"--dry-run\") {\n      if (mode === \"status\" || mode === \"plan\") {\n        throw new Error(\n          `--dry-run cannot be combined with migrate ${mode}.`\n        );\n      }\n      dryRun = true;\n      mode = \"dry-run\";\n      continue;\n    }\n\n    if (token === \"--config\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --config option.\");\n      }\n      configPath = nextValue;\n      index += 1;\n      continue;\n    }\n\n    throw new Error(`Unknown option \"${token}\".`);\n  }\n\n  return {\n    command: \"migrate\",\n    configPath,\n    dryRun: mode === \"dry-run\",\n    mode,\n  };\n}\n\nexport function parseCommand(argv: string[]): CliCommand {\n  if (argv.length === 0 || argv[0] === \"--help\" || argv[0] === \"-h\") {\n    return { command: \"help\", topic: \"root\" };\n  }\n\n  if (argv[0] === \"help\") {\n    if (argv.length === 1) {\n      return { command: \"help\", topic: \"root\" };\n    }\n\n    if (argv[1] === \"generate\") {\n      return { command: \"help\", topic: \"generate\" };\n    }\n\n    if (argv[1] === \"init\") {\n      return { command: \"help\", topic: \"init\" };\n    }\n\n    if (argv[1] === \"migrate\") {\n      if (argv[2] === \"status\") {\n        return { command: \"help\", topic: \"migrate-status\" };\n      }\n      return { command: \"help\", topic: \"migrate\" };\n    }\n\n    throw new Error(`Unknown command \"${argv[1]}\".`);\n  }\n\n  const [command, ...rest] = argv;\n  if (command !== \"generate\" && command !== \"init\" && command !== \"migrate\") {\n    throw new Error(\n      `Unknown command \"${command}\". Expected \"generate\", \"init\", or \"migrate\".`\n    );\n  }\n\n  if (command === \"migrate\") {\n    return parseMigrateCommand(rest);\n  }\n\n  if (command === \"init\") {\n    let configPath: string | undefined;\n    let dryRun = false;\n    let force = false;\n    let mode: InitCommand[\"mode\"] = \"auto\";\n    let discoverSchemas = true;\n\n    for (let index = 0; index < rest.length; index += 1) {\n      const token = rest[index];\n      if (token === \"--help\" || token === \"-h\") {\n        return { command: \"help\", topic: \"init\" };\n      }\n\n      if (token === \"--dry-run\") {\n        dryRun = true;\n        continue;\n      }\n\n      if (token === \"--force\") {\n        force = true;\n        continue;\n      }\n\n      if (token === \"--no-discover-schemas\") {\n        discoverSchemas = false;\n        continue;\n      }\n\n      if (token === \"--mode\") {\n        const nextValue = rest[index + 1];\n        if (!nextValue || nextValue.startsWith(\"-\")) {\n          throw new Error(\n            \"Missing value for --mode option. Expected direct or gateway.\"\n          );\n        }\n        if (\n          nextValue !== \"direct\" &&\n          nextValue !== \"gateway\" &&\n          nextValue !== \"auto\"\n        ) {\n          throw new Error(\n            `Invalid --mode value \"${nextValue}\". Expected direct, gateway, or auto.`\n          );\n        }\n        mode = nextValue;\n        index += 1;\n        continue;\n      }\n\n      if (token === \"--config\") {\n        const nextValue = rest[index + 1];\n        if (!nextValue || nextValue.startsWith(\"-\")) {\n          throw new Error(\"Missing value for --config option.\");\n        }\n        configPath = nextValue;\n        index += 1;\n        continue;\n      }\n\n      throw new Error(`Unknown option \"${token}\".`);\n    }\n\n    return {\n      command: \"init\",\n      configPath,\n      discoverSchemas,\n      dryRun,\n      force,\n      mode,\n    };\n  }\n\n  let configPath: string | undefined;\n  let dryRun = false;\n  let writeConfig = true;\n  let discoverSchemas = true;\n\n  for (let index = 0; index < rest.length; index += 1) {\n    const token = rest[index];\n    if (token === \"--help\" || token === \"-h\") {\n      return { command: \"help\", topic: \"generate\" };\n    }\n\n    if (token === \"--dry-run\") {\n      dryRun = true;\n      continue;\n    }\n\n    if (token === \"--no-write-config\") {\n      writeConfig = false;\n      continue;\n    }\n\n    if (token === \"--write-config\") {\n      writeConfig = true;\n      continue;\n    }\n\n    if (token === \"--no-discover-schemas\") {\n      discoverSchemas = false;\n      continue;\n    }\n\n    if (token === \"--config\") {\n      const nextValue = rest[index + 1];\n      if (!nextValue || nextValue.startsWith(\"-\")) {\n        throw new Error(\"Missing value for --config option.\");\n      }\n      configPath = nextValue;\n      index += 1;\n      continue;\n    }\n\n    throw new Error(`Unknown option \"${token}\".`);\n  }\n\n  return {\n    command: \"generate\",\n    configPath,\n    discoverSchemas,\n    dryRun,\n    writeConfig,\n  };\n}\n\nfunction normalizeErrorMessage(error: unknown): string {\n  if (error instanceof Error) {\n    return error.message;\n  }\n  if (typeof error === \"string\") {\n    return error;\n  }\n  return \"Unknown generator error.\";\n}\n\nfunction extractMissingDatabaseName(message: string): string | undefined {\n  const match = message.match(/database \"([^\"]+)\" does not exist/i);\n  return match?.[1];\n}\n\nfunction isErrorWithCode(error: unknown): error is ErrorWithCode {\n  return typeof error === \"object\" && error !== null && \"code\" in error;\n}\n\nfunction isNetworkConnectionError(error: unknown): boolean {\n  if (!isErrorWithCode(error)) {\n    return false;\n  }\n  const code = typeof error.code === \"string\" ? error.code : \"\";\n  if (\n    code === \"ECONNRESET\" ||\n    code === \"ECONNREFUSED\" ||\n    code === \"ETIMEDOUT\" ||\n    code === \"ENOTFOUND\" ||\n    code === \"EAI_AGAIN\" ||\n    code === \"EPIPE\" ||\n    code === \"EHOSTUNREACH\" ||\n    code === \"ENETUNREACH\"\n  ) {\n    return true;\n  }\n  const message = normalizeErrorMessage(error).toLowerCase();\n  return (\n    message.includes(\"econnreset\") ||\n    message.includes(\"econnrefused\") ||\n    message.includes(\"etimedout\") ||\n    message.includes(\"connection terminated\") ||\n    message.includes(\"connection refused\") ||\n    message.includes(\"timeout expired\")\n  );\n}\n\nfunction collectErrorDiagnostics(error: unknown): string[] {\n  const lines: string[] = [];\n  if (!(isErrorWithCode(error) || error instanceof Error)) {\n    return lines;\n  }\n\n  const code =\n    isErrorWithCode(error) && error.code !== undefined\n      ? String(error.code)\n      : undefined;\n  if (code) {\n    lines.push(`  code: ${code}`);\n  }\n\n  const errno =\n    isErrorWithCode(error) && error.errno !== undefined\n      ? String(error.errno)\n      : undefined;\n  if (errno) {\n    lines.push(`  errno: ${errno}`);\n  }\n\n  const syscall =\n    isErrorWithCode(error) && typeof error.syscall === \"string\"\n      ? error.syscall\n      : undefined;\n  if (syscall) {\n    lines.push(`  syscall: ${syscall}`);\n  }\n\n  const address =\n    isErrorWithCode(error) && typeof error.address === \"string\"\n      ? error.address\n      : undefined;\n  const port =\n    isErrorWithCode(error) && error.port !== undefined\n      ? String(error.port)\n      : undefined;\n  if (address || port) {\n    lines.push(`  remote: ${address ?? \"?\"}${port ? `:${port}` : \"\"}`);\n  }\n\n  const hostname =\n    isErrorWithCode(error) && typeof error.hostname === \"string\"\n      ? error.hostname\n      : undefined;\n  if (hostname) {\n    lines.push(`  hostname: ${hostname}`);\n  }\n\n  let cause: unknown =\n    error instanceof Error\n      ? error.cause\n      : isErrorWithCode(error)\n        ? error.cause\n        : undefined;\n  let depth = 0;\n  while (cause && depth < 4) {\n    const causeMessage = normalizeErrorMessage(cause);\n    const causeCode =\n      isErrorWithCode(cause) && cause.code !== undefined\n        ? String(cause.code)\n        : undefined;\n    lines.push(\n      `  cause[${depth}]: ${causeCode ? `${causeCode} — ` : \"\"}${causeMessage}`\n    );\n    cause =\n      cause instanceof Error\n        ? cause.cause\n        : isErrorWithCode(cause)\n          ? cause.cause\n          : undefined;\n    depth += 1;\n  }\n\n  return lines;\n}\n\nfunction formatGeneratorError(error: unknown, configPath?: string): Error {\n  const diagnostics = collectErrorDiagnostics(error);\n  const diagnosticsBlock =\n    diagnostics.length > 0 ? [\"\", \"Diagnostics:\", ...diagnostics] : [];\n\n  if (isErrorWithCode(error) && error.code === \"3D000\") {\n    const message = normalizeErrorMessage(error);\n    const databaseName = extractMissingDatabaseName(message);\n    const databaseLabel = databaseName\n      ? `PostgreSQL database \"${databaseName}\" does not exist`\n      : \"The target PostgreSQL database does not exist\";\n    const configLabel = configPath\n      ? `config \"${configPath}\"`\n      : \"the resolved athena config\";\n\n    return new Error(\n      [\n        `${databaseLabel} (code 3D000).`,\n        `Update provider.connectionString (and provider.database, if set) in ${configLabel}, or create that database before running generate.`,\n        ...diagnosticsBlock,\n        \"\",\n        \"Hint: ATHENA_JS_DEBUG=1 pnpm exec athena-js generate\",\n      ].join(\"\\n\")\n    );\n  }\n\n  if (isNetworkConnectionError(error)) {\n    const message = normalizeErrorMessage(error);\n    const configLabel = configPath\n      ? `config \"${configPath}\"`\n      : \"the resolved athena config\";\n    const code =\n      isErrorWithCode(error) && typeof error.code === \"string\"\n        ? error.code\n        : \"network\";\n\n    return new Error(\n      [\n        `Schema introspection failed: database connection was reset or unreachable (${code}: ${message}).`,\n        `The CLI started correctly; generate could not finish talking to Postgres for ${configLabel}.`,\n        ...diagnosticsBlock,\n        \"\",\n        \"Check:\",\n        \"  1. DATABASE_URL / provider.connectionString is reachable from this machine (VPN, Railway proxy, firewall).\",\n        '  2. The database is running and accepts connections (try `psql \"$DATABASE_URL\" -c \"select 1\"`).',\n        \"  3. SSL settings match the host (Railway/public proxy often needs `?sslmode=require`).\",\n        \"  4. Retry once — ECONNRESET is often a transient proxy drop mid-introspection.\",\n        \"\",\n        \"For a full stack: ATHENA_JS_DEBUG=1 pnpm exec athena-js generate\",\n      ].join(\"\\n\")\n    );\n  }\n\n  if (error instanceof Error) {\n    if (diagnostics.length === 0 && !isDebugEnabled()) {\n      return error;\n    }\n    const base = error.message || normalizeErrorMessage(error);\n    return new Error(\n      [\n        base,\n        ...diagnosticsBlock,\n        ...(isDebugEnabled() && error.stack\n          ? [\"\", \"Stack:\", error.stack]\n          : [\"\", \"Hint: ATHENA_JS_DEBUG=1 pnpm exec athena-js generate\"]),\n      ].join(\"\\n\")\n    );\n  }\n\n  return new Error(normalizeErrorMessage(error));\n}\n\n/**\n * Print a CLI error to stderr with optional stack when `ATHENA_JS_DEBUG=1`.\n */\nexport function logCliError(\n  error: unknown,\n  errorLog: (message: string) => void = console.error\n): void {\n  const message =\n    error instanceof Error ? error.message : normalizeErrorMessage(error);\n  errorLog(message);\n\n  if (isDebugEnabled() && error instanceof Error && error.stack) {\n    // Avoid duplicating the message line already printed above.\n    const stackOnly = error.stack.startsWith(error.message)\n      ? error.stack.slice(error.message.length).replace(/^\\n/, \"\")\n      : error.stack;\n    if (stackOnly) {\n      errorLog(stackOnly);\n    }\n  }\n}\n\nfunction formatSkippedArtifactLine(\n  artifact: Awaited<\n    ReturnType<typeof runSchemaGenerator>\n  >[\"skippedFiles\"][number]\n): string {\n  if (artifact.reason === \"protected-existing-file\") {\n    return ` [skip] ${artifact.path} (existing ${artifact.kind} artifacts are protected from overwrite; set output.artifactWrite.${artifact.kind}=\"merge\"|\"overwrite\" or delete/retarget the file)`;\n  }\n\n  if (artifact.reason === \"already-current\") {\n    const custom =\n      artifact.preservedCustom && artifact.preservedCustom.length > 0\n        ? `; preserves ${artifact.preservedCustom.length} non-generated unit(s)`\n        : \"\";\n    return ` [ok] ${artifact.path} (already current${custom})`;\n  }\n\n  if (artifact.reason === \"merge-conflict\") {\n    return ` [skip] ${artifact.path} (merge conflict: ${artifact.detail ?? \"see conflicts\"}; file left unchanged)`;\n  }\n\n  if (artifact.reason === \"merge-lint-failed\") {\n    return ` [skip] ${artifact.path} (merge lint failed: ${artifact.detail ?? \"invalid merged TypeScript\"}; file left unchanged)`;\n  }\n\n  if (artifact.reason === \"merge-unparseable\") {\n    return ` [skip] ${artifact.path} (existing ${artifact.kind} artifact is not mergeable; delete, retarget, or set output.artifactWrite.${artifact.kind}=\"overwrite\")`;\n  }\n\n  return ` [skip] ${artifact.path}`;\n}\n\nfunction formatWrittenArtifactLine(\n  artifact: Awaited<\n    ReturnType<typeof runSchemaGenerator>\n  >[\"writtenDetails\"][number]\n): string {\n  if (artifact.reason === \"merged\") {\n    const added =\n      artifact.added && artifact.added.length > 0\n        ? ` +${artifact.added.length}: ${artifact.added.slice(0, 4).join(\", \")}${artifact.added.length > 4 ? \"…\" : \"\"}`\n        : \"\";\n    const custom =\n      artifact.preservedCustom && artifact.preservedCustom.length > 0\n        ? `; preserves ${artifact.preservedCustom.length} non-generated unit(s)`\n        : \"\";\n    return ` [merge] ${artifact.path}${added}${custom}`;\n  }\n\n  if (artifact.reason === \"overwritten\") {\n    return ` [write] ${artifact.path} (overwritten)`;\n  }\n\n  return ` - ${artifact.path}`;\n}\n\nfunction formatCustomPreserveWarnings(\n  result: Awaited<ReturnType<typeof runSchemaGenerator>>\n): string[] {\n  const lines: string[] = [];\n  for (const artifact of result.writtenDetails) {\n    if (artifact.preservedCustom && artifact.preservedCustom.length > 0) {\n      lines.push(\n        ` [warn] ${artifact.path} preserves non-generated unit(s): ${artifact.preservedCustom.slice(0, 3).join(\"; \")}${artifact.preservedCustom.length > 3 ? \"…\" : \"\"}`\n      );\n    }\n  }\n  for (const artifact of result.skippedFiles) {\n    if (\n      artifact.reason === \"already-current\" &&\n      artifact.preservedCustom &&\n      artifact.preservedCustom.length > 0\n    ) {\n      lines.push(\n        ` [warn] ${artifact.path} preserves non-generated unit(s): ${artifact.preservedCustom.slice(0, 3).join(\"; \")}${artifact.preservedCustom.length > 3 ? \"…\" : \"\"}`\n      );\n    }\n  }\n  return lines;\n}\n\n/**\n * CLI entrypoint used by `bin/athena-js.js`.\n *\n * Generator failures are logged with diagnostics (code, remote, cause chain)\n * and exit with code `1` instead of only throwing a bare message.\n */\nfunction formatConfigEnsureLines(\n  result: Awaited<ReturnType<typeof runSchemaGenerator>>\n): string[] {\n  if (!result.configEnsure) {\n    return [];\n  }\n\n  const { action, path, schemas, reason, changes } = result.configEnsure;\n  const lines = [\n    `[config] ${action} ${path} schemas=${schemas.join(\",\") || \"-\"}`,\n  ];\n  if (reason) {\n    lines.push(`[config] reason: ${reason}`);\n  }\n  if (changes.length > 0 && action !== \"unchanged\") {\n    lines.push(\n      `[config] changes: ${changes.slice(0, 4).join(\"; \")}${changes.length > 4 ? \"…\" : \"\"}`\n    );\n  }\n  return lines;\n}\n\nexport async function runCLI(\n  argv: string[],\n  runtime: CliRuntime = {}\n): Promise<void> {\n  const log = runtime.log ?? console.log;\n  const errorLog = runtime.errorLog ?? console.error;\n  const runGenerator = runtime.runGenerator ?? runSchemaGenerator;\n  const ensureConfig = runtime.ensureConfig ?? ensureGeneratorConfigFile;\n  const runMigrate = runtime.runMigrations ?? runMigrations;\n\n  let parsed: CliCommand;\n  try {\n    parsed = parseCommand(argv);\n  } catch (error) {\n    logCliError(formatGeneratorError(error), errorLog);\n    setCliExitCode(1);\n    return;\n  }\n\n  if (parsed.command === \"help\") {\n    log(usage(parsed.topic));\n    return;\n  }\n\n  if (parsed.command === \"migrate\") {\n    try {\n      if (isDebugEnabled()) {\n        errorLog(\n          `[athena-js] migrate starting (mode=${parsed.mode} dryRun=${parsed.dryRun}${parsed.configPath ? ` config=${parsed.configPath}` : \"\"})`\n        );\n      }\n      await runMigrate({\n        configPath: parsed.configPath,\n        dryRun: parsed.dryRun || parsed.mode === \"dry-run\",\n        log,\n        mode:\n          parsed.mode === \"dry-run\"\n            ? \"dry-run\"\n            : parsed.mode === \"status\"\n              ? \"status\"\n              : parsed.mode === \"plan\"\n                ? \"plan\"\n                : \"apply\",\n      });\n    } catch (error) {\n      if (error instanceof MigrationError) {\n        logCliError(error, errorLog);\n      } else {\n        logCliError(formatGeneratorError(error, parsed.configPath), errorLog);\n      }\n      setCliExitCode(1);\n    }\n    return;\n  }\n\n  if (parsed.command === \"init\") {\n    try {\n      if (isDebugEnabled()) {\n        errorLog(\n          `[athena-js] init starting (dryRun=${parsed.dryRun} force=${parsed.force} mode=${parsed.mode}${parsed.configPath ? ` config=${parsed.configPath}` : \"\"})`\n        );\n      }\n      const result = await ensureConfig({\n        configPath: parsed.configPath,\n        discoverSchemas: parsed.discoverSchemas,\n        dryRun: parsed.dryRun,\n        force: parsed.force,\n        mode: parsed.mode,\n      });\n      const prefix = parsed.dryRun ? \"[dry-run] \" : \"\";\n      log(\n        `${prefix}Config ${result.action}: ${result.path} (mode=${result.mode} schemas=${result.schemas.join(\",\") || \"-\"})`\n      );\n      if (result.reason) {\n        log(`${prefix}reason: ${result.reason}`);\n      }\n      for (const change of result.changes) {\n        log(`${prefix}- ${change}`);\n      }\n      if (parsed.dryRun && result.content && result.action !== \"unchanged\") {\n        log(`${prefix}--- planned content ---`);\n        log(result.content);\n      }\n    } catch (error) {\n      const formatted = formatGeneratorError(error, parsed.configPath);\n      logCliError(formatted, errorLog);\n      setCliExitCode(1);\n    }\n    return;\n  }\n\n  let result: Awaited<ReturnType<typeof runSchemaGenerator>>;\n  try {\n    if (isDebugEnabled()) {\n      errorLog(\n        `[athena-js] generate starting (dryRun=${parsed.dryRun} writeConfig=${parsed.writeConfig} discoverSchemas=${parsed.discoverSchemas}${parsed.configPath ? ` config=${parsed.configPath}` : \"\"})`\n      );\n    }\n    result = await runGenerator({\n      configPath: parsed.configPath,\n      discoverSchemas: parsed.discoverSchemas,\n      dryRun: parsed.dryRun,\n      writeConfig: parsed.writeConfig,\n    });\n  } catch (error) {\n    const formatted = formatGeneratorError(error, parsed.configPath);\n    logCliError(formatted, errorLog);\n    setCliExitCode(1);\n    return;\n  }\n\n  if (parsed.dryRun) {\n    log(\n      `[dry-run] Generated ${result.files.length} files from ${result.configPath}`\n    );\n    for (const line of formatGeneratorModeLines(result)) {\n      log(line);\n    }\n    for (const line of formatConfigEnsureLines(result)) {\n      log(line);\n    }\n    for (const file of result.files) {\n      log(` - ${file.path}`);\n    }\n    // When the real generator ran, also surface planned merge/skip outcomes.\n    if (result.writtenDetails?.length || result.skippedFiles?.length) {\n      for (const artifact of result.writtenDetails ?? []) {\n        if (artifact.kind === \"database\" || artifact.kind === \"registry\") {\n          log(formatWrittenArtifactLine(artifact));\n        }\n      }\n      for (const artifact of result.skippedFiles ?? []) {\n        if (artifact.kind === \"database\" || artifact.kind === \"registry\") {\n          log(formatSkippedArtifactLine(artifact));\n        }\n      }\n      for (const line of formatCustomPreserveWarnings(result)) {\n        log(line);\n      }\n    }\n    return;\n  }\n\n  log(\n    `Generated ${result.writtenFiles.length} files from ${result.configPath}`\n  );\n  for (const line of formatGeneratorModeLines(result)) {\n    log(line);\n  }\n  for (const line of formatConfigEnsureLines(result)) {\n    log(line);\n  }\n  const detailByPath = new Map(\n    (result.writtenDetails ?? []).map(\n      (detail) => [detail.path, detail] as const\n    )\n  );\n  for (const filePath of result.writtenFiles) {\n    const detail = detailByPath.get(filePath);\n    if (\n      detail &&\n      (detail.reason === \"merged\" || detail.reason === \"overwritten\")\n    ) {\n      log(formatWrittenArtifactLine(detail));\n    } else {\n      log(` - ${filePath}`);\n    }\n  }\n  for (const artifact of result.skippedFiles) {\n    log(formatSkippedArtifactLine(artifact));\n  }\n  for (const line of formatCustomPreserveWarnings(result)) {\n    log(line);\n  }\n}\n"]}