{"version":3,"sources":["../../src/context/merge.ts","../../src/gateway/errors.ts","../../src/auxiliaries.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/gateway/url.ts","../../package.json","../../src/sdk-version.ts","../../src/cookies/cookie-utils.ts","../../src/cookies/session-cookie-detection.ts","../../src/cookies/index.ts","../../src/utils/athena-request-headers.ts","../../src/client-request.ts","../../src/gateway/client.ts","../../src/auth/limits.ts","../../src/auth/react-email.ts","../../src/auth/client.ts","../../src/storage/direct-upload.ts","../../src/storage/file.ts","../../src/storage/backup.ts","../../src/storage/module.ts","../../src/chat/module.ts","../../src/query-debug-ast.ts","../../src/query-tracing.ts","../../src/schema/model-target.ts","../../src/client.ts","../../src/billing/module.ts","../../src/config/errors.ts","../../src/v3-client.ts","../../src/next/shared.ts","../../src/next/session-bridge/constants.ts","../../src/next/session-bridge/client.ts","../../src/next/session-bridge/payload.ts","../../src/next/session-bridge/cookie.ts","../../src/next/session-bridge/handlers.ts","../../src/utils/athena-auth-url.ts","../../src/utils/auth-routes.ts","../../src/utils/hostname.ts","../../src/utils/auth-cookies.ts","../../src/utils/coercions.ts","../../src/utils/request-origin.ts","../../src/utils/require-env.ts","../../src/utils/proxy-request-headers.ts","../../src/organization/ensure-active-organization.ts","../../src/next/server.ts"],"names":["message","kind","isRecord","firstNonEmptyString","aliasIdentifier","baseIdentifier","request","parsed","SDK_NAME","resolveStructuredErrorPayload","SDK_HEADER_VALUE","parseResponseBody","resolveRequestId","resolveErrorMessage","buildHeaders","token","sessions","parseXhrHeaders","headerValue","appendQuery","resolveErrorHint","isBlobBody","callAthena","stringifyFilterValue","filterMethods","withPathParam","normalizeOptional","readProcessEnv"],"mappings":"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","file":"server.cjs","sourcesContent":["import type { AthenaRequestContext } from '../v3-client.ts'\n\n/**\n * Merge two request contexts with override precedence.\n * Nested headers are shallow-merged; later headers win on key collision.\n */\nexport function mergeAthenaRequestContexts(\n  base: AthenaRequestContext | undefined,\n  override: AthenaRequestContext | undefined,\n): AthenaRequestContext | undefined {\n  if (!base && !override) return undefined\n\n  return {\n    ...base,\n    ...override,\n    headers:\n      base?.headers || override?.headers\n        ? {\n            ...(base?.headers ?? {}),\n            ...(override?.headers ?? {}),\n          }\n        : undefined,\n  }\n}\n","import type {\n  AthenaGatewayEndpointPath,\n  AthenaGatewayErrorCode,\n  AthenaGatewayErrorDetails,\n  AthenaGatewayMethod,\n  AthenaGatewayResponse,\n} from './types.js'\n\nexport interface AthenaGatewayErrorInput {\n  code: AthenaGatewayErrorCode\n  message: string\n  status?: number\n  endpoint?: AthenaGatewayEndpointPath\n  method?: AthenaGatewayMethod\n  requestId?: string\n  hint?: string\n  cause?: string\n}\n\n/**\n * Canonical error for gateway failures.\n * Holds request context and machine-readable classification.\n */\nexport class AthenaGatewayError extends Error {\n  readonly code: AthenaGatewayErrorCode\n  readonly status: number\n  readonly endpoint?: AthenaGatewayEndpointPath\n  readonly method?: AthenaGatewayMethod\n  readonly requestId?: string\n  readonly hint?: string\n  readonly causeDetail?: string\n\n  constructor(input: AthenaGatewayErrorInput) {\n    super(input.message)\n    this.name = 'AthenaGatewayError'\n    this.code = input.code\n    this.status = input.status ?? 0\n    this.endpoint = input.endpoint\n    this.method = input.method\n    this.requestId = input.requestId\n    this.hint = input.hint\n    this.causeDetail = input.cause\n  }\n\n  toDetails(): AthenaGatewayErrorDetails {\n    return {\n      code: this.code,\n      message: this.message,\n      status: this.status,\n      endpoint: this.endpoint,\n      method: this.method,\n      requestId: this.requestId,\n      hint: this.hint,\n      cause: this.causeDetail,\n    }\n  }\n\n  static fromResponse<T>(\n    response: AthenaGatewayResponse<T>,\n    fallback: Omit<AthenaGatewayErrorInput, 'code' | 'message' | 'status'>,\n  ) {\n    const details = response.errorDetails\n    if (details) {\n      return new AthenaGatewayError({\n        code: details.code,\n        message: details.message,\n        status: details.status,\n        endpoint: details.endpoint ?? fallback.endpoint,\n        method: details.method ?? fallback.method,\n        requestId: details.requestId ?? fallback.requestId,\n        hint: details.hint,\n        cause: details.cause,\n      })\n    }\n\n    return new AthenaGatewayError({\n      code: 'HTTP_ERROR',\n      message: response.error ?? 'Gateway request failed',\n      status: response.status,\n      endpoint: fallback.endpoint,\n      method: fallback.method,\n      requestId: fallback.requestId,\n    })\n  }\n}\n\nexport function isAthenaGatewayError(error: unknown): error is AthenaGatewayError {\n  return error instanceof AthenaGatewayError\n}\n","import type { AthenaResult } from './client.ts'\nimport { AthenaGatewayError, isAthenaGatewayError } from './gateway/errors.ts'\nimport type { AthenaGatewayErrorCode, AthenaGatewayErrorDetails } from './gateway/types.ts'\nimport { parseBooleanFlag as parseBooleanFlagUtil } from './utils/parse-boolean-flag.ts'\n\nexport type AthenaErrorKind =\n  | 'unique_violation'\n  | 'not_found'\n  | 'validation'\n  | 'auth'\n  | 'rate_limit'\n  | 'transient'\n  | 'unknown'\n\nexport const AthenaErrorKind = {\n  UniqueViolation: 'unique_violation',\n  NotFound: 'not_found',\n  Validation: 'validation',\n  Auth: 'auth',\n  RateLimit: 'rate_limit',\n  Transient: 'transient',\n  Unknown: 'unknown',\n} as const\n\nexport type AthenaErrorCode =\n  | 'UNIQUE_VIOLATION'\n  | 'NOT_FOUND'\n  | 'VALIDATION_FAILED'\n  | 'AUTH_UNAUTHORIZED'\n  | 'AUTH_FORBIDDEN'\n  | 'RATE_LIMITED'\n  | 'NETWORK_UNAVAILABLE'\n  | 'TRANSIENT_FAILURE'\n  | 'HTTP_FAILURE'\n  | 'UNKNOWN'\n\nexport const AthenaErrorCode = {\n  UniqueViolation: 'UNIQUE_VIOLATION',\n  NotFound: 'NOT_FOUND',\n  ValidationFailed: 'VALIDATION_FAILED',\n  AuthUnauthorized: 'AUTH_UNAUTHORIZED',\n  AuthForbidden: 'AUTH_FORBIDDEN',\n  RateLimited: 'RATE_LIMITED',\n  NetworkUnavailable: 'NETWORK_UNAVAILABLE',\n  TransientFailure: 'TRANSIENT_FAILURE',\n  HttpFailure: 'HTTP_FAILURE',\n  Unknown: 'UNKNOWN',\n} as const satisfies Record<string, AthenaErrorCode>\n\nexport type AthenaErrorCategory = 'transport' | 'client' | 'server' | 'database' | 'unknown'\n\nexport const AthenaErrorCategory = {\n  Transport: 'transport',\n  Client: 'client',\n  Server: 'server',\n  Database: 'database',\n  Unknown: 'unknown',\n} as const satisfies Record<string, AthenaErrorCategory>\n\nexport interface AthenaOperationContext {\n  table?: string\n  operation?: string\n  identity?: string | Record<string, unknown>\n}\n\nexport interface NormalizedAthenaError {\n  kind: AthenaErrorKind\n  code: AthenaErrorCode\n  category: AthenaErrorCategory\n  retryable: boolean\n  status?: number\n  constraint?: string\n  table?: string\n  operation?: string\n  message: string\n  raw: unknown\n}\n\nexport interface AthenaErrorInput {\n  code: AthenaErrorCode\n  kind: AthenaErrorKind\n  category: AthenaErrorCategory\n  message: string\n  status?: number\n  retryable?: boolean\n  requestId?: string\n  context?: AthenaOperationContext\n  raw?: unknown\n}\n\nexport interface UnwrapOptions {\n  allowNull?: boolean\n  context?: AthenaOperationContext\n}\n\nexport interface UnwrapOneOptions extends UnwrapOptions {\n  requireExactlyOne?: boolean\n}\n\nexport interface IntCoercionOptions {\n  strictBigInt?: boolean\n  min?: number\n  max?: number\n}\n\nexport type RetryBackoffStrategy =\n  | 'linear'\n  | 'exponential'\n  | ((attempt: number, error: unknown) => number)\n\nexport interface RetryConfig {\n  retries: number\n  baseDelayMs?: number\n  maxDelayMs?: number\n  backoff?: RetryBackoffStrategy\n  jitter?: boolean | number\n  shouldRetry?: (error: unknown, attempt: number) => boolean | Promise<boolean>\n}\n\nexport interface RequireAffectedOptions {\n  min?: number\n}\n\n/**\n * Parses a string-based boolean flag with a deterministic fallback.\n *\n * Accepts common truthy/falsey token variants used by env vars and CLI flags.\n */\nexport function parseBooleanFlag(\n  rawValue: string | undefined,\n  fallback: boolean,\n): boolean {\n  return parseBooleanFlagUtil(rawValue, fallback)\n}\n\nexport class AthenaError extends Error {\n  readonly code: AthenaErrorCode\n  readonly kind: AthenaErrorKind\n  readonly category: AthenaErrorCategory\n  readonly status?: number\n  readonly retryable: boolean\n  readonly requestId?: string\n  readonly context?: AthenaOperationContext\n  readonly raw?: unknown\n\n  constructor(input: AthenaErrorInput) {\n    super(input.message)\n    this.name = 'AthenaError'\n    this.code = input.code\n    this.kind = input.kind\n    this.category = input.category\n    this.status = input.status\n    this.retryable = input.retryable ?? false\n    this.requestId = input.requestId\n    this.context = input.context\n    this.raw = input.raw\n  }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\n  for (const value of values) {\n    if (typeof value === 'string' && value.trim().length > 0) {\n      return value.trim()\n    }\n  }\n  return undefined\n}\n\nfunction messageFromUnknownError(error: unknown): string | undefined {\n  if (typeof error === 'string' && error.trim().length > 0) {\n    return error.trim()\n  }\n  if (error instanceof Error && error.message.trim().length > 0) {\n    return error.message.trim()\n  }\n  if (!isRecord(error)) {\n    return undefined\n  }\n  return firstNonEmptyString(error.message, error.error, error.details)\n}\n\nfunction gatewayCodeFromUnknownError(error: unknown): AthenaGatewayErrorCode | undefined {\n  if (!isRecord(error) || typeof error.gatewayCode !== 'string') {\n    return undefined\n  }\n  return error.gatewayCode as AthenaGatewayErrorCode\n}\n\nfunction isAthenaResultErrorLike(\n  value: unknown,\n): value is {\n  message: string\n  athenaCode?: AthenaErrorCode\n  kind?: AthenaErrorKind\n  category?: AthenaErrorCategory\n  retryable?: boolean\n  status?: number\n  constraint?: string\n  table?: string\n  operation?: string\n  raw?: unknown\n} {\n  return (\n    isRecord(value) &&\n    typeof value.message === 'string' &&\n    (value.athenaCode === undefined || isAthenaErrorCode(value.athenaCode)) &&\n    (value.kind === undefined || isAthenaErrorKind(value.kind)) &&\n    (value.category === undefined || isAthenaErrorCategory(value.category)) &&\n    (value.retryable === undefined || typeof value.retryable === 'boolean') &&\n    (value.status === undefined || typeof value.status === 'number')\n  )\n}\n\nfunction isAthenaErrorKind(value: unknown): value is AthenaErrorKind {\n  return (\n    value === 'unique_violation' ||\n    value === 'not_found' ||\n    value === 'validation' ||\n    value === 'auth' ||\n    value === 'rate_limit' ||\n    value === 'transient' ||\n    value === 'unknown'\n  )\n}\n\nfunction isAthenaErrorCode(value: unknown): value is AthenaErrorCode {\n  return (\n    value === 'UNIQUE_VIOLATION' ||\n    value === 'NOT_FOUND' ||\n    value === 'VALIDATION_FAILED' ||\n    value === 'AUTH_UNAUTHORIZED' ||\n    value === 'AUTH_FORBIDDEN' ||\n    value === 'RATE_LIMITED' ||\n    value === 'NETWORK_UNAVAILABLE' ||\n    value === 'TRANSIENT_FAILURE' ||\n    value === 'HTTP_FAILURE' ||\n    value === 'UNKNOWN'\n  )\n}\n\nfunction isAthenaErrorCategory(value: unknown): value is AthenaErrorCategory {\n  return (\n    value === 'transport' ||\n    value === 'client' ||\n    value === 'server' ||\n    value === 'database' ||\n    value === 'unknown'\n  )\n}\n\nfunction isNormalizedAthenaError(value: unknown): value is NormalizedAthenaError {\n  return (\n    isRecord(value) &&\n    isAthenaErrorKind(value.kind) &&\n    isAthenaErrorCode(value.code) &&\n    isAthenaErrorCategory(value.category) &&\n    typeof value.retryable === 'boolean' &&\n    typeof value.message === 'string' &&\n    'raw' in value\n  )\n}\n\nfunction withContextOverrides(\n  normalized: NormalizedAthenaError,\n  context?: AthenaOperationContext,\n): NormalizedAthenaError {\n  if (!context?.table && !context?.operation) {\n    return normalized\n  }\n\n  return {\n    ...normalized,\n    table: context.table ?? normalized.table,\n    operation: context.operation ?? normalized.operation,\n  }\n}\n\nfunction resolveAttachedNormalizedError(resultOrError: unknown): NormalizedAthenaError | undefined {\n  if (!isRecord(resultOrError)) return undefined\n  if (!('__athenaNormalizedError' in resultOrError)) return undefined\n  const candidate = resultOrError.__athenaNormalizedError\n  return isNormalizedAthenaError(candidate) ? candidate : undefined\n}\n\nfunction safeStringify(value: unknown): string {\n  try {\n    const serialized = JSON.stringify(value)\n    return serialized ?? String(value)\n  } catch {\n    return '[unserializable]'\n  }\n}\n\nfunction contextHint(context?: AthenaOperationContext): string | undefined {\n  if (!context?.identity) return undefined\n  const identity =\n    typeof context.identity === 'string' ? context.identity : safeStringify(context.identity)\n  return `Identity: ${identity}`\n}\n\nfunction isAthenaResultLike(value: unknown): value is AthenaResult<unknown> {\n  return (\n    isRecord(value) &&\n    'status' in value &&\n    'error' in value &&\n    'data' in value &&\n    typeof value.status === 'number'\n  )\n}\n\nfunction operationFromDetails(details?: AthenaGatewayErrorDetails | null): string | undefined {\n  if (!details?.endpoint) return undefined\n  if (details.endpoint === '/gateway/fetch' || details.endpoint === '/gateway/query') return 'select'\n  if (details.endpoint === '/gateway/insert') return 'insert'\n  if (details.endpoint === '/gateway/update') return 'update'\n  if (details.endpoint === '/gateway/delete') return 'delete'\n  if (details.endpoint === '/gateway/rpc' || details.endpoint.startsWith('/rpc/')) return 'rpc'\n  return undefined\n}\n\nfunction matchRegex(input: string, patterns: RegExp[]): string | undefined {\n  for (const pattern of patterns) {\n    const match = pattern.exec(input)\n    if (match?.[1]) return match[1]\n  }\n  return undefined\n}\n\nfunction extractConstraint(message: string): string | undefined {\n  return matchRegex(message, [\n    /unique constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n    /constraint\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n  ])\n}\n\nfunction extractTable(message: string): string | undefined {\n  return matchRegex(message, [\n    /(?:table|relation)\\s+[\"'`]([^\"'`]+)[\"'`]/i,\n    /on\\s+table\\s+([a-zA-Z0-9_.]+)/i,\n  ])\n}\n\nfunction classifyKind(status: number | undefined, code: AthenaGatewayErrorCode | undefined, message: string): AthenaErrorKind {\n  const lower = message.toLowerCase()\n  const hasUniquePattern =\n    lower.includes('unique constraint') ||\n    lower.includes('duplicate key') ||\n    lower.includes('already exists') ||\n    lower.includes('duplicate')\n  const hasNotFoundPattern = lower.includes('not found') || lower.includes('no rows')\n  const hasValidationPattern =\n    lower.includes('validation') || lower.includes('invalid') || lower.includes('malformed')\n  const hasAuthPattern =\n    lower.includes('unauthorized') || lower.includes('forbidden') || lower.includes('auth')\n  const hasRateLimitPattern = lower.includes('rate limit') || lower.includes('too many requests')\n  const hasTransientPattern =\n    lower.includes('timeout') ||\n    lower.includes('temporar') ||\n    lower.includes('connection reset') ||\n    lower.includes('socket') ||\n    lower.includes('deadlock')\n\n  if (status === 409 || hasUniquePattern) return 'unique_violation'\n  if (status === 404 || hasNotFoundPattern) return 'not_found'\n  if (status === 401 || status === 403 || hasAuthPattern) return 'auth'\n  if (status === 429 || hasRateLimitPattern) return 'rate_limit'\n  if (code === 'INVALID_URL') return 'validation'\n  if (status === 400 || status === 422 || hasValidationPattern) return 'validation'\n  if (code === 'NETWORK_ERROR' || status === 0 || (status !== undefined && status >= 500) || hasTransientPattern) {\n    return 'transient'\n  }\n  return 'unknown'\n}\n\nfunction toAthenaErrorCode(\n  kind: AthenaErrorKind,\n  status: number | undefined,\n  gatewayCode?: AthenaGatewayErrorCode,\n): AthenaErrorCode {\n  if (gatewayCode === 'INVALID_URL') {\n    return AthenaErrorCode.ValidationFailed\n  }\n\n  if (gatewayCode === 'NETWORK_ERROR' || (kind === 'transient' && status === 0)) {\n    return AthenaErrorCode.NetworkUnavailable\n  }\n\n  switch (kind) {\n    case 'unique_violation':\n      return AthenaErrorCode.UniqueViolation\n    case 'not_found':\n      return AthenaErrorCode.NotFound\n    case 'validation':\n      return AthenaErrorCode.ValidationFailed\n    case 'rate_limit':\n      return AthenaErrorCode.RateLimited\n    case 'auth':\n      if (status === 403) {\n        return AthenaErrorCode.AuthForbidden\n      }\n      return AthenaErrorCode.AuthUnauthorized\n    case 'transient':\n      return status !== undefined && status >= 500\n        ? AthenaErrorCode.HttpFailure\n        : AthenaErrorCode.TransientFailure\n    case 'unknown':\n    default:\n      return status !== undefined && status >= 400\n        ? AthenaErrorCode.HttpFailure\n        : AthenaErrorCode.Unknown\n  }\n}\n\nfunction toAthenaErrorCategory(kind: AthenaErrorKind, status: number | undefined): AthenaErrorCategory {\n  if (kind === 'transient' && (status === 0 || status === undefined)) {\n    return AthenaErrorCategory.Transport\n  }\n  if (kind === 'unique_violation') return AthenaErrorCategory.Database\n  if (kind === 'validation' || kind === 'auth' || kind === 'not_found') return AthenaErrorCategory.Client\n  if (kind === 'rate_limit' || kind === 'transient') return AthenaErrorCategory.Server\n  return AthenaErrorCategory.Unknown\n}\n\nfunction isRetryable(kind: AthenaErrorKind, status: number | undefined): boolean {\n  if (kind === 'rate_limit' || kind === 'transient') return true\n  return status !== undefined && status >= 500\n}\n\nfunction toGatewayCode(kind: AthenaErrorKind, status?: number): AthenaGatewayErrorCode {\n  if (kind === 'transient' && (status === 0 || status === undefined)) return 'NETWORK_ERROR'\n  if (kind === 'validation') return 'INVALID_JSON'\n  if (status !== undefined && status >= 400) return 'HTTP_ERROR'\n  return 'UNKNOWN_ERROR'\n}\n\nfunction toAthenaGatewayError(\n  source: unknown,\n  fallbackMessage: string,\n  context?: AthenaOperationContext,\n): AthenaGatewayError {\n  if (isAthenaGatewayError(source)) {\n    return source\n  }\n\n  if (isAthenaResultLike(source) && source.errorDetails) {\n    const message =\n      messageFromUnknownError(source.error) ??\n      source.errorDetails.message ??\n      fallbackMessage\n    return new AthenaGatewayError({\n      code: source.errorDetails.code,\n      message,\n      status: source.status,\n      endpoint: source.errorDetails.endpoint,\n      method: source.errorDetails.method,\n      requestId: source.errorDetails.requestId,\n      hint:\n        (isRecord(source.error) ? firstNonEmptyString(source.error.hint) : undefined) ??\n        source.errorDetails.hint,\n      cause:\n        (isRecord(source.error) ? firstNonEmptyString(source.error.cause) : undefined) ??\n        source.errorDetails.cause,\n    })\n  }\n\n  const normalized = normalizeAthenaError(source, context)\n  const message =\n    isAthenaResultLike(source) && source.error == null && source.errorDetails == null\n      ? fallbackMessage\n      : normalized.message || fallbackMessage\n\n  return new AthenaGatewayError({\n    code: toGatewayCode(normalized.kind, normalized.status),\n    message,\n    status: normalized.status ?? 0,\n    hint:\n      normalized.constraint != null\n        ? `Constraint: ${normalized.constraint}`\n        : contextHint(context),\n    cause: typeof normalized.raw === 'string' ? normalized.raw : safeStringify(normalized.raw),\n  })\n}\n\n/**\n * Returns `true` when a result is successful (`2xx` status and no `error`).\n */\nexport function isOk<T>(result: AthenaResult<T>): boolean {\n  return result.error == null && result.status >= 200 && result.status < 300\n}\n\n/**\n * @deprecated Prefer `result.error` on failed `AthenaResult` values and the\n * structured fields already attached to thrown SDK errors. This helper is\n * retained for compatibility with mixed unknown inputs.\n *\n * Normalizes any Athena failure shape into a stable, typed error envelope.\n *\n * Accepts `AthenaResult`, `AthenaGatewayError`, native `Error`, or unknown values.\n * Optional `context` can override inferred table/operation metadata for clearer diagnostics.\n */\nexport function normalizeAthenaError(\n  resultOrError: unknown,\n  context?: AthenaOperationContext,\n): NormalizedAthenaError {\n  const attached = resolveAttachedNormalizedError(resultOrError)\n  if (attached) {\n    return withContextOverrides(attached, context)\n  }\n\n  if (isAthenaResultLike(resultOrError)) {\n    if (isAthenaResultErrorLike(resultOrError.error)) {\n      return {\n        kind: resultOrError.error.kind ?? classifyKind(resultOrError.status, gatewayCodeFromUnknownError(resultOrError.error), resultOrError.error.message),\n        code:\n          resultOrError.error.athenaCode ??\n          toAthenaErrorCode(\n            resultOrError.error.kind ??\n              classifyKind(\n                resultOrError.status,\n                gatewayCodeFromUnknownError(resultOrError.error),\n                resultOrError.error.message,\n              ),\n            resultOrError.error.status ?? resultOrError.status,\n            gatewayCodeFromUnknownError(resultOrError.error),\n          ),\n        category:\n          resultOrError.error.category ??\n          toAthenaErrorCategory(\n            resultOrError.error.kind ??\n              classifyKind(\n                resultOrError.status,\n                gatewayCodeFromUnknownError(resultOrError.error),\n                resultOrError.error.message,\n              ),\n            resultOrError.error.status ?? resultOrError.status,\n          ),\n        retryable:\n          resultOrError.error.retryable ??\n          isRetryable(\n            resultOrError.error.kind ??\n              classifyKind(\n                resultOrError.status,\n                gatewayCodeFromUnknownError(resultOrError.error),\n                resultOrError.error.message,\n              ),\n            resultOrError.error.status ?? resultOrError.status,\n          ),\n        status: resultOrError.error.status ?? resultOrError.status,\n        constraint: resultOrError.error.constraint,\n        table: context?.table ?? resultOrError.error.table,\n        operation: context?.operation ?? resultOrError.error.operation,\n        message: resultOrError.error.message,\n        raw: resultOrError.error.raw ?? resultOrError.raw,\n      }\n    }\n\n    const details = resultOrError.errorDetails\n    const message =\n      messageFromUnknownError(resultOrError.error) ??\n      details?.message ??\n      `Athena ${context?.operation ?? operationFromDetails(details) ?? 'request'} failed`\n    const operation = context?.operation ?? operationFromDetails(details)\n    const table = context?.table ?? extractTable(message)\n    const constraint = extractConstraint(message)\n    const gatewayCode = details?.code ?? gatewayCodeFromUnknownError(resultOrError.error)\n    const kind = classifyKind(resultOrError.status, gatewayCode, message)\n    const code = toAthenaErrorCode(kind, resultOrError.status, gatewayCode)\n    const category = toAthenaErrorCategory(kind, resultOrError.status)\n    return {\n      kind,\n      code,\n      category,\n      retryable: isRetryable(kind, resultOrError.status),\n      status: resultOrError.status,\n      constraint,\n      table,\n      operation,\n      message,\n      raw: resultOrError.raw,\n    }\n  }\n\n  if (isAthenaGatewayError(resultOrError)) {\n    const details = resultOrError.toDetails()\n    const operation = context?.operation ?? operationFromDetails(details)\n    const table = context?.table ?? extractTable(resultOrError.message)\n    const constraint = extractConstraint(resultOrError.message)\n    const kind = classifyKind(resultOrError.status, resultOrError.code, resultOrError.message)\n    const code = toAthenaErrorCode(kind, resultOrError.status, resultOrError.code)\n    const category = toAthenaErrorCategory(kind, resultOrError.status)\n    return {\n      kind,\n      code,\n      category,\n      retryable: isRetryable(kind, resultOrError.status),\n      status: resultOrError.status,\n      constraint,\n      table,\n      operation,\n      message: resultOrError.message,\n      raw: resultOrError,\n    }\n  }\n\n  if (resultOrError instanceof Error) {\n    const maybeStatus =\n      isRecord(resultOrError) && typeof resultOrError.status === 'number'\n        ? resultOrError.status\n        : undefined\n    const kind = classifyKind(maybeStatus, undefined, resultOrError.message)\n    return {\n      kind,\n      code: toAthenaErrorCode(kind, maybeStatus),\n      category: toAthenaErrorCategory(kind, maybeStatus),\n      retryable: isRetryable(kind, maybeStatus),\n      status: maybeStatus,\n      constraint: extractConstraint(resultOrError.message),\n      table: context?.table ?? extractTable(resultOrError.message),\n      operation: context?.operation,\n      message: resultOrError.message,\n      raw: resultOrError,\n    }\n  }\n\n  const message = typeof resultOrError === 'string' ? resultOrError : 'Unknown Athena error'\n  const kind = classifyKind(undefined, undefined, message)\n  return {\n    kind,\n    code: toAthenaErrorCode(kind, undefined),\n    category: toAthenaErrorCategory(kind, undefined),\n    retryable: isRetryable(kind, undefined),\n    status: undefined,\n    constraint: extractConstraint(message),\n    table: context?.table ?? extractTable(message),\n    operation: context?.operation,\n    message,\n    raw: resultOrError,\n  }\n}\n\n/**\n * Unwraps a successful result into a row array.\n *\n * - Throws on failed results.\n * - Converts `null` data to an empty array.\n * - Wraps scalar data in a single-element array.\n */\nexport function unwrapRows<T>(\n  result: AthenaResult<T[] | T | null>,\n  options?: UnwrapOptions,\n): T[] {\n  if (!isOk(result)) {\n    throw toAthenaGatewayError(result, 'Athena request failed', options?.context)\n  }\n  if (result.data == null) return []\n  return Array.isArray(result.data) ? result.data : [result.data]\n}\n\n/**\n * Unwraps successful result data from `AthenaResult<T | null>`.\n *\n * By default, `null` data throws. Pass `{ allowNull: true }` to permit nullable payloads.\n */\nexport function unwrap<T>(\n  result: AthenaResult<T | null>,\n  options: UnwrapOptions & { allowNull: true },\n): T | null\nexport function unwrap<T>(result: AthenaResult<T | null>, options?: UnwrapOptions): T\nexport function unwrap<T>(\n  result: AthenaResult<T | null>,\n  options?: UnwrapOptions,\n): T | null {\n  if (!isOk(result)) {\n    throw toAthenaGatewayError(result, 'Athena request failed', options?.context)\n  }\n  if (result.data == null && !options?.allowNull) {\n    throw toAthenaGatewayError(result, 'Expected data but received null', options?.context)\n  }\n  return result.data\n}\n\n/**\n * Unwraps the first row from a successful result that may contain arrays/scalars/null.\n *\n * - Throws on failed results.\n * - Throws when no row exists unless `allowNull: true` is provided.\n * - Optionally enforces exact cardinality via `requireExactlyOne`.\n */\nexport function unwrapOne<T>(\n  result: AthenaResult<T[] | T | null>,\n  options: UnwrapOneOptions & { allowNull: true },\n): T | null\nexport function unwrapOne<T>(result: AthenaResult<T[] | T | null>, options?: UnwrapOneOptions): T\nexport function unwrapOne<T>(\n  result: AthenaResult<T[] | T | null>,\n  options?: UnwrapOneOptions,\n): T | null {\n  const rows = unwrapRows(result, options)\n  if (!rows.length) {\n    if (options?.allowNull) return null\n    throw toAthenaGatewayError(result, 'Expected one row but received none', options?.context)\n  }\n  if (options?.requireExactlyOne && rows.length !== 1) {\n    throw toAthenaGatewayError(\n      result,\n      `Expected exactly one row but received ${rows.length}`,\n      options.context,\n    )\n  }\n  return rows[0]\n}\n\n/**\n * Asserts that an Athena result is successful.\n *\n * Returns the original result for fluent composition and throws `AthenaGatewayError` on failure.\n */\nexport function requireSuccess<T>(\n  result: AthenaResult<T>,\n  context?: AthenaOperationContext,\n): AthenaResult<T> {\n  if (!isOk(result)) {\n    throw toAthenaGatewayError(\n      result,\n      `Athena ${context?.operation ?? 'request'} failed`,\n      context,\n    )\n  }\n  return result\n}\n\n/**\n * Enforces mutation postconditions based on `result.count`.\n *\n * - Validates success first.\n * - Requires a non-null count in the response.\n * - Validates `count >= min` (default: `1`).\n *\n * Useful for guaranteeing that critical writes actually affected rows.\n */\nexport function requireAffected<T>(\n  result: AthenaResult<T>,\n  options?: RequireAffectedOptions,\n  context?: AthenaOperationContext,\n): number {\n  requireSuccess(result, context)\n\n  const minimum = options?.min ?? 1\n  const count = result.count\n  if (count == null) {\n    throw new AthenaGatewayError({\n      code: 'UNKNOWN_ERROR',\n      status: result.status,\n      message: 'Expected affected row count but response.count is missing',\n      hint: 'Set call option { count: \"exact\" } for mutation postcondition checks.',\n      cause: safeStringify(result.raw),\n    })\n  }\n\n  if (count < minimum) {\n    throw new AthenaGatewayError({\n      code: 'UNKNOWN_ERROR',\n      status: result.status,\n      message: `Expected at least ${minimum} affected rows but received ${count}`,\n      hint: contextHint(context),\n      cause: safeStringify(result.raw),\n    })\n  }\n\n  return count\n}\n\nfunction applyBounds(value: number, options?: IntCoercionOptions): number | null {\n  if (options?.min !== undefined && value < options.min) return null\n  if (options?.max !== undefined && value > options.max) return null\n  return value\n}\n\nfunction parseIntegerString(value: string): number | null {\n  const normalized = value.trim()\n  if (!/^[-+]?\\d+$/.test(normalized)) return null\n  const parsed = Number(normalized)\n  if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) return null\n  return parsed\n}\n\n/**\n * Safely coerces `unknown` values into finite integers.\n *\n * Returns `null` when coercion fails or bounds/strict bigint checks are violated.\n */\nexport function coerceInt(value: unknown, options?: IntCoercionOptions): number | null {\n  if (value == null) return null\n\n  if (typeof value === 'number') {\n    if (!Number.isFinite(value) || !Number.isInteger(value)) return null\n    return applyBounds(value, options)\n  }\n\n  if (typeof value === 'string') {\n    const parsed = parseIntegerString(value)\n    if (parsed == null) return null\n    return applyBounds(parsed, options)\n  }\n\n  if (typeof value === 'bigint') {\n    if (options?.strictBigInt) {\n      if (value > BigInt(Number.MAX_SAFE_INTEGER) || value < BigInt(Number.MIN_SAFE_INTEGER)) {\n        return null\n      }\n    }\n    const parsed = Number(value)\n    if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) return null\n    return applyBounds(parsed, options)\n  }\n\n  return null\n}\n\n/**\n * Strict integer assertion wrapper around `coerceInt`.\n *\n * Throws a `TypeError` with the provided label when coercion fails.\n */\nexport function assertInt(value: unknown, label = 'value', options?: IntCoercionOptions): number {\n  const parsed = coerceInt(value, options)\n  if (parsed == null) {\n    throw new TypeError(`${label} must be a finite integer`)\n  }\n  return parsed\n}\n\nfunction defaultShouldRetry(error: unknown): boolean {\n  const normalized = normalizeAthenaError(error)\n  return normalized.kind === 'transient' || normalized.kind === 'rate_limit'\n}\n\nfunction computeDelayMs(\n  attempt: number,\n  error: unknown,\n  config: Required<Pick<RetryConfig, 'baseDelayMs' | 'backoff' | 'maxDelayMs' | 'jitter'>>,\n): number {\n  const baseDelay = config.baseDelayMs\n  const rawDelay =\n    typeof config.backoff === 'function'\n      ? config.backoff(attempt, error)\n      : config.backoff === 'linear'\n        ? baseDelay * attempt\n        : baseDelay * Math.pow(2, attempt - 1)\n\n  const safeDelay = Number.isFinite(rawDelay) ? Math.max(0, rawDelay) : 0\n  const clamped = Math.min(config.maxDelayMs, safeDelay)\n  const jitterFactor =\n    typeof config.jitter === 'number'\n      ? Math.max(0, Math.min(1, config.jitter))\n      : config.jitter\n        ? 0.2\n        : 0\n\n  if (!jitterFactor) return clamped\n  const deviation = clamped * jitterFactor\n  const offset = (Math.random() * 2 - 1) * deviation\n  return Math.max(0, clamped + offset)\n}\n\nfunction sleep(ms: number): Promise<void> {\n  if (ms <= 0) return Promise.resolve()\n  return new Promise(resolve => {\n    setTimeout(resolve, ms)\n  })\n}\n\n/**\n * @deprecated Prefer `retryReads` for standard SDK-managed read\n * retries, or a call-site retry policy when you need custom write/replay\n * behavior. This helper is retained for compatibility.\n *\n * Retries an async operation with configurable backoff and retry policy.\n *\n * `retries` represents additional attempts after the first failure.\n * By default, transient and rate-limit errors are retried.\n */\nexport async function withRetry<T>(config: RetryConfig, fn: () => Promise<T>): Promise<T> {\n  const retries = Math.max(0, Math.trunc(config.retries))\n  const shouldRetry = config.shouldRetry ?? defaultShouldRetry\n  const resolvedConfig = {\n    baseDelayMs: config.baseDelayMs ?? 100,\n    maxDelayMs: config.maxDelayMs ?? 10_000,\n    backoff: config.backoff ?? 'exponential',\n    jitter: config.jitter ?? false,\n  } satisfies Required<Pick<RetryConfig, 'baseDelayMs' | 'backoff' | 'maxDelayMs' | 'jitter'>>\n\n  for (let attempts = 0; attempts <= retries; attempts += 1) {\n    try {\n      return await fn()\n    } catch (error) {\n      if (attempts >= retries) {\n        throw error\n      }\n\n      const currentAttempt = attempts + 1\n      const retry = await shouldRetry(error, currentAttempt)\n      if (!retry) {\n        throw error\n      }\n\n      const delay = computeDelayMs(currentAttempt, error, resolvedConfig)\n      await sleep(delay)\n    }\n  }\n\n  throw new Error('withRetry reached an unexpected state')\n}\n","import { normalizeAthenaError, withRetry } from './auxiliaries.ts'\nimport type {\n  AthenaOperationContext,\n  NormalizedAthenaError,\n  RetryConfig,\n} from './auxiliaries.ts'\nimport type {\n  AthenaGatewayErrorDetails,\n  AthenaGatewayResponse,\n} from './gateway/types.ts'\n\nconst ATHENA_NORMALIZED_ERROR_KEY = '__athenaNormalizedError' as const\n\nconst READ_RETRY_CONFIG: RetryConfig = {\n  retries: 2,\n  baseDelayMs: 100,\n  maxDelayMs: 1_000,\n  backoff: 'exponential',\n  jitter: true,\n}\n\nexport interface AthenaResult<T> {\n  data: T | null\n  error: AthenaResultError | null\n  statusText?: string | null\n  /**\n   * @deprecated Prefer `error?.gatewayCode`, `error?.hint`, and related fields on `error`.\n   */\n  errorDetails?: AthenaGatewayErrorDetails | null\n  status: number\n  count?: number | null\n  raw: unknown\n}\n\nexport interface AthenaResultError {\n  message: string\n  code: string | null\n  athenaCode: NormalizedAthenaError['code']\n  gatewayCode?: AthenaGatewayErrorDetails['code'] | null\n  kind: NormalizedAthenaError['kind']\n  category: NormalizedAthenaError['category']\n  retryable: boolean\n  details: unknown | null\n  hint: string | null\n  status: number\n  statusText: string | null\n  constraint?: string\n  table?: string\n  operation?: string\n  endpoint?: AthenaGatewayErrorDetails['endpoint']\n  method?: AthenaGatewayErrorDetails['method']\n  requestId?: string\n  cause?: string\n  raw: unknown\n}\n\nexport type AthenaResultFormatter = <T>(\n  response: AthenaGatewayResponse<T>,\n  context?: AthenaOperationContext,\n) => AthenaResult<T>\n\nfunction formatResult<T>(response: AthenaGatewayResponse<T>): AthenaResult<T> {\n  const result: AthenaResult<T> = {\n    data: response.data ?? null,\n    error: null,\n    errorDetails: response.errorDetails ?? null,\n    status: response.status,\n    statusText: response.statusText ?? null,\n    raw: response.raw,\n  }\n  if (response.count !== undefined) {\n    result.count = response.count\n  }\n  return result\n}\n\nfunction attachNormalizedError<T>(\n  result: AthenaResult<T>,\n  normalizedError: NormalizedAthenaError,\n): void {\n  Object.defineProperty(result, ATHENA_NORMALIZED_ERROR_KEY, {\n    value: normalizedError,\n    enumerable: false,\n    configurable: true,\n    writable: false,\n  })\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction firstNonEmptyString(...values: unknown[]): string | undefined {\n  for (const value of values) {\n    if (typeof value === 'string' && value.trim().length > 0) {\n      return value.trim()\n    }\n  }\n  return undefined\n}\n\nfunction resolveStructuredErrorPayload(raw: unknown): Record<string, unknown> | null {\n  if (!isRecord(raw)) return null\n  return isRecord(raw.error) ? raw.error : raw\n}\n\nfunction resolveStructuredErrorDetails(\n  payload: Record<string, unknown> | null,\n  message: string,\n): unknown | null {\n  if (!payload || !('details' in payload)) {\n    return null\n  }\n  const details = payload.details\n  if (details == null) {\n    return null\n  }\n  if (typeof details === 'string' && details.trim() === message.trim()) {\n    return null\n  }\n  return details\n}\n\nfunction createResultError<T>(\n  response: AthenaGatewayResponse<T>,\n  result: AthenaResult<T>,\n  normalized: NormalizedAthenaError,\n): AthenaResultError {\n  const rawRecord = isRecord(response.raw) ? response.raw : null\n  const payload = resolveStructuredErrorPayload(response.raw)\n  const message =\n    firstNonEmptyString(\n      response.error,\n      payload?.message,\n      payload?.error,\n      payload?.details,\n      response.errorDetails?.message,\n      normalized.message,\n    ) ?? normalized.message\n  const statusText = firstNonEmptyString(response.statusText, rawRecord?.statusText) ?? null\n  const hint = firstNonEmptyString(payload?.hint, response.errorDetails?.hint) ?? null\n  const code = firstNonEmptyString(payload?.code) ?? normalized.code\n  const details =\n    resolveStructuredErrorDetails(payload, message) ?? response.errorDetails?.cause ?? null\n\n  return {\n    message,\n    code,\n    athenaCode: normalized.code,\n    gatewayCode: response.errorDetails?.code ?? null,\n    kind: normalized.kind,\n    category: normalized.category,\n    retryable: normalized.retryable,\n    details,\n    hint,\n    status: result.status,\n    statusText,\n    constraint: normalized.constraint,\n    table: normalized.table,\n    operation: normalized.operation,\n    endpoint: response.errorDetails?.endpoint,\n    method: response.errorDetails?.method,\n    requestId: response.errorDetails?.requestId,\n    cause: response.errorDetails?.cause,\n    raw: result.raw,\n  }\n}\n\nexport function createResultFormatter(): AthenaResultFormatter {\n  return <T>(\n    response: AthenaGatewayResponse<T>,\n    context?: AthenaOperationContext,\n  ): AthenaResult<T> => {\n    const result = formatResult(response)\n    if (response.error == null && response.errorDetails == null) {\n      return result\n    }\n    const normalizedError = normalizeAthenaError(\n      {\n        ...result,\n        error: response.error ?? response.errorDetails?.message ?? null,\n      },\n      context,\n    )\n    result.error = createResultError(response, result, normalizedError)\n    attachNormalizedError(result, normalizedError)\n    return result\n  }\n}\n\nexport async function executeRead<T>(\n  behavior: { retryReads?: boolean } | undefined,\n  runner: () => Promise<AthenaResult<T>>,\n): Promise<AthenaResult<T>> {\n  if (!behavior?.retryReads) {\n    return runner()\n  }\n\n  let lastRetryableResult: AthenaResult<T> | undefined\n  let lastRetrySignal: AthenaResultError | null = null\n  try {\n    return await withRetry(\n      {\n        ...READ_RETRY_CONFIG,\n        shouldRetry: error =>\n          error === lastRetrySignal || normalizeAthenaError(error).retryable,\n      },\n      async () => {\n        const result = await runner()\n        if (result.error?.retryable) {\n          lastRetryableResult = result\n          lastRetrySignal = result.error\n          throw lastRetrySignal\n        }\n        return result\n      },\n    )\n  } catch (error) {\n    if (lastRetryableResult && error === lastRetrySignal) {\n      return lastRetryableResult\n    }\n    throw error\n  }\n}\n\nexport function toSingleResult<Result>(\n  response: AthenaResult<Result>,\n): AthenaResult<Result extends Array<infer Item> ? Item | null : Result | null> {\n  const payload = response.data\n  const singleData = Array.isArray(payload)\n    ? payload.length\n      ? payload[0]\n      : null\n    : (payload ?? null)\n  return {\n    ...response,\n    data: singleData as Result extends Array<infer Item> ? Item | null : Result | null,\n  }\n}\n\n","import type {\n  AthenaFetchPayload,\n  AthenaGatewayCondition,\n  AthenaJsonArray,\n  AthenaJsonObject,\n  AthenaJsonValue,\n  AthenaSortBy,\n} from './types.ts'\n\nconst IDENTIFIER_SEGMENT_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/\n\nfunction isIdentifierPath(value: string): boolean {\n  const segments = value.split('.').map(segment => segment.trim())\n  return segments.length > 1 && segments.every(segment => IDENTIFIER_SEGMENT_PATTERN.test(segment))\n}\n\nfunction extractRelationHead(raw: string): string {\n  const trimmed = raw.trim()\n  if (!trimmed) return ''\n\n  const aliasIndex = trimmed.indexOf(':')\n  const withoutAlias = aliasIndex >= 0 ? trimmed.slice(aliasIndex + 1).trim() : trimmed\n  const modifierIndex = withoutAlias.indexOf('!')\n  return (modifierIndex >= 0 ? withoutAlias.slice(0, modifierIndex) : withoutAlias).trim()\n}\n\nfunction hasSchemaQualifiedRelationToken(select: string): boolean {\n  let singleQuoted = false\n  let doubleQuoted = false\n  let tokenStart = 0\n\n  for (let index = 0; index < select.length; index += 1) {\n    const char = select[index]\n    const next = index + 1 < select.length ? select[index + 1] : ''\n\n    if (singleQuoted) {\n      if (char === \"'\" && next === \"'\") {\n        index += 1\n        continue\n      }\n      if (char === \"'\") {\n        singleQuoted = false\n      }\n      continue\n    }\n\n    if (doubleQuoted) {\n      if (char === '\"' && next === '\"') {\n        index += 1\n        continue\n      }\n      if (char === '\"') {\n        doubleQuoted = false\n      }\n      continue\n    }\n\n    if (char === \"'\") {\n      singleQuoted = true\n      continue\n    }\n\n    if (char === '\"') {\n      doubleQuoted = true\n      continue\n    }\n\n    if (char === '(') {\n      const relationHead = extractRelationHead(select.slice(tokenStart, index))\n      if (isIdentifierPath(relationHead)) {\n        return true\n      }\n      tokenStart = index + 1\n      continue\n    }\n\n    if (char === ',' || char === ')') {\n      tokenStart = index + 1\n    }\n  }\n\n  return false\n}\n\nfunction toStructuredSelectString(columns: string | string[]): string {\n  return Array.isArray(columns) ? columns.join(',') : columns\n}\n\ntype StructuredWhereOperand =\n  | AthenaJsonValue\n  | AthenaJsonArray\n  | AthenaJsonObject\n\nfunction buildStructuredWhere(\n  conditions: AthenaGatewayCondition[] | undefined,\n): AthenaJsonObject | null | undefined {\n  if (!conditions?.length) return undefined\n\n  const where: AthenaJsonObject = {}\n\n  for (const condition of conditions) {\n    if (!condition.column) {\n      return null\n    }\n    if (condition.value_cast !== undefined) {\n      return null\n    }\n\n    const operand = condition.value as StructuredWhereOperand | undefined\n    const operator = condition.operator\n    if (operator === 'eq') {\n      if (operand === undefined) return null\n    } else if (operator === 'neq' || operator === 'gt' || operator === 'lt') {\n      if (operand === undefined) return null\n    } else if (operator === 'in') {\n      if (!Array.isArray(operand)) return null\n    } else {\n      return null\n    }\n\n    const existing = where[condition.column]\n    if (existing !== undefined && (typeof existing !== 'object' || existing === null || Array.isArray(existing))) {\n      return null\n    }\n\n    const next = (existing as AthenaJsonObject | undefined) ?? {}\n    if (Object.prototype.hasOwnProperty.call(next, operator)) {\n      return null\n    }\n    next[operator] = operand as AthenaJsonValue | AthenaJsonArray\n    where[condition.column] = next\n  }\n\n  return where\n}\n\nfunction buildStructuredOrderBy(order: AthenaSortBy | undefined): AthenaJsonObject | undefined {\n  if (!order?.field) return undefined\n  return {\n    [order.field]: order.direction === 'descending' ? 'desc' : 'asc',\n  }\n}\n\nexport interface StructuredSelectTransportInput {\n  tableName: string\n  columns: string | string[]\n  conditions?: AthenaGatewayCondition[]\n  limit?: number\n  offset?: number\n  order?: AthenaSortBy\n  stripNulls: boolean\n  count?: 'exact' | 'planned' | 'estimated'\n  head?: boolean\n}\n\nexport interface StructuredSelectTransportResult {\n  payload: AthenaFetchPayload\n  select: string\n}\n\nexport function buildStructuredSelectTransport(\n  input: StructuredSelectTransportInput,\n): StructuredSelectTransportResult | null | { error: string } {\n  const select = toStructuredSelectString(input.columns).trim()\n  if (!select || select === '*') {\n    return null\n  }\n\n  if (!hasSchemaQualifiedRelationToken(select)) {\n    return null\n  }\n\n  if (input.count !== undefined || input.head !== undefined) {\n    return {\n      error:\n        'Schema-qualified nested select strings require structured select transport, which does not support count/head options in athena-js yet.',\n    }\n  }\n\n  const where = buildStructuredWhere(input.conditions)\n  if (where === null) {\n    return {\n      error:\n        'Schema-qualified nested select strings only support eq, neq, gt, lt, and in filters in athena-js structured select transport.',\n    }\n  }\n\n  return {\n    select,\n    payload: {\n      table_name: input.tableName,\n      select,\n      where,\n      orderBy: buildStructuredOrderBy(input.order),\n      limit: input.limit,\n      offset: input.offset,\n      strip_nulls: input.stripNulls,\n    },\n  }\n}\n","import type {\n  AthenaConditionArrayValue,\n  AthenaConditionOperator,\n  AthenaConditionValue,\n  AthenaGatewayCondition,\n  AthenaJsonValue,\n  AthenaSortBy,\n} from './gateway/types.ts'\nimport type {\n  AnyModelDef,\n  DatabaseDef,\n  ModelDef,\n  ModelRelationMetadata,\n  RegistryDef,\n  SchemaDef,\n} from './schema/types.ts'\nimport type { RowOf } from './schema/types.ts'\nimport type { AthenaColumnKey, HasKnownSelectColumns } from './select-column-types.ts'\n\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>\ntype FilterColumnKey<Row> = Extract<keyof NonNullable<Row>, string>\ntype ResolvedFilterColumnKey<Row> = [FilterColumnKey<Row>] extends [never] ? string : FilterColumnKey<Row>\ntype KnownSelectColumnKey<Row> = AthenaColumnKey<Row>\n\nconst UUID_PATTERN =\n  /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n\ntype AthenaFilterOperator =\n  | 'eq'\n  | 'neq'\n  | 'gt'\n  | 'gte'\n  | 'lt'\n  | 'lte'\n  | 'like'\n  | 'ilike'\n  | 'is'\n  | 'in'\n  | 'contains'\n  | 'containedBy'\n\ntype AthenaWherePrimitive = AthenaConditionValue\n\nexport type AthenaWhereOperatorInput = {\n  eq?: AthenaConditionValue\n  neq?: AthenaConditionValue\n  gt?: AthenaConditionValue\n  gte?: AthenaConditionValue\n  lt?: AthenaConditionValue\n  lte?: AthenaConditionValue\n  like?: AthenaConditionValue\n  ilike?: AthenaConditionValue\n  is?: AthenaConditionValue\n  in?: AthenaConditionArrayValue\n  contains?: AthenaConditionArrayValue\n  containedBy?: AthenaConditionArrayValue\n}\n\ntype AthenaWhereColumnInput<Row = AthenaRowShape> = Partial<\n  Record<ResolvedFilterColumnKey<Row>, AthenaWherePrimitive | AthenaWhereOperatorInput>\n>\n\ntype AthenaBooleanSafeOperator = Exclude<AthenaFilterOperator, 'in' | 'contains' | 'containedBy'>\n\ntype AthenaWhereBooleanSafeOperatorInput = Partial<\n  Record<AthenaBooleanSafeOperator, AthenaConditionValue>\n>\n\ntype AthenaWhereBooleanNotOperatorInput = {\n  [K in AthenaBooleanSafeOperator]: {\n    [P in K]: AthenaConditionValue\n  } & Partial<Record<Exclude<AthenaBooleanSafeOperator, K>, never>>\n}[AthenaBooleanSafeOperator]\n\ntype AthenaStrictBooleanOperand<Keys extends string, Value> = {\n  [K in Keys]: {\n    [P in K]: Value\n  } & Partial<Record<Exclude<Keys, K>, never>>\n}[Keys]\n\ntype AthenaNonEmptyArray<T> = [T, ...T[]]\n\nexport type AthenaWhereBooleanOperand<Row = AthenaRowShape> =\n  string extends ResolvedFilterColumnKey<Row>\n    ? AthenaWhereColumnInput<Row>\n    : AthenaStrictBooleanOperand<\n        ResolvedFilterColumnKey<Row>,\n        AthenaWherePrimitive | AthenaWhereBooleanSafeOperatorInput\n      >\n\ntype AthenaWhereNotOperand<Row = AthenaRowShape> =\n  string extends ResolvedFilterColumnKey<Row>\n    ? AthenaWhereColumnInput<Row>\n    : AthenaStrictBooleanOperand<\n        ResolvedFilterColumnKey<Row>,\n        AthenaWherePrimitive | AthenaWhereBooleanNotOperatorInput\n      >\n\nexport type AthenaWhere<Row = AthenaRowShape> = AthenaWhereColumnInput<Row> & {\n  or?: string extends ResolvedFilterColumnKey<Row>\n    ? Array<AthenaWhereColumnInput<Row>>\n    : AthenaNonEmptyArray<AthenaWhereBooleanOperand<Row>>\n  not?: AthenaWhereNotOperand<Row>\n}\n\nexport interface AthenaRelationSelectNode<TSelect extends AthenaSelectShape = AthenaSelectShape> {\n  select: TSelect\n  as?: string\n  via?: string\n  schema?: string\n}\n\nexport type AthenaSelectShape = Record<string, true | AthenaRelationSelectNode<AthenaSelectShape>>\n\ntype AthenaAllowedRelationSelectNodeKey = 'select' | 'as' | 'via' | 'schema'\n\n/**\n * Structural validation only (relation node shape). Nested relation target rows\n * are not model-checked here unless a richer context path is wired later.\n */\ntype AthenaStructuralValidatedSelectShape<TSelect> = {\n  [K in keyof TSelect]:\n    TSelect[K] extends true\n      ? true\n      : AthenaValidatedRelationSelectNode<TSelect[K]>\n}\n\ntype AthenaValidatedRelationSelectNode<TNode> =\n  TNode extends { select: infer TChild }\n    ? Exclude<keyof TNode, AthenaAllowedRelationSelectNodeKey> extends never\n      ? TNode extends { schema: string; via: string }\n        ? never\n        : TChild extends Record<string, unknown>\n          ? {\n              [K in keyof TNode]:\n                K extends 'select'\n                  ? AthenaStructuralValidatedSelectShape<TChild>\n                  : K extends AthenaAllowedRelationSelectNodeKey\n                    ? TNode[K]\n                    : never\n            }\n          : never\n      : never\n    : never\n\n/**\n * Compile-time validation for `findMany({ select })`.\n *\n * - When `Row` has known model keys: scalar `true` entries must use those keys.\n * - Relation nodes (`{ select: ... }`) keep structural validation and may use\n *   non-row keys (relation names are not row columns).\n * - When `Row` is untyped: free-form keys (same as pre-model behavior).\n */\nexport type AthenaValidatedSelectShape<Row, TSelect> = HasKnownSelectColumns<Row> extends true\n  ? {\n      [K in keyof TSelect]:\n        TSelect[K] extends true\n          ? K extends KnownSelectColumnKey<Row>\n            ? true\n            : never\n          : AthenaValidatedRelationSelectNode<TSelect[K]>\n    }\n  : AthenaStructuralValidatedSelectShape<TSelect>\n\ntype GenericRegistryDef = RegistryDef<\n  Record<string, DatabaseDef<Record<string, SchemaDef<Record<string, AnyModelDef>>>>>\n>\n\ntype AthenaOrderByDirectionInput =\n  | 'asc'\n  | 'desc'\n  | 'ascending'\n  | 'descending'\n  | boolean\n  | {\n      ascending?: boolean\n    }\n\nexport type AthenaOrderBy<Row = AthenaRowShape> =\n  | {\n      column: ResolvedFilterColumnKey<Row>\n      ascending?: boolean\n    }\n  | Partial<Record<ResolvedFilterColumnKey<Row>, AthenaOrderByDirectionInput>>\n\nexport interface AthenaFindManyOptions<\n  Row = AthenaRowShape,\n  TSelect extends AthenaSelectShape = AthenaSelectShape,\n> {\n  /**\n   * Object select tree. Callers should pass through `findMany(...)`, which\n   * intersects this with `AthenaValidatedSelectShape<Row, TSelect>` so model\n   * column keys are checked after `TSelect` is inferred from the literal.\n   */\n  select: TSelect\n  where?: AthenaWhere<Row>\n  orderBy?: AthenaOrderBy<Row>\n  limit?: number\n}\n\ntype AthenaModelContext<\n  TRegistry extends GenericRegistryDef = GenericRegistryDef,\n  TDatabase extends string = string,\n  TSchema extends string = string,\n  TModel extends AnyModelDef = AnyModelDef,\n> = {\n  registry: TRegistry\n  database: TDatabase\n  schema: TSchema\n  model: TModel\n}\n\ntype Simplify<T> = {\n  [K in keyof T]: T[K]\n} & {}\n\ntype ContextRegistry<TContext> = TContext extends AthenaModelContext<infer TRegistry, string, string, AnyModelDef>\n  ? TRegistry\n  : never\n\ntype ContextDatabase<TContext> = TContext extends AthenaModelContext<GenericRegistryDef, infer TDatabase, string, AnyModelDef>\n  ? TDatabase\n  : never\n\ntype ContextModel<TContext> = TContext extends AthenaModelContext<GenericRegistryDef, string, string, infer TModel>\n  ? TModel\n  : never\n\ntype ModelMetaOf<TContext> = ContextModel<TContext> extends ModelDef<unknown, unknown, unknown, infer TMeta>\n  ? TMeta\n  : never\n\ntype ModelRelationsOf<TContext> = NonNullable<ModelMetaOf<TContext>['relations']>\n\ntype SelectedResultKey<\n  TKey extends string,\n  TValue,\n> = TValue extends { as: infer TAlias extends string } ? TAlias : TKey\n\ntype ScalarSelectionResult<Row, TSelect extends AthenaSelectShape> = {\n  [TKey in Extract<keyof TSelect, string> as TSelect[TKey] extends true ? TKey : never]-?: TKey extends keyof NonNullable<Row>\n    ? NonNullable<Row>[TKey]\n    : unknown\n}\n\ntype RelationByKey<TContext, TKey extends string> = TKey extends keyof ModelRelationsOf<TContext>\n  ? ModelRelationsOf<TContext>[TKey]\n  : never\n\ntype RelationByVia<TContext, TVia extends string> = {\n  [TKey in keyof ModelRelationsOf<TContext>]: ModelRelationsOf<TContext>[TKey] extends infer TRelation\n    ? TRelation extends ModelRelationMetadata\n      ? TVia extends TRelation['sourceColumns'][number]\n        ? TRelation\n        : never\n      : never\n    : never\n}[keyof ModelRelationsOf<TContext>]\n\ntype ResolvedRelation<TContext, TKey extends string, TValue> = RelationByKey<TContext, TKey> extends never\n  ? TValue extends { via: infer TVia extends string }\n    ? RelationByVia<TContext, TVia>\n    : never\n  : RelationByKey<TContext, TKey>\n\ntype TargetDatabaseName<TContext, TRelation extends ModelRelationMetadata> = TRelation['targetDatabase'] extends string\n  ? TRelation['targetDatabase']\n  : ContextDatabase<TContext>\n\ntype ResolveTargetModel<\n  TContext,\n  TRelation extends ModelRelationMetadata,\n> = ContextRegistry<TContext> extends infer TRegistry\n  ? TRegistry extends GenericRegistryDef\n    ? TargetDatabaseName<TContext, TRelation> extends keyof TRegistry & string\n      ? TRelation['targetSchema'] extends keyof TRegistry[TargetDatabaseName<TContext, TRelation>]['schemas'] & string\n        ? TRelation['targetModel'] extends keyof TRegistry[TargetDatabaseName<TContext, TRelation>]['schemas'][TRelation['targetSchema']]['models'] & string\n          ? TRegistry[TargetDatabaseName<TContext, TRelation>]['schemas'][TRelation['targetSchema']]['models'][TRelation['targetModel']]\n          : never\n        : never\n      : never\n    : never\n  : never\n\ntype RelationResultValue<\n  TRelation extends ModelRelationMetadata,\n  TValue,\n  TContext,\n> = TValue extends AthenaRelationSelectNode<infer TChildSelect>\n  ? ResolveTargetModel<TContext, TRelation> extends infer TTargetModel\n    ? TTargetModel extends AnyModelDef\n      ? TRelation['kind'] extends 'one-to-many' | 'many-to-many'\n        ? Array<\n            AthenaFindManyResult<\n              RowOf<TTargetModel>,\n              TChildSelect,\n              AthenaModelContext<\n                ContextRegistry<TContext>,\n                TargetDatabaseName<TContext, TRelation>,\n                TRelation['targetSchema'],\n                TTargetModel\n              >\n            >\n          >\n        : AthenaFindManyResult<\n            RowOf<TTargetModel>,\n            TChildSelect,\n            AthenaModelContext<\n              ContextRegistry<TContext>,\n              TargetDatabaseName<TContext, TRelation>,\n              TRelation['targetSchema'],\n              TTargetModel\n            >\n          > | null\n      : unknown\n    : unknown\n  : never\n\ntype RelationSelectionResult<TContext, TSelect extends AthenaSelectShape> = {\n  [TKey in Extract<keyof TSelect, string> as TSelect[TKey] extends AthenaRelationSelectNode<AthenaSelectShape>\n    ? SelectedResultKey<TKey, TSelect[TKey]>\n    : never]-?: ResolvedRelation<TContext, TKey, TSelect[TKey]> extends infer TRelation\n    ? TRelation extends ModelRelationMetadata\n      ? RelationResultValue<TRelation, TSelect[TKey], TContext>\n      : unknown\n    : unknown\n}\n\nexport type AthenaFindManyResult<\n  Row,\n  TSelect extends AthenaSelectShape,\n  TContext = unknown,\n> = Simplify<ScalarSelectionResult<Row, TSelect> & RelationSelectionResult<TContext, TSelect>>\n\nconst FILTER_OPERATORS = new Set<AthenaFilterOperator>([\n  'eq',\n  'neq',\n  'gt',\n  'gte',\n  'lt',\n  'lte',\n  'like',\n  'ilike',\n  'is',\n  'in',\n  'contains',\n  'containedBy',\n])\n\nconst BOOLEAN_SAFE_OPERATORS = new Set<AthenaBooleanSafeOperator>([\n  'eq',\n  'neq',\n  'gt',\n  'gte',\n  'lt',\n  'lte',\n  'like',\n  'ilike',\n  'is',\n])\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction isUuidString(value: string): boolean {\n  return UUID_PATTERN.test(value.trim())\n}\n\nfunction isUuidIdentifierColumn(column: string): boolean {\n  return column === 'id' || /(?:^|_)uuid(?:_|$)/i.test(column) || /_id$/i.test(column)\n}\n\nexport function shouldUseUuidTextComparison(column: string, value: AthenaConditionValue): boolean {\n  return typeof value === 'string' && isUuidString(value) && isUuidIdentifierColumn(column)\n}\n\nfunction isRelationSelectNode(value: unknown): value is AthenaRelationSelectNode {\n  return isRecord(value) && isRecord(value.select)\n}\n\nfunction normalizeIdentifier(value: string, label: string): string {\n  const normalized = value.trim()\n  if (!normalized) {\n    throw new Error(`${label} must be a non-empty string`)\n  }\n  return normalized\n}\n\nfunction stringifyFilterValue(value: AthenaConditionValue | AthenaConditionArrayValue | string): string {\n  if (Array.isArray(value)) {\n    return value.join(',')\n  }\n  return String(value)\n}\n\nfunction buildGatewayCondition(\n  operator: AthenaConditionOperator,\n  column?: string,\n  value?: AthenaConditionValue | AthenaConditionArrayValue | string,\n): AthenaGatewayCondition {\n  const condition: AthenaGatewayCondition = { operator }\n  if (column) {\n    condition.column = column\n    if (operator === 'eq') {\n      condition.eq_column = column\n    }\n  }\n  if (value !== undefined) {\n    condition.value = value\n    if (operator === 'eq') {\n      condition.eq_value = value\n    }\n  }\n  if (operator === 'eq' && column && value !== undefined && shouldUseUuidTextComparison(column, value as AthenaConditionValue)) {\n    condition.column_cast = 'text'\n    condition.eq_column_cast = 'text'\n  }\n  return condition\n}\n\nfunction compileRelationToken(\n  key: string,\n  node: AthenaRelationSelectNode,\n): string {\n  const nested = compileSelectShape(node.select)\n  const propertyKey = normalizeIdentifier(key, 'select relation key')\n  if (node.schema && node.via) {\n    throw new Error(\n      `findMany relation \"${propertyKey}\" cannot combine schema and via yet; use schema with the relation key, or use via without schema`,\n    )\n  }\n\n  const relationTokenBase = normalizeIdentifier(node.via ?? propertyKey, 'select relation token')\n  if (node.schema && relationTokenBase.includes('.')) {\n    throw new Error(\n      `findMany relation \"${propertyKey}\" already resolves to a qualified relation token; do not also set schema`,\n    )\n  }\n\n  const relationSchema = node.schema?.trim()\n  const relationToken = relationSchema\n    ? `${normalizeIdentifier(relationSchema, 'select relation schema')}.${relationTokenBase}`\n    : relationTokenBase\n  const alias = node.as?.trim() || (relationToken !== propertyKey ? propertyKey : '')\n  const prefix = alias ? `${alias}:` : ''\n  return `${prefix}${relationToken}(${nested})`\n}\n\nexport function compileSelectShape(select: AthenaSelectShape): string {\n  if (!isRecord(select)) {\n    throw new Error('findMany select must be an object')\n  }\n\n  const tokens: string[] = []\n  for (const [rawKey, rawValue] of Object.entries(select)) {\n    if (rawValue === undefined) {\n      continue\n    }\n\n    if (rawValue === true) {\n      tokens.push(normalizeIdentifier(rawKey, 'select column'))\n      continue\n    }\n\n    if (isRelationSelectNode(rawValue)) {\n      tokens.push(compileRelationToken(rawKey, rawValue))\n      continue\n    }\n\n    throw new Error(`Unsupported select node for \"${rawKey}\"`)\n  }\n\n  if (tokens.length === 0) {\n    throw new Error('findMany select requires at least one field')\n  }\n\n  return tokens.join(',')\n}\n\nexport function selectShapeUsesRelationSchema(select: AthenaSelectShape): boolean {\n  if (!isRecord(select)) {\n    return false\n  }\n\n  for (const rawValue of Object.values(select)) {\n    if (!isRelationSelectNode(rawValue)) {\n      continue\n    }\n    if (typeof rawValue.schema === 'string' && rawValue.schema.trim().length > 0) {\n      return true\n    }\n    if (selectShapeUsesRelationSchema(rawValue.select)) {\n      return true\n    }\n  }\n\n  return false\n}\n\nfunction compileColumnWhere(\n  column: string,\n  input: AthenaWherePrimitive | AthenaWhereOperatorInput,\n): AthenaGatewayCondition[] {\n  const normalizedColumn = normalizeIdentifier(column, 'where column')\n  if (!isRecord(input)) {\n    return [buildGatewayCondition('eq', normalizedColumn, input)]\n  }\n\n  const conditions: AthenaGatewayCondition[] = []\n  for (const [rawOperator, rawValue] of Object.entries(input)) {\n    if (rawValue === undefined) {\n      continue\n    }\n    if (!FILTER_OPERATORS.has(rawOperator as AthenaFilterOperator)) {\n      throw new Error(`Unsupported where operator \"${rawOperator}\" on \"${normalizedColumn}\"`)\n    }\n    if (\n      (rawOperator === 'in' || rawOperator === 'contains' || rawOperator === 'containedBy') &&\n      !Array.isArray(rawValue)\n    ) {\n      throw new Error(`where.${normalizedColumn}.${rawOperator} requires an array value`)\n    }\n    conditions.push(\n      buildGatewayCondition(\n        rawOperator as AthenaFilterOperator,\n        normalizedColumn,\n        rawValue as AthenaConditionValue | AthenaConditionArrayValue,\n      ),\n    )\n  }\n\n  if (conditions.length === 0) {\n    throw new Error(`where.${normalizedColumn} requires at least one operator`)\n  }\n\n  return conditions\n}\n\nfunction compileBooleanExpressionTerms(\n  clause: AthenaWhereBooleanOperand,\n  label: 'or' | 'not',\n): string[] {\n  if (!isRecord(clause)) {\n    throw new Error(`findMany where.${label} clauses must be objects`)\n  }\n\n  const entries = Object.entries(clause).filter(([, value]) => value !== undefined)\n  if (entries.length !== 1) {\n    throw new Error(`findMany where.${label} clauses must target exactly one column`)\n  }\n\n  const [rawColumn, rawValue] = entries[0]\n  const column = normalizeIdentifier(rawColumn, `where.${label} column`)\n\n  if (!isRecord(rawValue)) {\n    return [`${column}.eq.${stringifyFilterValue(rawValue as AthenaConditionValue)}`]\n  }\n\n  const operatorEntries = Object.entries(rawValue).filter(([, value]) => value !== undefined)\n  if (operatorEntries.length === 0) {\n    throw new Error(`findMany where.${label}.${column} requires at least one operator`)\n  }\n\n  if (label === 'not' && operatorEntries.length > 1) {\n    throw new Error('findMany where.not only supports a single lossless operator expression')\n  }\n\n  return operatorEntries.map(([rawOperator, rawOperand]) => {\n    if (!BOOLEAN_SAFE_OPERATORS.has(rawOperator as AthenaBooleanSafeOperator)) {\n      throw new Error(`findMany where.${label} only supports lossless scalar operators`)\n    }\n    if (Array.isArray(rawOperand)) {\n      throw new Error(`findMany where.${label} does not support array-valued operators`)\n    }\n    return `${column}.${rawOperator}.${stringifyFilterValue(rawOperand as AthenaConditionValue)}`\n  })\n}\n\nexport function compileWhere(where?: AthenaWhere): AthenaGatewayCondition[] | undefined {\n  if (where === undefined) {\n    return undefined\n  }\n  if (!isRecord(where)) {\n    throw new Error('findMany where must be an object')\n  }\n\n  const conditions: AthenaGatewayCondition[] = []\n  for (const [rawKey, rawValue] of Object.entries(where)) {\n    if (rawValue === undefined) {\n      continue\n    }\n\n    if (rawKey === 'or') {\n      if (!Array.isArray(rawValue) || rawValue.length === 0) {\n        throw new Error('findMany where.or must be a non-empty array')\n      }\n      const expressions = rawValue.flatMap(value =>\n        compileBooleanExpressionTerms(value as AthenaWhereBooleanOperand, 'or'),\n      )\n      conditions.push(buildGatewayCondition('or', undefined, expressions.join(',')))\n      continue\n    }\n\n    if (rawKey === 'not') {\n      const expressions = compileBooleanExpressionTerms(rawValue as AthenaWhereBooleanOperand, 'not')\n      if (expressions.length !== 1) {\n        throw new Error('findMany where.not must compile to exactly one lossless expression')\n      }\n      conditions.push(buildGatewayCondition('not', undefined, expressions[0]))\n      continue\n    }\n\n    conditions.push(...compileColumnWhere(rawKey, rawValue as AthenaWherePrimitive | AthenaWhereOperatorInput))\n  }\n\n  return conditions.length > 0 ? conditions : undefined\n}\n\nfunction resolveOrderDirection(input: AthenaOrderByDirectionInput): AthenaSortBy['direction'] {\n  if (typeof input === 'boolean') {\n    return input === false ? 'descending' : 'ascending'\n  }\n  if (typeof input === 'string') {\n    const normalized = input.trim().toLowerCase()\n    if (normalized === 'asc' || normalized === 'ascending') {\n      return 'ascending'\n    }\n    if (normalized === 'desc' || normalized === 'descending') {\n      return 'descending'\n    }\n    throw new Error(`Unsupported orderBy direction \"${input}\"`)\n  }\n  return input.ascending === false ? 'descending' : 'ascending'\n}\n\nexport function compileOrderBy<Row = AthenaRowShape>(orderBy?: AthenaOrderBy<Row>): AthenaSortBy | undefined {\n  if (orderBy === undefined) {\n    return undefined\n  }\n  if (!isRecord(orderBy)) {\n    throw new Error('findMany orderBy must be an object')\n  }\n\n  if ('column' in orderBy) {\n    return {\n      field: normalizeIdentifier(String(orderBy.column), 'orderBy column'),\n      direction: orderBy.ascending === false ? 'descending' : 'ascending',\n    }\n  }\n\n  const entries = Object.entries(orderBy).filter(([, value]) => value !== undefined)\n  if (entries.length === 0) {\n    return undefined\n  }\n  if (entries.length > 1) {\n    throw new Error('findMany orderBy only supports a single column in v1')\n  }\n\n  const [column, input] = entries[0]\n  return {\n    field: normalizeIdentifier(column, 'orderBy column'),\n    direction: resolveOrderDirection(input as AthenaOrderByDirectionInput),\n  }\n}\n","import { buildStructuredSelectTransport } from './gateway/structured-select.ts'\nimport type {\n  AthenaFetchPayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayCondition,\n  AthenaJsonObject,\n  AthenaSortBy,\n} from './gateway/types.ts'\nimport { shouldUseUuidTextComparison } from './query-ast.ts'\nimport type {\n  AthenaOrderBy,\n  AthenaSelectShape,\n  AthenaWhere,\n  AthenaWhereBooleanOperand,\n  AthenaWhereOperatorInput,\n} from './query-ast.ts'\n\ntype AthenaFindManyAstOrderColumn<Row> =\n  [Extract<keyof NonNullable<Row>, string>] extends [never] ? string : Extract<keyof NonNullable<Row>, string>\n\nexport interface AthenaSelectExecutionState {\n  conditions: AthenaGatewayCondition[]\n  limit?: number\n  offset?: number\n  order?: AthenaSortBy\n  currentPage?: number\n  pageSize?: number\n  totalPages?: number\n}\n\nexport type AthenaFindManyAstPayload<\n  Row,\n  TSelect extends AthenaSelectShape,\n> = {\n  table_name: string\n  select: TSelect\n  where?: AthenaWhere<Row>\n  orderBy?: AthenaOrderBy<Row>\n  limit?: number\n}\n\nexport interface AthenaResolvedPagination {\n  limit?: number\n  offset?: number\n}\n\nexport interface AthenaTypedSelectQueryInput {\n  tableName: string\n  columns: string | string[]\n  conditions: AthenaGatewayCondition[]\n  limit?: number\n  offset?: number\n  currentPage?: number\n  pageSize?: number\n  order?: AthenaSortBy\n}\n\nexport interface AthenaSelectDebugPlan {\n  columns: string | string[]\n  conditions?: AthenaGatewayCondition[]\n  limit?: number\n  offset?: number\n  currentPage?: number\n  pageSize?: number\n  order?: AthenaSortBy\n}\n\nexport type AthenaSelectTransportPlan =\n  | {\n      kind: 'query'\n      query: string\n      payload: {\n        query: string\n      }\n    }\n  | {\n      kind: 'fetch'\n      payload: AthenaFetchPayload\n      debug: AthenaSelectDebugPlan\n    }\n\nexport function canUseFindManyAstTransport(state: AthenaSelectExecutionState): boolean {\n  return (\n    state.conditions.length === 0 &&\n    state.offset === undefined &&\n    state.currentPage === undefined &&\n    state.pageSize === undefined &&\n    state.totalPages === undefined\n  )\n}\n\nexport function toFindManyAstOrder<Row>(order?: AthenaSortBy): AthenaOrderBy<Row> | undefined {\n  if (!order) {\n    return undefined\n  }\n  return {\n    column: order.field as AthenaFindManyAstOrderColumn<Row>,\n    ascending: order.direction !== 'descending',\n  }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction normalizeFindManyAstColumnPredicate(\n  value: unknown,\n): AthenaWhereOperatorInput {\n  if (!isRecord(value)) {\n    return {\n      eq: value as AthenaWhereOperatorInput['eq'],\n    }\n  }\n\n  const normalized: AthenaWhereOperatorInput = {}\n  for (const [key, operand] of Object.entries(value)) {\n    if (operand !== undefined) {\n      normalized[key as keyof AthenaWhereOperatorInput] = operand as never\n    }\n  }\n  return normalized\n}\n\nfunction normalizeFindManyAstBooleanOperand<Row>(\n  clause: AthenaWhereBooleanOperand<Row>,\n): AthenaWhereBooleanOperand<Row> {\n  const normalized: Record<string, unknown> = {}\n  for (const [column, value] of Object.entries(clause as Record<string, unknown>)) {\n    if (value === undefined) {\n      continue\n    }\n    normalized[column] = normalizeFindManyAstColumnPredicate(value)\n  }\n  return normalized as AthenaWhereBooleanOperand<Row>\n}\n\nexport function normalizeFindManyAstWhere<Row>(\n  where?: AthenaWhere<Row>,\n): AthenaWhere<Row> | undefined {\n  if (!where || !isRecord(where)) {\n    return where\n  }\n\n  const normalized: AthenaJsonObject = {}\n  for (const [key, value] of Object.entries(where as Record<string, unknown>)) {\n    if (value === undefined) {\n      continue\n    }\n    if (key === 'or' && Array.isArray(value)) {\n      normalized.or = value.map(clause =>\n        normalizeFindManyAstBooleanOperand(clause as AthenaWhereBooleanOperand<Row>),\n      ) as unknown as AthenaJsonObject['or']\n      continue\n    }\n    if (key === 'not' && isRecord(value)) {\n      normalized.not = normalizeFindManyAstBooleanOperand(\n        value as AthenaWhereBooleanOperand<Row>,\n      ) as unknown as AthenaJsonObject['not']\n      continue\n    }\n    normalized[key] = normalizeFindManyAstColumnPredicate(value)\n  }\n\n  return normalized as AthenaWhere<Row>\n}\n\nfunction predicateRequiresUuidQueryFallback(\n  column: string,\n  value: unknown,\n): boolean {\n  if (!isRecord(value)) {\n    return shouldUseUuidTextComparison(column, value as Parameters<typeof shouldUseUuidTextComparison>[1])\n  }\n\n  const eqValue = value.eq\n  return eqValue !== undefined\n    && shouldUseUuidTextComparison(column, eqValue as Parameters<typeof shouldUseUuidTextComparison>[1])\n}\n\nfunction booleanOperandRequiresUuidQueryFallback<Row>(\n  clause: AthenaWhereBooleanOperand<Row>,\n): boolean {\n  for (const [column, value] of Object.entries(clause as Record<string, unknown>)) {\n    if (value === undefined) {\n      continue\n    }\n    if (predicateRequiresUuidQueryFallback(column, value)) {\n      return true\n    }\n  }\n  return false\n}\n\nexport function findManyAstWhereRequiresLegacyTransport<Row>(\n  where?: AthenaWhere<Row>,\n): boolean {\n  if (!where || !isRecord(where)) {\n    return false\n  }\n\n  for (const [key, value] of Object.entries(where as Record<string, unknown>)) {\n    if (value === undefined) {\n      continue\n    }\n    if (key === 'or' && Array.isArray(value)) {\n      if (\n        value.some(clause =>\n          booleanOperandRequiresUuidQueryFallback(clause as AthenaWhereBooleanOperand<Row>),\n        )\n      ) {\n        return true\n      }\n      continue\n    }\n    if (key === 'not' && isRecord(value)) {\n      if (booleanOperandRequiresUuidQueryFallback(value as AthenaWhereBooleanOperand<Row>)) {\n        return true\n      }\n      continue\n    }\n    if (predicateRequiresUuidQueryFallback(key, value)) {\n      return true\n    }\n  }\n\n  return false\n}\n\nexport function resolvePagination(input: {\n  limit?: number\n  offset?: number\n  currentPage?: number\n  pageSize?: number\n}): AthenaResolvedPagination {\n  let limit = input.limit\n  let offset = input.offset\n\n  if (limit === undefined && input.pageSize !== undefined) {\n    limit = Math.max(0, Math.trunc(input.pageSize))\n  }\n  if (\n    offset === undefined &&\n    input.pageSize !== undefined &&\n    input.currentPage !== undefined &&\n    input.currentPage > 0\n  ) {\n    offset = (Math.trunc(input.currentPage) - 1) * Math.max(0, Math.trunc(input.pageSize))\n  }\n\n  return { limit, offset }\n}\n\nfunction hasTypedEqualityComparison(conditions: AthenaGatewayCondition[] | undefined): boolean {\n  return (\n    conditions?.some(\n      condition =>\n        condition.operator === 'eq' &&\n        (condition.value_cast !== undefined || condition.column_cast !== undefined),\n    ) ?? false\n  )\n}\n\nexport function createSelectTransportPlan(input: {\n  tableName: string\n  columns: string | string[]\n  state: AthenaSelectExecutionState\n  options?: AthenaGatewayCallOptions\n  buildTypedSelectQuery: (input: AthenaTypedSelectQueryInput) => string | null\n}): AthenaSelectTransportPlan {\n  const conditions = input.state.conditions.length\n    ? input.state.conditions.map(condition => ({ ...condition }))\n    : undefined\n\n  const pagination = resolvePagination({\n    limit: input.state.limit,\n    offset: input.state.offset,\n    currentPage: input.state.currentPage,\n    pageSize: input.state.pageSize,\n  })\n  const stripNulls = input.options?.stripNulls ?? true\n  const structuredSelectTransport = buildStructuredSelectTransport({\n    tableName: input.tableName,\n    columns: input.columns,\n    conditions,\n    limit: pagination.limit,\n    offset: pagination.offset,\n    order: input.state.order,\n    stripNulls,\n    count: input.options?.count,\n    head: input.options?.head,\n  })\n  if (structuredSelectTransport && 'error' in structuredSelectTransport) {\n    throw new Error(structuredSelectTransport.error)\n  }\n  if (structuredSelectTransport) {\n    const { payload, select } = structuredSelectTransport\n    return {\n      kind: 'fetch',\n      payload,\n      debug: {\n        columns: select,\n        conditions,\n        limit: pagination.limit,\n        offset: pagination.offset,\n        order: input.state.order,\n      },\n    }\n  }\n\n  if (hasTypedEqualityComparison(conditions) && !input.options?.head && !input.options?.count && conditions) {\n    const query = input.buildTypedSelectQuery({\n      tableName: input.tableName,\n      columns: input.columns,\n      conditions,\n      limit: input.state.limit,\n      offset: input.state.offset,\n      currentPage: input.state.currentPage,\n      pageSize: input.state.pageSize,\n      order: input.state.order,\n    })\n    if (query) {\n      return {\n        kind: 'query',\n        query,\n        payload: { query },\n      }\n    }\n  }\n\n  return {\n    kind: 'fetch',\n    payload: {\n      table_name: input.tableName,\n      columns: input.columns,\n      conditions,\n      limit: input.state.limit,\n      offset: input.state.offset,\n      current_page: input.state.currentPage,\n      page_size: input.state.pageSize,\n      total_pages: input.state.totalPages,\n      sort_by: input.state.order,\n      strip_nulls: stripNulls,\n      count: input.options?.count,\n      head: input.options?.head,\n    },\n    debug: {\n      columns: input.columns,\n      conditions,\n      limit: input.state.limit,\n      offset: input.state.offset,\n      currentPage: input.state.currentPage,\n      pageSize: input.state.pageSize,\n      order: input.state.order,\n    },\n  }\n}\n","const SIMPLE_IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/\nconst COMPOSITE_IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*(?:\\.[A-Za-z_][A-Za-z0-9_]*)*$/\nconst SQL_ALIAS_PATTERN = /^([A-Za-z_][A-Za-z0-9_.]*)\\s+(?:as\\s+)?([A-Za-z_][A-Za-z0-9_]*)$/i\nconst RESPONSE_ALIAS_PATTERN = /^([A-Za-z_][A-Za-z0-9_]*)\\s*:\\s*([A-Za-z_][A-Za-z0-9_.]*)$/i\n\nfunction quoteIdentifierSegment(identifier: string): string {\n  return `\"${identifier.replace(/\"/g, '\"\"')}\"`\n}\n\nfunction parseAliasedIdentifierToken(\n  token: string,\n): { baseIdentifier: string; aliasIdentifier: string } | null {\n  const responseAliasMatch = RESPONSE_ALIAS_PATTERN.exec(token)\n  if (responseAliasMatch) {\n    const [, aliasIdentifier, baseIdentifier] = responseAliasMatch\n    if (COMPOSITE_IDENTIFIER_PATTERN.test(baseIdentifier) && SIMPLE_IDENTIFIER_PATTERN.test(aliasIdentifier)) {\n      return { baseIdentifier, aliasIdentifier }\n    }\n  }\n\n  const sqlAliasMatch = SQL_ALIAS_PATTERN.exec(token)\n  if (!sqlAliasMatch) {\n    return null\n  }\n\n  const [, baseIdentifier, aliasIdentifier] = sqlAliasMatch\n  if (!COMPOSITE_IDENTIFIER_PATTERN.test(baseIdentifier) || !SIMPLE_IDENTIFIER_PATTERN.test(aliasIdentifier)) {\n    return null\n  }\n\n  return { baseIdentifier, aliasIdentifier }\n}\n\n/**\n * Quotes a `schema.table.column`-style identifier path safely for SQL.\n */\nexport function quoteQualifiedIdentifier(identifier: string): string {\n  return identifier\n    .split('.')\n    .map(segment => quoteIdentifierSegment(segment))\n    .join('.')\n}\n\nfunction quoteSelectToken(token: string): string {\n  if (token === '*') return token\n  if (COMPOSITE_IDENTIFIER_PATTERN.test(token)) {\n    return quoteQualifiedIdentifier(token)\n  }\n\n  const aliasedIdentifier = parseAliasedIdentifierToken(token)\n  if (!aliasedIdentifier) {\n    return token\n  }\n  const { baseIdentifier, aliasIdentifier } = aliasedIdentifier\n  return `${quoteQualifiedIdentifier(baseIdentifier)} AS ${quoteIdentifierSegment(aliasIdentifier)}`\n}\n\nexport function quoteSelectColumnToken(token: string): string {\n  const trimmed = token.trim()\n  if (!trimmed || trimmed === '*') return trimmed || '*'\n\n  const responseAliasMatch = RESPONSE_ALIAS_PATTERN.exec(trimmed)\n  if (responseAliasMatch) {\n    const [, aliasIdentifier, baseIdentifier] = responseAliasMatch\n    return `${quoteQualifiedIdentifier(baseIdentifier)} AS ${quoteIdentifierSegment(aliasIdentifier)}`\n  }\n\n  return quoteQualifiedIdentifier(trimmed)\n}\n\nfunction canAutoQuoteToken(token: string): boolean {\n  if (token === '*') return true\n  if (COMPOSITE_IDENTIFIER_PATTERN.test(token)) return true\n  return parseAliasedIdentifierToken(token) != null\n}\n\nfunction splitTopLevelCommaSeparated(input: string): string[] | null {\n  const parts: string[] = []\n  let buffer = ''\n  let singleQuoted = false\n  let doubleQuoted = false\n  let depth = 0\n\n  for (let index = 0; index < input.length; index += 1) {\n    const char = input[index]\n    const next = index + 1 < input.length ? input[index + 1] : ''\n\n    if (singleQuoted) {\n      buffer += char\n      if (char === \"'\" && next === \"'\") {\n        buffer += next\n        index += 1\n        continue\n      }\n      if (char === \"'\") {\n        singleQuoted = false\n      }\n      continue\n    }\n\n    if (doubleQuoted) {\n      buffer += char\n      if (char === '\"' && next === '\"') {\n        buffer += next\n        index += 1\n        continue\n      }\n      if (char === '\"') {\n        doubleQuoted = false\n      }\n      continue\n    }\n\n    if (char === \"'\") {\n      singleQuoted = true\n      buffer += char\n      continue\n    }\n    if (char === '\"') {\n      doubleQuoted = true\n      buffer += char\n      continue\n    }\n\n    if (char === '(') {\n      depth += 1\n      buffer += char\n      continue\n    }\n    if (char === ')') {\n      depth -= 1\n      if (depth < 0) return null\n      buffer += char\n      continue\n    }\n\n    if (char === ',' && depth === 0) {\n      parts.push(buffer.trim())\n      buffer = ''\n      continue\n    }\n\n    buffer += char\n  }\n\n  if (singleQuoted || doubleQuoted || depth !== 0) {\n    return null\n  }\n\n  if (buffer.trim().length > 0) {\n    parts.push(buffer.trim())\n  }\n\n  return parts\n}\n\n/**\n * Quotes identifier lists while preserving raw SQL expressions.\n *\n * Examples:\n * - `\"table, user\"` -> `\"\\\"table\\\", \\\"user\\\"\"`\n * - `concat(name, ',') as label, id` -> unchanged\n */\nexport function quoteSelectColumnsExpression(columns: string): string {\n  const trimmed = columns.trim()\n  if (!trimmed || trimmed === '*') return trimmed || '*'\n\n  const tokens = splitTopLevelCommaSeparated(trimmed)\n  if (!tokens || tokens.length === 0) {\n    return trimmed\n  }\n\n  if (!tokens.every(canAutoQuoteToken)) {\n    return trimmed\n  }\n\n  return tokens.map(quoteSelectToken).join(', ')\n}\n\n/**\n * Immutable identifier object with consistent SQL rendering.\n */\nexport interface SqlIdentifier {\n  readonly segments: string[]\n  toSql(): string\n  toString(): string\n}\n\nclass SqlIdentifierPath implements SqlIdentifier {\n  readonly segments: string[]\n\n  constructor(segments: string[]) {\n    this.segments = segments\n  }\n\n  toSql(): string {\n    return this.segments.map(quoteIdentifierSegment).join('.')\n  }\n\n  toString(): string {\n    return this.toSql()\n  }\n}\n\n/**\n * Creates a quoted identifier object from segment or dotted inputs.\n */\nexport function identifier(...segments: string[]): SqlIdentifier {\n  const expandedSegments = segments\n    .flatMap(segment => segment.split('.'))\n    .map(segment => segment.trim())\n    .filter(segment => segment.length > 0)\n\n  return new SqlIdentifierPath(expandedSegments)\n}\n\n","import type {\n  AthenaConditionCastType,\n  AthenaConditionValue,\n  AthenaDeletePayload,\n  AthenaGatewayCondition,\n  AthenaInsertPayload,\n  AthenaJsonValue,\n  AthenaRpcFilter,\n  AthenaRpcPayload,\n  AthenaSortBy,\n  AthenaUpdatePayload,\n} from './gateway/types.ts'\nimport { resolvePagination } from './query-transport.ts'\nimport {\n  quoteQualifiedIdentifier,\n  quoteSelectColumnToken,\n  quoteSelectColumnsExpression,\n} from './sql-identifiers.ts'\n\nconst SAFE_CAST_PATTERN = /^[a-z_][a-z0-9_]*(?:\\[\\])?$/i\n\nfunction normalizeCast(cast: AthenaConditionCastType): string {\n  const normalized = cast.trim().toLowerCase()\n  if (!SAFE_CAST_PATTERN.test(normalized)) {\n    throw new Error(`Invalid cast type \"${cast}\"`)\n  }\n  return normalized\n}\n\nfunction escapeSqlStringLiteral(value: string): string {\n  return value.replace(/'/g, \"''\")\n}\n\nfunction toSqlLiteral(value: AthenaConditionValue): string {\n  if (value === null) return 'NULL'\n  if (typeof value === 'number') return Number.isFinite(value) ? String(value) : 'NULL'\n  if (typeof value === 'boolean') return value ? 'TRUE' : 'FALSE'\n  return `'${escapeSqlStringLiteral(value)}'`\n}\n\nfunction withCast(expression: string, cast?: AthenaConditionCastType): string {\n  if (!cast) return expression\n  return `${expression}::${normalizeCast(cast)}`\n}\n\nfunction buildSelectColumnsClause(columns: string | string[]): string {\n  if (Array.isArray(columns)) {\n    return columns.map(column => quoteSelectColumnToken(column)).join(', ')\n  }\n  return quoteSelectColumnsExpression(columns)\n}\n\ninterface ParsedIdentifierSegment {\n  normalizedValue: string\n}\n\nfunction parseIdentifierSegment(input: string): ParsedIdentifierSegment | null {\n  const trimmed = input.trim()\n  if (!trimmed) return null\n\n  if (!trimmed.startsWith('\"')) {\n    return {\n      normalizedValue: trimmed.toLowerCase(),\n    }\n  }\n\n  let value = ''\n  let index = 1\n  let closed = false\n  while (index < trimmed.length) {\n    const char = trimmed[index]\n    const next = index + 1 < trimmed.length ? trimmed[index + 1] : ''\n    if (char === '\"' && next === '\"') {\n      value += '\"'\n      index += 2\n      continue\n    }\n    if (char === '\"') {\n      closed = true\n      index += 1\n      break\n    }\n    value += char\n    index += 1\n  }\n\n  if (!closed || trimmed.slice(index).trim().length > 0 || !value.trim()) {\n    return null\n  }\n\n  return {\n    normalizedValue: value,\n  }\n}\n\nfunction splitQualifiedTableName(tableName: string): { schemaSegment: string } | null {\n  const trimmed = tableName.trim()\n  let inQuotes = false\n  for (let index = 0; index < trimmed.length; index += 1) {\n    const char = trimmed[index]\n    const next = index + 1 < trimmed.length ? trimmed[index + 1] : ''\n    if (char === '\"') {\n      if (inQuotes && next === '\"') {\n        index += 1\n        continue\n      }\n      inQuotes = !inQuotes\n      continue\n    }\n    if (char === '.' && !inQuotes) {\n      const schemaSegment = trimmed.slice(0, index).trim()\n      const tableSegment = trimmed.slice(index + 1).trim()\n      if (!schemaSegment || !tableSegment) {\n        return null\n      }\n      return { schemaSegment }\n    }\n  }\n  return null\n}\n\nexport function resolveTableNameForCall(tableName: string, schema: string | undefined): string {\n  if (!schema) return tableName\n  const normalizedSchema = schema.trim()\n  if (!normalizedSchema) {\n    throw new Error('schema option must be a non-empty string')\n  }\n  const normalizedTableName = tableName.trim()\n  const parsedSchema = parseIdentifierSegment(normalizedSchema)\n  if (!parsedSchema) {\n    throw new Error('schema option must be a non-empty string')\n  }\n  const qualified = splitQualifiedTableName(normalizedTableName)\n  if (qualified) {\n    const parsedTableSchema = parseIdentifierSegment(qualified.schemaSegment)\n    const sameSchema = parsedTableSchema\n      ? parsedTableSchema.normalizedValue === parsedSchema.normalizedValue\n      : normalizedTableName.startsWith(`${normalizedSchema}.`)\n    if (sameSchema) {\n      return normalizedTableName\n    }\n    throw new Error(\n      `schema option \"${normalizedSchema}\" conflicts with schema-qualified table \"${normalizedTableName}\"`,\n    )\n  }\n  return `${normalizedSchema}.${normalizedTableName}`\n}\n\nfunction conditionToSqlClause(condition: AthenaGatewayCondition): string | null {\n  if (!condition.column) return null\n  const column = withCast(quoteQualifiedIdentifier(condition.column), condition.column_cast)\n  const value = condition.value\n  const sqlOperator = {\n    eq: '=',\n    neq: '!=',\n    gt: '>',\n    gte: '>=',\n    lt: '<',\n    lte: '<=',\n    like: 'LIKE',\n    ilike: 'ILIKE',\n  } as const\n\n  switch (condition.operator) {\n    case 'eq':\n    case 'neq':\n    case 'gt':\n    case 'gte':\n    case 'lt':\n    case 'lte':\n    case 'like':\n    case 'ilike': {\n      if (Array.isArray(value) || value === undefined) return null\n      const rhs = withCast(toSqlLiteral(value), condition.value_cast)\n      return `${column} ${sqlOperator[condition.operator]} ${rhs}`\n    }\n    case 'is': {\n      if (value === null) return `${column} IS NULL`\n      if (value === true) return `${column} IS TRUE`\n      if (value === false) return `${column} IS FALSE`\n      return null\n    }\n    case 'in': {\n      if (!Array.isArray(value)) return null\n      if (value.length === 0) return 'FALSE'\n      const values = value.map(item => withCast(toSqlLiteral(item), condition.value_cast))\n      return `${column} IN (${values.join(', ')})`\n    }\n    default:\n      return null\n  }\n}\n\nexport function buildTypedSelectQuery(input: {\n  tableName: string\n  columns: string | string[]\n  conditions: AthenaGatewayCondition[]\n  limit?: number\n  offset?: number\n  currentPage?: number\n  pageSize?: number\n  order?: AthenaSortBy\n}): string | null {\n  const whereClauses: string[] = []\n  for (const condition of input.conditions) {\n    const clause = conditionToSqlClause(condition)\n    if (!clause) return null\n    whereClauses.push(clause)\n  }\n\n  let limit = input.limit\n  let offset = input.offset\n  if (limit === undefined && input.pageSize !== undefined) {\n    limit = input.pageSize\n  }\n  if (\n    offset === undefined &&\n    input.pageSize !== undefined &&\n    input.currentPage !== undefined &&\n    input.currentPage > 0\n  ) {\n    offset = (input.currentPage - 1) * input.pageSize\n  }\n\n  const sqlParts = [\n    `SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\n  ]\n\n  if (whereClauses.length > 0) {\n    sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\n  }\n\n  if (input.order?.field) {\n    const direction = input.order.direction === 'descending' ? 'DESC' : 'ASC'\n    sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(input.order.field)} ${direction}`)\n  }\n\n  if (limit !== undefined) {\n    sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`)\n  }\n\n  if (offset !== undefined) {\n    sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`)\n  }\n\n  return `${sqlParts.join(' ')};`\n}\n\nfunction sanitizeSqlComment(comment: string): string {\n  return comment.replace(/\\*\\//g, '* /')\n}\n\nfunction toSqlJsonLiteral(value: AthenaJsonValue | undefined): string {\n  if (value === undefined) return 'DEFAULT'\n  if (\n    value === null ||\n    typeof value === 'string' ||\n    typeof value === 'number' ||\n    typeof value === 'boolean'\n  ) {\n    return toSqlLiteral(value)\n  }\n  return `'${escapeSqlStringLiteral(JSON.stringify(value))}'::jsonb`\n}\n\nfunction conditionToDebugSqlClause(condition: AthenaGatewayCondition): string {\n  const exact = conditionToSqlClause(condition)\n  if (exact) return exact\n\n  const rawCondition = sanitizeSqlComment(JSON.stringify(condition))\n  if (!condition.column) {\n    return `TRUE /* unsupported condition: ${rawCondition} */`\n  }\n\n  const column = withCast(quoteQualifiedIdentifier(condition.column), condition.column_cast)\n  const value = condition.value\n  const rhs = withCast(toSqlJsonLiteral(value as AthenaJsonValue | undefined), condition.value_cast)\n\n  switch (condition.operator) {\n    case 'contains':\n      return `${column} @> ${rhs}`\n    case 'containedBy':\n      return `${column} <@ ${rhs}`\n    case 'not':\n      return `TRUE /* NOT expression passthrough: ${rawCondition} */`\n    case 'or':\n      return `TRUE /* OR expression passthrough: ${rawCondition} */`\n    default:\n      return `TRUE /* unsupported condition: ${rawCondition} */`\n  }\n}\n\nfunction appendOrderLimitOffset(\n  sqlParts: string[],\n  order?: AthenaSortBy,\n  limit?: number,\n  offset?: number,\n) {\n  if (order?.field) {\n    const direction = order.direction === 'descending' ? 'DESC' : 'ASC'\n    sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(order.field)} ${direction}`)\n  }\n  if (limit !== undefined) {\n    sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(limit))}`)\n  }\n  if (offset !== undefined) {\n    sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(offset))}`)\n  }\n}\n\nexport function buildDebugSelectQuery(input: {\n  tableName: string\n  columns: string | string[]\n  conditions?: AthenaGatewayCondition[]\n  limit?: number\n  offset?: number\n  currentPage?: number\n  pageSize?: number\n  order?: AthenaSortBy\n}): string {\n  const sqlParts = [\n    `SELECT ${buildSelectColumnsClause(input.columns)} FROM ${quoteQualifiedIdentifier(input.tableName)}`,\n  ]\n  if (input.conditions?.length) {\n    const whereClauses = input.conditions.map(conditionToDebugSqlClause)\n    sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\n  }\n  const pagination = resolvePagination(input)\n  appendOrderLimitOffset(sqlParts, input.order, pagination.limit, pagination.offset)\n  return `${sqlParts.join(' ')};`\n}\n\nfunction resolveDebugTableIdentifier(tableName: string | undefined): string {\n  if (!tableName?.trim()) {\n    return '\"__unknown_table__\"'\n  }\n  return quoteQualifiedIdentifier(tableName)\n}\n\nexport function buildInsertDebugSql(payload: AthenaInsertPayload): string {\n  const rows = Array.isArray(payload.insert_body)\n    ? payload.insert_body\n    : [payload.insert_body]\n  const columns: string[] = []\n  const seen = new Set<string>()\n  for (const row of rows) {\n    for (const column of Object.keys(row)) {\n      if (seen.has(column)) continue\n      seen.add(column)\n      columns.push(column)\n    }\n  }\n\n  const sqlParts = [`INSERT INTO ${quoteQualifiedIdentifier(payload.table_name)}`]\n\n  if (!rows.length || !columns.length) {\n    sqlParts.push('DEFAULT VALUES')\n    if (rows.length > 1) {\n      sqlParts.push(`/* trace: ${rows.length} rows collapsed to DEFAULT VALUES */`)\n    }\n  } else {\n    const valuesClause = rows\n      .map(row => {\n        const values = columns.map(column => {\n          const hasColumn = Object.prototype.hasOwnProperty.call(row, column)\n          if (!hasColumn) {\n            return payload.default_to_null ? 'NULL' : 'DEFAULT'\n          }\n          const rowValue = (row as Record<string, AthenaJsonValue | undefined>)[column]\n          return toSqlJsonLiteral(rowValue)\n        })\n        return `(${values.join(', ')})`\n      })\n      .join(', ')\n    const columnClause = columns.map(column => quoteQualifiedIdentifier(column)).join(', ')\n    sqlParts.push(`(${columnClause})`)\n    sqlParts.push(`VALUES ${valuesClause}`)\n  }\n\n  if (payload.on_conflict) {\n    const conflictColumns = Array.isArray(payload.on_conflict)\n      ? payload.on_conflict.map(column => quoteQualifiedIdentifier(column)).join(', ')\n      : payload.on_conflict\n    if (payload.update_body && Object.keys(payload.update_body).length > 0) {\n      const assignments = Object.entries(payload.update_body).map(([column, value]) =>\n        `${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`,\n      )\n      sqlParts.push(`ON CONFLICT (${conflictColumns}) DO UPDATE SET ${assignments.join(', ')}`)\n    } else {\n      sqlParts.push(`ON CONFLICT (${conflictColumns}) DO NOTHING`)\n    }\n  }\n\n  if (payload.columns) {\n    sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`)\n  }\n\n  return `${sqlParts.join(' ')};`\n}\n\nexport function buildUpdateDebugSql(payload: AthenaUpdatePayload): string {\n  const assignments = Object.entries(payload.update_body).map(([column, value]) =>\n    `${quoteQualifiedIdentifier(column)} = ${toSqlJsonLiteral(value as AthenaJsonValue)}`,\n  )\n  const sqlParts = [\n    `UPDATE ${resolveDebugTableIdentifier(payload.table_name)} SET ${assignments.length ? assignments.join(', ') : '/* empty set */'}`,\n  ]\n  if (payload.conditions?.length) {\n    const whereClauses = payload.conditions.map(conditionToDebugSqlClause)\n    sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\n  }\n  const pagination = resolvePagination({\n    currentPage: payload.current_page,\n    pageSize: payload.page_size,\n  })\n  appendOrderLimitOffset(sqlParts, payload.sort_by, pagination.limit, pagination.offset)\n  if (payload.columns) {\n    sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`)\n  }\n  return `${sqlParts.join(' ')};`\n}\n\nexport function buildDeleteDebugSql(payload: AthenaDeletePayload): string {\n  const sqlParts = [`DELETE FROM ${quoteQualifiedIdentifier(payload.table_name)}`]\n  const whereClauses: string[] = []\n  if (payload.resource_id) {\n    whereClauses.push(`\"resource_id\" = ${toSqlLiteral(payload.resource_id)}`)\n  }\n  if (payload.conditions?.length) {\n    whereClauses.push(...payload.conditions.map(conditionToDebugSqlClause))\n  }\n  if (whereClauses.length) {\n    sqlParts.push(`WHERE ${whereClauses.join(' AND ')}`)\n  }\n  const pagination = resolvePagination({\n    currentPage: payload.current_page,\n    pageSize: payload.page_size,\n  })\n  appendOrderLimitOffset(sqlParts, payload.sort_by, pagination.limit, pagination.offset)\n  if (payload.columns) {\n    sqlParts.push(`RETURNING ${buildSelectColumnsClause(payload.columns)}`)\n  }\n  return `${sqlParts.join(' ')};`\n}\n\nfunction rpcFilterToSqlClause(filter: AthenaRpcFilter): string {\n  const column = quoteQualifiedIdentifier(filter.column)\n  const value = filter.value\n  switch (filter.operator) {\n    case 'eq':\n    case 'neq':\n    case 'gt':\n    case 'gte':\n    case 'lt':\n    case 'lte':\n    case 'like':\n    case 'ilike': {\n      if (value === undefined || Array.isArray(value)) {\n        return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\n      }\n      const operatorMap = {\n        eq: '=',\n        neq: '!=',\n        gt: '>',\n        gte: '>=',\n        lt: '<',\n        lte: '<=',\n        like: 'LIKE',\n        ilike: 'ILIKE',\n      } as const\n      return `${column} ${operatorMap[filter.operator]} ${toSqlLiteral(value)}`\n    }\n    case 'is':\n      if (value === null) return `${column} IS NULL`\n      if (value === true) return `${column} IS TRUE`\n      if (value === false) return `${column} IS FALSE`\n      return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\n    case 'in':\n      if (!Array.isArray(value)) {\n        return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\n      }\n      if (value.length === 0) return 'FALSE'\n      return `${column} IN (${value.map(item => toSqlLiteral(item)).join(', ')})`\n    default:\n      return `TRUE /* unsupported rpc filter: ${sanitizeSqlComment(JSON.stringify(filter))} */`\n  }\n}\n\nexport function buildRpcDebugSql(payload: AthenaRpcPayload): string {\n  const argsEntries = payload.args ? Object.entries(payload.args) : []\n  const argsClause = argsEntries\n    .map(([key, value]) => `${quoteQualifiedIdentifier(key)} => ${toSqlJsonLiteral(value as AthenaJsonValue)}`)\n    .join(', ')\n  const functionRef = payload.schema\n    ? `${quoteQualifiedIdentifier(payload.schema)}.${quoteQualifiedIdentifier(payload.function)}`\n    : quoteQualifiedIdentifier(payload.function)\n  const sqlParts = [\n    `SELECT ${payload.select ? quoteSelectColumnsExpression(payload.select) : '*'} FROM ${functionRef}(${argsClause})`,\n  ]\n  if (payload.filters?.length) {\n    sqlParts.push(`WHERE ${payload.filters.map(rpcFilterToSqlClause).join(' AND ')}`)\n  }\n  if (payload.order?.column) {\n    const direction = payload.order.ascending === false ? 'DESC' : 'ASC'\n    sqlParts.push(`ORDER BY ${quoteQualifiedIdentifier(payload.order.column)} ${direction}`)\n  }\n  if (payload.limit !== undefined) {\n    sqlParts.push(`LIMIT ${Math.max(0, Math.trunc(payload.limit))}`)\n  }\n  if (payload.offset !== undefined) {\n    sqlParts.push(`OFFSET ${Math.max(0, Math.trunc(payload.offset))}`)\n  }\n  return `${sqlParts.join(' ')};`\n}\n\n\n","import { AthenaGatewayError } from './errors.ts'\n\nexport const ATHENA_DEFAULT_BASE_URL = 'https://mirror2.athena-cluster.com'\n\nfunction describeReceivedValue(value: unknown): string {\n  if (value === undefined) return 'undefined'\n  if (value === null) return 'null'\n  if (typeof value === 'string') {\n    return value.trim().length > 0 ? JSON.stringify(value) : 'an empty string'\n  }\n  return `${typeof value} ${JSON.stringify(value)}`\n}\n\nfunction invalidBaseUrlError(message: string, hint: string): AthenaGatewayError {\n  return new AthenaGatewayError({\n    code: 'INVALID_URL',\n    message,\n    status: 0,\n    hint,\n  })\n}\n\nexport interface NormalizeAthenaGatewayBaseUrlOptions {\n  defaultBaseUrl?: string\n  label?: string\n}\n\nexport function normalizeAthenaGatewayBaseUrl(\n  input: string | null | undefined,\n  options: NormalizeAthenaGatewayBaseUrlOptions = {},\n): string {\n  const label = options.label ?? 'Athena gateway base URL'\n  const candidate = input ?? options.defaultBaseUrl\n\n  if (candidate === undefined || candidate === null) {\n    throw invalidBaseUrlError(\n      `${label} must be a non-empty absolute http(s) URL. Received ${describeReceivedValue(input)}.`,\n      'Set ATHENA_URL in the explicit env object (or pass createClient({ url, key })) to a full URL such as \"https://mirror2.athena-cluster.com\".',\n    )\n  }\n\n  const trimmed = candidate.trim()\n  if (!trimmed) {\n    throw invalidBaseUrlError(\n      `${label} must be a non-empty absolute http(s) URL. Received ${describeReceivedValue(candidate)}.`,\n      'Set ATHENA_URL in the explicit env object (or pass createClient({ url, key })) to a full URL such as \"https://mirror2.athena-cluster.com\".',\n    )\n  }\n\n  let parsed: URL\n  try {\n    parsed = new URL(trimmed)\n  } catch {\n    throw invalidBaseUrlError(\n      `${label} must be a valid absolute http(s) URL. Received ${describeReceivedValue(candidate)}.`,\n      'Use a full URL including the protocol, for example \"https://mirror2.athena-cluster.com\".',\n    )\n  }\n\n  if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n    throw invalidBaseUrlError(\n      `${label} must use http or https. Received ${JSON.stringify(trimmed)}.`,\n      'Use an Athena gateway URL such as \"https://mirror2.athena-cluster.com\".',\n    )\n  }\n\n  if (parsed.search || parsed.hash) {\n    throw invalidBaseUrlError(\n      `${label} must not include query parameters or hash fragments. Received ${JSON.stringify(trimmed)}.`,\n      'Pass only the base URL. Endpoint paths such as \"/gateway/fetch\" are appended by the SDK.',\n    )\n  }\n\n  return parsed.toString().replace(/\\/+$/, '')\n}\n\nexport function buildAthenaGatewayUrl(baseUrl: string, path: string): string {\n  if (!path.startsWith('/')) {\n    throw invalidBaseUrlError(\n      `Athena gateway path must start with \"/\". Received ${JSON.stringify(path)}.`,\n      'Use a leading slash such as \"/gateway/fetch\" or \"/\".',\n    )\n  }\n\n  return `${baseUrl}${path}`\n}\n","{\n  \"author\": \"floris@xylex.group\",\n  \"bin\": {\n    \"athena-js\": \"bin/athena-js.js\"\n  },\n  \"dependencies\": {\n    \"blessed\": \"^0.1.81\",\n    \"chalk\": \"^4.1.2\",\n    \"cron-parser\": \"^4.9.0\",\n    \"jose\": \"^6.2.3\",\n    \"pg\": \"^8.16.0\",\n    \"server-only\": \"^0.0.1\",\n    \"use-sync-external-store\": \"^1.5.0\",\n    \"uuid\": \"^9.0.1\",\n    \"zod\": \"^4.0.1\"\n  },\n  \"description\": \"Athena JS SDK\",\n  \"devDependencies\": {\n    \"@react-email/components\": \"^1.0.12\",\n    \"@react-email/render\": \"^2.0.8\",\n    \"@types/blessed\": \"^0.1.25\",\n    \"@types/node\": \"^20.10.5\",\n    \"@types/pg\": \"^8.15.1\",\n    \"@types/react\": \"^18.3.12\",\n    \"@types/react-test-renderer\": \"^18.3.1\",\n    \"@types/uuid\": \"^9.0.7\",\n    \"@typescript-eslint/eslint-plugin\": \"^8.57.0\",\n    \"@typescript-eslint/parser\": \"^8.57.0\",\n    \"eslint\": \"^8.57.1\",\n    \"express\": \"^4.22.2\",\n    \"react\": \"^18.3.1\",\n    \"react-dom\": \"^18.3.1\",\n    \"react-test-renderer\": \"^18.3.1\",\n    \"tsup\": \"^8.5.1\",\n    \"tsx\": \"^4.7.0\",\n    \"typescript\": \"^5.3.3\"\n  },\n  \"engines\": {\n    \"node\": \">=18.0.0\"\n  },\n  \"exports\": {\n    \".\": {\n      \"browser\": {\n        \"default\": \"./dist/browser.js\",\n        \"import\": \"./dist/browser.js\",\n        \"require\": \"./dist/browser.cjs\",\n        \"types\": \"./dist/browser.d.ts\"\n      },\n      \"default\": \"./dist/index.js\",\n      \"import\": \"./dist/index.js\",\n      \"require\": \"./dist/index.cjs\",\n      \"types\": \"./dist/index.d.ts\"\n    },\n    \"./admin\": {\n      \"default\": \"./dist/admin.js\",\n      \"import\": \"./dist/admin.js\",\n      \"require\": \"./dist/admin.cjs\",\n      \"types\": \"./dist/admin.d.ts\"\n    },\n    \"./billing\": {\n      \"default\": \"./dist/billing.js\",\n      \"import\": \"./dist/billing.js\",\n      \"require\": \"./dist/billing.cjs\",\n      \"types\": \"./dist/billing.d.ts\"\n    },\n    \"./browser\": {\n      \"default\": \"./dist/browser.js\",\n      \"import\": \"./dist/browser.js\",\n      \"require\": \"./dist/browser.cjs\",\n      \"types\": \"./dist/browser.d.ts\"\n    },\n    \"./cookies\": {\n      \"default\": \"./dist/cookies.js\",\n      \"import\": \"./dist/cookies.js\",\n      \"require\": \"./dist/cookies.cjs\",\n      \"types\": \"./dist/cookies.d.ts\"\n    },\n    \"./next/client\": {\n      \"default\": \"./dist/next/client.js\",\n      \"import\": \"./dist/next/client.js\",\n      \"require\": \"./dist/next/client.cjs\",\n      \"types\": \"./dist/next/client.d.ts\"\n    },\n    \"./next/server\": {\n      \"default\": \"./dist/next/server.js\",\n      \"import\": \"./dist/next/server.js\",\n      \"require\": \"./dist/next/server.cjs\",\n      \"types\": \"./dist/next/server.d.ts\"\n    },\n    \"./organization\": {\n      \"default\": \"./dist/organization.js\",\n      \"import\": \"./dist/organization.js\",\n      \"require\": \"./dist/organization.cjs\",\n      \"types\": \"./dist/organization.d.ts\"\n    },\n    \"./package.json\": \"./package.json\",\n    \"./react\": {\n      \"default\": \"./dist/react.js\",\n      \"import\": \"./dist/react.js\",\n      \"require\": \"./dist/react.cjs\",\n      \"types\": \"./dist/react.d.ts\"\n    },\n    \"./social-providers\": {\n      \"default\": \"./dist/social-providers.js\",\n      \"import\": \"./dist/social-providers.js\",\n      \"require\": \"./dist/social-providers.cjs\",\n      \"types\": \"./dist/social-providers.d.ts\"\n    },\n    \"./utils\": {\n      \"default\": \"./dist/utils.js\",\n      \"import\": \"./dist/utils.js\",\n      \"require\": \"./dist/utils.cjs\",\n      \"types\": \"./dist/utils.d.ts\"\n    }\n  },\n  \"files\": [\n    \"dist\",\n    \"bin\",\n    \"README.md\",\n    \"LICENSE\"\n  ],\n  \"keywords\": [\n    \"database\",\n    \"driver\",\n    \"api-gateway\",\n    \"sdk\",\n    \"react\",\n    \"hooks\",\n    \"http\",\n    \"postgres\",\n    \"query-builder\"\n  ],\n  \"license\": \"MIT\",\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.js\",\n  \"name\": \"@xylex-group/athena\",\n  \"peerDependencies\": {\n    \"@react-email/components\": \">=1.0.0\",\n    \"@react-email/render\": \">=2.0.0\",\n    \"react\": \">=17.0.0\"\n  },\n  \"peerDependenciesMeta\": {\n    \"@react-email/components\": {\n      \"optional\": true\n    },\n    \"@react-email/render\": {\n      \"optional\": true\n    },\n    \"react\": {\n      \"optional\": true\n    }\n  },\n  \"publisher\": \"XYLEX Group\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/xylex-group/athena-js.git\"\n  },\n  \"scripts\": {\n    \"build\": \"tsup\",\n    \"check:all\": \"pnpm lint && pnpm typecheck && pnpm test && pnpm build\",\n    \"dev\": \"tsup --watch\",\n    \"docs:methods\": \"node scripts/generate-sdk-method-reference.mjs\",\n    \"docs:site:check\": \"pnpm --dir ../../apps/docs docs:sync-athena-js:check\",\n    \"docs:site:sync\": \"pnpm --dir ../../apps/docs docs:sync-athena-js\",\n    \"example:api-call\": \"cd examples/api-call && bun run start\",\n    \"example:email-resend\": \"cd examples/email-resend && bun run start\",\n    \"example:express-api\": \"cd examples/express-api && bun run start\",\n    \"example:order-saga\": \"cd examples/order-saga && bun run start\",\n    \"example:postgres-connection\": \"cd examples/postgres-connection && bun run start\",\n    \"example:recurring-invoice\": \"cd examples/recurring-invoice && bun run start\",\n    \"example:retry-patterns\": \"cd examples/retry-patterns && bun run start\",\n    \"lint\": \"eslint \\\"src/**/*.ts\\\" \\\"test/**/*.ts\\\"\",\n    \"lint:fix\": \"pnpm lint -- --fix\",\n    \"prepublishOnly\": \"pnpm typecheck && pnpm build\",\n    \"publish:token\": \"node scripts/publish.js\",\n    \"test\": \"node --import ./test/register-server-only.mjs --import tsx --test --test-force-exit test/*.test.ts\",\n    \"test:integration:postgres\": \"node scripts/run-postgres-introspection-test.mjs\",\n    \"test:watch\": \"node --import ./test/register-server-only.mjs --import tsx --test --watch test/*.test.ts\",\n    \"typecheck\": \"tsc -p tsconfig.typecheck.json\"\n  },\n  \"sideEffects\": false,\n  \"type\": \"module\",\n  \"types\": \"./dist/index.d.ts\",\n  \"typesVersions\": {\n    \"*\": {\n      \"*\": [\n        \"dist/index.d.ts\"\n      ],\n      \"admin\": [\n        \"dist/admin.d.ts\"\n      ],\n      \"billing\": [\n        \"dist/billing.d.ts\"\n      ],\n      \"browser\": [\n        \"dist/browser.d.ts\"\n      ],\n      \"cookies\": [\n        \"dist/cookies.d.ts\"\n      ],\n      \"next/client\": [\n        \"dist/next/client.d.ts\"\n      ],\n      \"next/server\": [\n        \"dist/next/server.d.ts\"\n      ],\n      \"organization\": [\n        \"dist/organization.d.ts\"\n      ],\n      \"react\": [\n        \"dist/react.d.ts\"\n      ],\n      \"social-providers\": [\n        \"dist/social-providers.d.ts\"\n      ],\n      \"utils\": [\n        \"dist/utils.d.ts\"\n      ]\n    }\n  },\n  \"version\": \"3.0.2\"\n}","import packageJson from '../package.json' with { type: 'json' }\n\nexport const PACKAGE_VERSION = packageJson.version\n\nexport function buildSdkHeaderValue(sdkName: string): string {\n  return `${sdkName} ${PACKAGE_VERSION}`\n}\n","import type { AthenaCookieOptions } from './types.ts'\n\nfunction tryDecode(str: string): string {\n  if (str.indexOf('%') === -1) {\n    return str\n  }\n  try {\n    return decodeURIComponent(str)\n  } catch {\n    return str\n  }\n}\n\nexport interface CookieAttributes {\n  value: string\n  'max-age'?: number\n  expires?: Date\n  domain?: string\n  path?: string\n  secure?: boolean\n  httponly?: boolean\n  partitioned?: boolean\n  samesite?: 'strict' | 'lax' | 'none'\n  [key: string]: unknown\n}\n\nexport const SECURE_COOKIE_PREFIX = '__Secure-'\nexport const HOST_COOKIE_PREFIX = '__Host-'\n\n/**\n * Remove __Secure- or __Host- prefix from cookie name.\n */\nexport function stripSecureCookiePrefix(cookieName: string): string {\n  if (cookieName.startsWith(SECURE_COOKIE_PREFIX)) {\n    return cookieName.slice(SECURE_COOKIE_PREFIX.length)\n  }\n  if (cookieName.startsWith(HOST_COOKIE_PREFIX)) {\n    return cookieName.slice(HOST_COOKIE_PREFIX.length)\n  }\n  return cookieName\n}\n\n/**\n * Split a comma-joined `Set-Cookie` header string into individual cookies.\n */\nexport function splitSetCookieHeader(setCookie: string): string[] {\n  if (!setCookie) {\n    return []\n  }\n\n  const result: string[] = []\n  let start = 0\n  let i = 0\n\n  while (i < setCookie.length) {\n    if (setCookie[i] === ',') {\n      let j = i + 1\n      while (j < setCookie.length && setCookie[j] === ' ') {\n        j++\n      }\n      while (j < setCookie.length && setCookie[j] !== '=' && setCookie[j] !== ';' && setCookie[j] !== ',') {\n        j++\n      }\n\n      if (j < setCookie.length && setCookie[j] === '=') {\n        const part = setCookie.slice(start, i).trim()\n        if (part) {\n          result.push(part)\n        }\n        start = i + 1\n        while (start < setCookie.length && setCookie[start] === ' ') {\n          start++\n        }\n        i = start\n        continue\n      }\n    }\n    i++\n  }\n\n  const last = setCookie.slice(start).trim()\n  if (last) {\n    result.push(last)\n  }\n\n  return result\n}\n\nexport function parseSetCookieHeader(setCookie: string): Map<string, CookieAttributes> {\n  const cookies = new Map<string, CookieAttributes>()\n  const cookieArray = splitSetCookieHeader(setCookie)\n\n  for (const cookieString of cookieArray) {\n    const parts = cookieString.split(';').map((part) => part.trim())\n    const [nameValue, ...attributes] = parts\n    const [name, ...valueParts] = (nameValue || '').split('=')\n    if (!name) {\n      continue\n    }\n\n    const value = unquoteCookieValue(valueParts.join('='))\n    const decodedValue = tryDecode(value)\n    const attrObj: CookieAttributes = { value: decodedValue }\n\n    for (const attribute of attributes) {\n      const [attrName, ...attrValueParts] = attribute.split('=')\n      const attrValue = attrValueParts.join('=')\n      const normalizedAttrName = attrName.trim().toLowerCase()\n      switch (normalizedAttrName) {\n        case 'max-age':\n          attrObj['max-age'] = attrValue ? parseInt(attrValue.trim(), 10) : undefined\n          break\n        case 'expires':\n          attrObj.expires = attrValue ? new Date(attrValue.trim()) : undefined\n          break\n        case 'domain':\n          attrObj.domain = attrValue ? attrValue.trim() : undefined\n          break\n        case 'path':\n          attrObj.path = attrValue ? attrValue.trim() : undefined\n          break\n        case 'secure':\n          attrObj.secure = true\n          break\n        case 'httponly':\n          attrObj.httponly = true\n          break\n        case 'samesite':\n          attrObj.samesite = attrValue ? (attrValue.trim().toLowerCase() as 'strict' | 'lax' | 'none') : undefined\n          break\n        case 'partitioned':\n          attrObj.partitioned = true\n          break\n        default:\n          attrObj[normalizedAttrName] = attrValue ? attrValue.trim() : true\n          break\n      }\n    }\n\n    cookies.set(name, attrObj)\n  }\n\n  return cookies\n}\n\nexport function toCookieOptions(attributes: CookieAttributes): AthenaCookieOptions {\n  return {\n    maxAge: attributes['max-age'],\n    expires: attributes.expires,\n    domain: attributes.domain,\n    path: attributes.path,\n    secure: attributes.secure,\n    httpOnly: attributes.httponly,\n    sameSite: attributes.samesite,\n    partitioned: attributes.partitioned,\n  }\n}\n\n/**\n * Cookie-name token char set per RFC 7230 §3.2.6.\n */\nexport const cookieNameRegex = /^[\\w!#$%&'*.^`|~+-]+$/\n\nfunction unquoteCookieValue(value: string): string {\n  if (value.length < 2 || !value.startsWith('\"') || !value.endsWith('\"')) {\n    return value\n  }\n  return value.slice(1, -1)\n}\n\n/**\n * Parse a `Cookie` header into a key/value map.\n */\nexport function parseCookies(cookieHeader: string): Map<string, string> {\n  const cookies = cookieHeader.split('; ')\n  const cookieMap = new Map<string, string>()\n  cookies.forEach((cookie) => {\n    const [name, value] = cookie.split(/=(.*)/s)\n    cookieMap.set(name as string, value as string)\n  })\n  return cookieMap\n}\n\n/**\n * Add or replace a cookie in the request `Cookie` header.\n */\nexport function setRequestCookie(headers: Headers, name: string, value: string): void {\n  const cookieMap = parseCookies(headers.get('cookie') || '')\n  if (cookieNameRegex.test(name)) {\n    cookieMap.set(name, value)\n  }\n  headers.set(\n    'cookie',\n    Array.from(cookieMap, ([key, currentValue]) => `${key}=${encodeURIComponent(currentValue)}`).join('; '),\n  )\n}\n\n/**\n * Merge `Set-Cookie` values into a `Cookie` header.\n */\nexport function applySetCookies(target: Headers, setCookieValues: Iterable<string>): void {\n  const cookieMap = parseCookies(target.get('cookie') || '')\n  for (const setCookie of setCookieValues) {\n    for (const [name, attr] of parseSetCookieHeader(setCookie)) {\n      if (cookieNameRegex.test(name)) {\n        cookieMap.set(name, attr.value)\n      }\n    }\n  }\n  target.set(\n    'cookie',\n    Array.from(cookieMap, ([key, currentValue]) => `${key}=${encodeURIComponent(currentValue)}`).join('; '),\n  )\n}\n\nexport function setCookieToHeader(headers: Headers) {\n  return (context: { response: Response }) => {\n    const setCookieHeader = context.response.headers.get('set-cookie')\n    if (!setCookieHeader) {\n      return\n    }\n    applySetCookies(headers, [setCookieHeader])\n  }\n}\n","/**\n * Cookie-header detection for Athena Auth / Better Auth session cookies.\n *\n * Used by Next.js middleware and edge guards to decide whether a request\n * already carries a session token **without** parsing the full cookie map.\n */\n\n/**\n * Patterns that match a non-empty session token cookie assignment in a raw\n * `Cookie` request header.\n *\n * Covers:\n * - Better Auth: `better-auth.session_token`, `better-auth-session_token`\n * - Athena Auth (hyphen form): `athena-auth.session-token`, `athena-auth-session-token`\n * - Athena Auth (underscore form / default cookie helper): `athena-auth.session_token`,\n *   `athena-auth-session_token`\n * - Optional `__Secure-` prefix (HTTPS cookie prefixing)\n *\n * Each pattern requires a leading start-of-string or `; ` boundary and a\n * trailing `=` so bare name fragments do not false-positive.\n */\nexport const SESSION_COOKIE_PATTERNS = [\n  /(?:^|;\\s*)(?:__Secure-)?better-auth\\.session_token=/,\n  /(?:^|;\\s*)(?:__Secure-)?better-auth-session_token=/,\n  /(?:^|;\\s*)(?:__Secure-)?athena-auth\\.session-token=/,\n  /(?:^|;\\s*)(?:__Secure-)?athena-auth-session-token=/,\n  /(?:^|;\\s*)(?:__Secure-)?athena-auth\\.session_token=/,\n  /(?:^|;\\s*)(?:__Secure-)?athena-auth-session_token=/,\n] as const\n\n/**\n * Returns whether a raw `Cookie` header appears to include an auth session\n * token cookie (Athena Auth or Better Auth naming).\n *\n * This is a **presence** check only — it does not validate the token value,\n * signature, or expiry. Prefer {@link getSessionCookie} when you need the\n * actual token string.\n *\n * @param cookieHeader - Value of the `Cookie` request header, or `null`/`undefined`\n * @returns `true` if any {@link SESSION_COOKIE_PATTERNS} matches\n *\n * @example\n * ```ts\n * import { hasAuthSessionCookie } from '@xylex-group/athena/cookies'\n *\n * export function middleware(request: Request) {\n *   if (!hasAuthSessionCookie(request.headers.get('cookie'))) {\n *     return Response.redirect(new URL('/sign-in', request.url))\n *   }\n * }\n * ```\n */\nexport function hasAuthSessionCookie(\n  cookieHeader: string | null | undefined,\n): boolean {\n  if (!cookieHeader) {\n    return false\n  }\n\n  return SESSION_COOKIE_PATTERNS.some((pattern) => pattern.test(cookieHeader))\n}\n","import { decodeBase64UrlToString, encodeStringToBase64Url } from './base64.ts'\nimport {\n  HOST_COOKIE_PREFIX,\n  SECURE_COOKIE_PREFIX,\n  parseCookies,\n  parseSetCookieHeader,\n  setCookieToHeader,\n  setRequestCookie,\n  splitSetCookieHeader,\n  stripSecureCookiePrefix,\n  toCookieOptions,\n} from './cookie-utils.ts'\nimport { signHmacBase64Url, signJwtHS256, verifyJwtHS256 } from './crypto.ts'\nimport { createAccountStore, createSessionStore, getAccountCookie, getChunkedCookie } from './session-store.ts'\nimport type {\n  AthenaAuthCookie,\n  AthenaAuthCookies,\n  AthenaCookieContextRuntime,\n  AthenaCookieOptions,\n  AthenaCookiesOptions,\n  AthenaCookieVersionResolver,\n  AthenaGetCookieCacheConfig,\n  AthenaSessionPair,\n} from './types.ts'\n\nconst DEFAULT_COOKIE_PREFIX = 'athena-auth'\nconst LEGACY_COOKIE_PREFIX = 'better-auth'\nconst DEFAULT_SESSION_MAX_AGE = 7 * 24 * 60 * 60\nconst DEFAULT_CACHE_MAX_AGE = 60 * 5\n\nfunction isProductionRuntime(): boolean {\n  return typeof process !== 'undefined' && process.env?.NODE_ENV === 'production'\n}\n\nfunction getEnvironmentSecret(): string | undefined {\n  if (typeof process === 'undefined') {\n    return undefined\n  }\n  return process.env?.ATHENA_AUTH_SECRET || process.env?.BETTER_AUTH_SECRET || process.env?.AUTH_SECRET\n}\n\nfunction isDynamicBaseURLConfig(baseURL: AthenaCookiesOptions['baseURL']): boolean {\n  return (\n    typeof baseURL === 'object' &&\n    baseURL !== null &&\n    'allowedHosts' in baseURL &&\n    Array.isArray((baseURL as { allowedHosts?: unknown }).allowedHosts)\n  )\n}\n\nfunction resolveCookiePrefixes(primaryPrefix: string): string[] {\n  const prefixes = [primaryPrefix]\n  if (!prefixes.includes(DEFAULT_COOKIE_PREFIX)) {\n    prefixes.push(DEFAULT_COOKIE_PREFIX)\n  }\n  if (!prefixes.includes(LEGACY_COOKIE_PREFIX)) {\n    prefixes.push(LEGACY_COOKIE_PREFIX)\n  }\n  return prefixes\n}\n\nfunction createError(message: string): Error {\n  return new Error(`@xylex-group/athena/cookies: ${message}`)\n}\n\nfunction getSecretOrThrow(secret?: string): string {\n  const resolved = secret || getEnvironmentSecret()\n  if (!resolved) {\n    throw createError(\n      'getCookieCache requires a secret. Pass `secret` or set ATHENA_AUTH_SECRET/BETTER_AUTH_SECRET/AUTH_SECRET.',\n    )\n  }\n  return resolved\n}\n\nfunction asObject(value: unknown): Record<string, unknown> | null {\n  if (!value || typeof value !== 'object') {\n    return null\n  }\n  return value as Record<string, unknown>\n}\n\nfunction getSessionTokenFromPair(session: AthenaSessionPair): string {\n  const token = session.session?.token\n  if (typeof token !== 'string' || token.length === 0) {\n    throw createError('setSessionCookie requires `session.session.token` to be a non-empty string.')\n  }\n  return token\n}\n\nasync function resolveCookieVersion(\n  versionConfig: AthenaCookieVersionResolver | undefined,\n  session: Record<string, unknown>,\n  user: Record<string, unknown>,\n): Promise<string> {\n  if (!versionConfig) {\n    return '1'\n  }\n  if (typeof versionConfig === 'string') {\n    return versionConfig\n  }\n  return versionConfig(session, user)\n}\n\nfunction getSessionCookieCacheName(cookiePrefix: string, cookieName: string, isSecure: boolean): string {\n  return isSecure ? `${SECURE_COOKIE_PREFIX}${cookiePrefix}.${cookieName}` : `${cookiePrefix}.${cookieName}`\n}\n\nasync function setCookieValue(\n  ctx: AthenaCookieContextRuntime,\n  name: string,\n  value: string,\n  attributes: AthenaCookieOptions,\n): Promise<void> {\n  const secret = ctx.context.secret\n  if (secret && typeof ctx.setSignedCookie === 'function') {\n    await ctx.setSignedCookie(name, value, secret, attributes)\n    return\n  }\n  ctx.setCookie(name, value, attributes)\n}\n\nfunction parseJsonSafely<T>(value: string): T | null {\n  try {\n    return JSON.parse(value) as T\n  } catch {\n    return null\n  }\n}\n\nfunction getIsSecureCookie(config: { isSecure?: boolean } | undefined): boolean {\n  if (config?.isSecure !== undefined) {\n    return config.isSecure\n  }\n  return isProductionRuntime()\n}\n\nexport function createCookieGetter(options: AthenaCookiesOptions) {\n  const baseURLString = typeof options.baseURL === 'string' ? options.baseURL : undefined\n  const dynamicProtocol =\n    typeof options.baseURL === 'object' && options.baseURL !== null ? options.baseURL.protocol : undefined\n\n  const secure =\n    options.advanced?.useSecureCookies !== undefined\n      ? options.advanced.useSecureCookies\n      : dynamicProtocol === 'https'\n        ? true\n        : dynamicProtocol === 'http'\n          ? false\n          : baseURLString\n            ? baseURLString.startsWith('https://')\n            : isProductionRuntime()\n\n  const secureCookiePrefix = secure ? SECURE_COOKIE_PREFIX : ''\n  const crossSubdomainEnabled = !!options.advanced?.crossSubDomainCookies?.enabled\n  const domain = crossSubdomainEnabled\n    ? options.advanced?.crossSubDomainCookies?.domain || (baseURLString ? new URL(baseURLString).hostname : undefined)\n    : undefined\n\n  if (crossSubdomainEnabled && !domain && !isDynamicBaseURLConfig(options.baseURL)) {\n    throw createError('baseURL is required when `crossSubDomainCookies.enabled` is true.')\n  }\n\n  function createCookie(cookieName: string, overrideAttributes: Partial<AthenaCookieOptions> = {}): AthenaAuthCookie {\n    const prefix = options.advanced?.cookiePrefix || DEFAULT_COOKIE_PREFIX\n    const name = options.advanced?.cookies?.[cookieName]?.name || `${prefix}.${cookieName}`\n    const attributes = options.advanced?.cookies?.[cookieName]?.attributes || {}\n\n    return {\n      name: `${secureCookiePrefix}${name}`,\n      attributes: {\n        secure: !!secureCookiePrefix,\n        sameSite: 'lax',\n        path: '/',\n        httpOnly: true,\n        ...(crossSubdomainEnabled ? { domain } : {}),\n        ...options.advanced?.defaultCookieAttributes,\n        ...overrideAttributes,\n        ...attributes,\n      },\n    }\n  }\n\n  return createCookie\n}\n\nexport function getCookies(options: AthenaCookiesOptions): AthenaAuthCookies {\n  const createCookie = createCookieGetter(options)\n  const sessionToken = createCookie('session_token', { maxAge: options.session?.expiresIn || DEFAULT_SESSION_MAX_AGE })\n  const sessionData = createCookie('session_data', { maxAge: options.session?.cookieCache?.maxAge || DEFAULT_CACHE_MAX_AGE })\n  const accountData = createCookie('account_data', { maxAge: options.session?.cookieCache?.maxAge || DEFAULT_CACHE_MAX_AGE })\n  const dontRememberToken = createCookie('dont_remember')\n\n  return {\n    sessionToken: {\n      name: sessionToken.name,\n      attributes: sessionToken.attributes,\n    },\n    sessionData: {\n      name: sessionData.name,\n      attributes: sessionData.attributes,\n    },\n    dontRememberToken: {\n      name: dontRememberToken.name,\n      attributes: dontRememberToken.attributes,\n    },\n    accountData: {\n      name: accountData.name,\n      attributes: accountData.attributes,\n    },\n  }\n}\n\nexport async function setCookieCache(\n  ctx: AthenaCookieContextRuntime,\n  session: AthenaSessionPair,\n  dontRememberMe: boolean,\n): Promise<void> {\n  const cookieCacheConfig = ctx.context.options?.session?.cookieCache\n  if (!cookieCacheConfig?.enabled) {\n    return\n  }\n\n  const version = await resolveCookieVersion(\n    cookieCacheConfig.version,\n    session.session as Record<string, unknown>,\n    session.user as Record<string, unknown>,\n  )\n\n  const sessionData = {\n    session: session.session,\n    user: session.user,\n    updatedAt: Date.now(),\n    version,\n  }\n\n  const baseAttributes = ctx.context.authCookies.sessionData.attributes\n  const maxAge = dontRememberMe ? undefined : baseAttributes.maxAge\n  const options: AthenaCookieOptions = {\n    ...baseAttributes,\n    maxAge,\n  }\n  const expiresAt = Date.now() + ((options.maxAge || 60) * 1000)\n  const strategy = cookieCacheConfig.strategy || 'compact'\n  const secret = getSecretOrThrow(ctx.context.secret)\n\n  let encoded: string\n  if (strategy === 'jwt') {\n    encoded = await signJwtHS256(sessionData, secret, options.maxAge || DEFAULT_CACHE_MAX_AGE)\n  } else if (strategy === 'jwe') {\n    throw createError('`jwe` strategy is not supported by the SDK cookie helper.')\n  } else {\n    const signature = await signHmacBase64Url(\n      secret,\n      JSON.stringify({\n        ...sessionData,\n        expiresAt,\n      }),\n    )\n    encoded = encodeStringToBase64Url(\n      JSON.stringify({\n        session: sessionData,\n        expiresAt,\n        signature,\n      }),\n    )\n  }\n\n  if (encoded.length > 4093) {\n    const store = createSessionStore(ctx.context.authCookies.sessionData.name, options, ctx)\n    const cookies = store.chunk(encoded, options)\n    store.setCookies(cookies)\n  } else {\n    const store = createSessionStore(ctx.context.authCookies.sessionData.name, options, ctx)\n    if (store.hasChunks()) {\n      store.setCookies(store.clean())\n    }\n    ctx.setCookie(ctx.context.authCookies.sessionData.name, encoded, options)\n  }\n}\n\nexport async function setSessionCookie(\n  ctx: AthenaCookieContextRuntime,\n  session: AthenaSessionPair,\n  dontRememberMe?: boolean,\n  overrides?: Partial<AthenaCookieOptions>,\n): Promise<void> {\n  if (dontRememberMe === undefined && typeof ctx.getSignedCookie === 'function' && ctx.context.secret) {\n    const existingFlag = await ctx.getSignedCookie(ctx.context.authCookies.dontRememberToken.name, ctx.context.secret)\n    dontRememberMe = !!existingFlag\n  }\n\n  const resolvedDontRememberMe = dontRememberMe ?? false\n  const token = getSessionTokenFromPair(session)\n  const options = ctx.context.authCookies.sessionToken.attributes\n  const maxAge = resolvedDontRememberMe ? undefined : ctx.context.sessionConfig?.expiresIn\n  await setCookieValue(ctx, ctx.context.authCookies.sessionToken.name, token, {\n    ...options,\n    maxAge,\n    ...overrides,\n  })\n\n  if (resolvedDontRememberMe) {\n    await setCookieValue(\n      ctx,\n      ctx.context.authCookies.dontRememberToken.name,\n      'true',\n      ctx.context.authCookies.dontRememberToken.attributes,\n    )\n  }\n\n  await setCookieCache(ctx, session, resolvedDontRememberMe)\n  ctx.context.setNewSession?.(session)\n}\n\n/**\n * Expires a cookie by setting `maxAge: 0` while preserving attributes.\n */\nexport function expireCookie(ctx: AthenaCookieContextRuntime, cookie: AthenaAuthCookie): void {\n  ctx.setCookie(cookie.name, '', {\n    ...cookie.attributes,\n    maxAge: 0,\n  })\n}\n\nexport function deleteSessionCookie(ctx: AthenaCookieContextRuntime, skipDontRememberMe?: boolean): void {\n  expireCookie(ctx, ctx.context.authCookies.sessionToken)\n  expireCookie(ctx, ctx.context.authCookies.sessionData)\n\n  if (ctx.context.options?.account?.storeAccountCookie) {\n    expireCookie(ctx, ctx.context.authCookies.accountData)\n    const accountStore = createAccountStore(\n      ctx.context.authCookies.accountData.name,\n      ctx.context.authCookies.accountData.attributes,\n      ctx,\n    )\n    accountStore.setCookies(accountStore.clean())\n  }\n\n  const sessionStore = createSessionStore(\n    ctx.context.authCookies.sessionData.name,\n    ctx.context.authCookies.sessionData.attributes,\n    ctx,\n  )\n  sessionStore.setCookies(sessionStore.clean())\n\n  if (!skipDontRememberMe) {\n    expireCookie(ctx, ctx.context.authCookies.dontRememberToken)\n  }\n}\n\nexport const getSessionCookie = (\n  request: Request | Headers,\n  config?:\n    | {\n        cookiePrefix?: string\n        cookieName?: string\n        path?: string\n      }\n    | undefined,\n): string | null => {\n  const cookies = (request instanceof Headers || !('headers' in request) ? request : request.headers).get('cookie')\n  if (!cookies) {\n    return null\n  }\n\n  const { cookieName = 'session_token', cookiePrefix = 'athena-auth' } = config || {}\n  const parsedCookie = parseCookies(cookies)\n  const getCookie = (name: string): string | undefined =>\n    parsedCookie.get(name) || parsedCookie.get(`${SECURE_COOKIE_PREFIX}${name}`)\n  const candidateCookieNames = Array.from(new Set([\n    cookieName,\n    cookieName.replace(/_/g, '-'),\n    cookieName.replace(/-/g, '_'),\n  ])).filter(Boolean)\n  for (const candidateName of candidateCookieNames) {\n    const sessionToken =\n      getCookie(`${cookiePrefix}.${candidateName}`) || getCookie(`${cookiePrefix}-${candidateName}`)\n    if (sessionToken) {\n      return sessionToken\n    }\n  }\n  return null\n}\n\nexport const getCookieCache = async <\n  SessionShape extends Record<string, unknown> = Record<string, unknown>,\n  UserShape extends Record<string, unknown> = Record<string, unknown>,\n>(\n  request: Request | Headers,\n  config?: AthenaGetCookieCacheConfig<SessionShape, UserShape>,\n): Promise<{\n  session: SessionShape\n  user: UserShape\n  updatedAt: number\n  version?: string\n} | null> => {\n  const headers = request instanceof Headers || !('headers' in request) ? request : request.headers\n  const cookieHeader = headers.get('cookie')\n  if (!cookieHeader) {\n    return null\n  }\n\n  const parsedCookie = parseCookies(cookieHeader)\n  const cookieName = config?.cookieName || 'session_data'\n  const requestedPrefix = config?.cookiePrefix || DEFAULT_COOKIE_PREFIX\n  const strategy = config?.strategy || 'compact'\n  const cookiePrefixes = resolveCookiePrefixes(requestedPrefix)\n  const isSecure = getIsSecureCookie(config)\n  const secret = getSecretOrThrow(config?.secret)\n\n  let sessionData: string | undefined\n\n  for (const prefix of cookiePrefixes) {\n    const candidate = getSessionCookieCacheName(prefix, cookieName, isSecure)\n    const cookieValue = parsedCookie.get(candidate)\n    if (cookieValue) {\n      sessionData = cookieValue\n      break\n    }\n  }\n\n  if (!sessionData) {\n    const reconstructedChunks: Array<{ index: number; value: string }> = []\n    for (const prefix of cookiePrefixes) {\n      const candidate = getSessionCookieCacheName(prefix, cookieName, isSecure)\n      for (const [name, value] of parsedCookie.entries()) {\n        if (!name.startsWith(`${candidate}.`)) {\n          continue\n        }\n        const parts = name.split('.')\n        const indexStr = parts[parts.length - 1]\n        const index = parseInt(indexStr || '0', 10)\n        if (!Number.isNaN(index)) {\n          reconstructedChunks.push({ index, value })\n        }\n      }\n      if (reconstructedChunks.length > 0) {\n        break\n      }\n    }\n\n    if (reconstructedChunks.length > 0) {\n      reconstructedChunks.sort((left, right) => left.index - right.index)\n      sessionData = reconstructedChunks.map((chunk) => chunk.value).join('')\n    }\n  }\n\n  if (!sessionData) {\n    return null\n  }\n\n  if (strategy === 'jwe') {\n    throw createError(\n      '`jwe` strategy is not supported by the SDK cookie helper. Use compact/jwt or pass cookie data through the auth server.',\n    )\n  }\n\n  if (strategy === 'jwt') {\n    const payload = await verifyJwtHS256<Record<string, unknown>>(sessionData, secret)\n    if (!payload) {\n      return null\n    }\n    const sessionRecord = asObject(payload.session)\n    const userRecord = asObject(payload.user)\n    const updatedAt = payload.updatedAt\n    if (!sessionRecord || !userRecord || typeof updatedAt !== 'number') {\n      return null\n    }\n\n    if (config?.version) {\n      const cookieVersion = typeof payload.version === 'string' ? payload.version : '1'\n      const expectedVersion =\n        typeof config.version === 'string'\n          ? config.version\n          : await config.version(sessionRecord as SessionShape, userRecord as UserShape)\n      if (cookieVersion !== expectedVersion) {\n        return null\n      }\n    }\n\n    return {\n      session: sessionRecord as SessionShape,\n      user: userRecord as UserShape,\n      updatedAt,\n      version: typeof payload.version === 'string' ? payload.version : undefined,\n    }\n  }\n\n  const compactPayload = parseJsonSafely<{\n    session: {\n      session: SessionShape\n      user: UserShape\n      updatedAt: number\n      version?: string\n    }\n    expiresAt: number\n    signature: string\n  }>(decodeBase64UrlToString(sessionData))\n\n  if (!compactPayload) {\n    return null\n  }\n\n  const expectedSignature = await signHmacBase64Url(\n    secret,\n    JSON.stringify({\n      ...compactPayload.session,\n      expiresAt: compactPayload.expiresAt,\n    }),\n  )\n\n  if (expectedSignature !== compactPayload.signature) {\n    return null\n  }\n\n  if (compactPayload.expiresAt <= Date.now()) {\n    return null\n  }\n\n  const resolvedSession = compactPayload.session\n  if (config?.version) {\n    const cookieVersion = resolvedSession.version || '1'\n    const expectedVersion =\n      typeof config.version === 'string'\n        ? config.version\n        : await config.version(resolvedSession.session, resolvedSession.user)\n    if (cookieVersion !== expectedVersion) {\n      return null\n    }\n  }\n\n  const sessionObject = asObject(resolvedSession.session)\n  const userObject = asObject(resolvedSession.user)\n  if (!sessionObject || !userObject) {\n    return null\n  }\n\n  return {\n    session: sessionObject as SessionShape,\n    user: userObject as UserShape,\n    updatedAt: resolvedSession.updatedAt,\n    version: resolvedSession.version,\n  }\n}\n\nexport {\n  SESSION_COOKIE_PATTERNS,\n  hasAuthSessionCookie,\n} from './session-cookie-detection.ts'\n\nexport {\n  HOST_COOKIE_PREFIX,\n  SECURE_COOKIE_PREFIX,\n  createSessionStore,\n  getAccountCookie,\n  getChunkedCookie,\n  parseCookies,\n  parseSetCookieHeader,\n  setCookieToHeader,\n  setRequestCookie,\n  splitSetCookieHeader,\n  stripSecureCookiePrefix,\n  toCookieOptions,\n}\n\nexport type {\n  AthenaAuthCookie,\n  AthenaAuthCookies,\n  AthenaCookieContextRuntime,\n  AthenaCookieOptions,\n  AthenaCookiesOptions,\n  AthenaGetCookieCacheConfig,\n}\n","import { getSessionCookie } from '../cookies/index.ts'\nimport type { BackendOption } from '../gateway/types.ts'\n\nexport type AthenaRequestHeaderProfile = 'gateway' | 'auth' | 'chat' | 'storage' | 'minimal'\n\nconst NO_CACHE_HEADER_VALUE = 'no-cache'\n\nconst API_KEY_HEADER_CANDIDATES = ['X-Athena-Key', 'x-athena-key', 'X-Api-Key', 'x-api-key', 'apikey'] as const\nconst ATHENA_KEY_HEADER_CANDIDATES = ['X-Athena-Key', 'x-athena-key'] as const\nconst SESSION_TOKEN_HEADER_CANDIDATES = ['X-Athena-Auth-Session-Token'] as const\nconst BEARER_MIRROR_HEADER_CANDIDATES = ['X-Athena-Auth-Bearer-Token'] as const\nconst CLIENT_HEADER_CANDIDATES = ['X-Athena-Client', 'x-athena-client'] as const\nconst PG_URI_HEADER_CANDIDATES = ['x-pg-uri'] as const\nconst JDBC_URI_HEADER_CANDIDATES = ['x-athena-jdbc-url', 'x-jdbc-url'] as const\n\ninterface AthenaRequestHeaderProfileRules {\n  apiKeys: boolean\n  routing: boolean\n  authMirror: boolean\n  authBearer: boolean\n  contentType?: boolean\n  accept?: boolean\n  stripNullsDefault?: boolean\n}\n\nconst PROFILE_RULES: Record<AthenaRequestHeaderProfile, AthenaRequestHeaderProfileRules> = {\n  gateway: { apiKeys: true, routing: true, authMirror: true, authBearer: false, contentType: true, stripNullsDefault: true },\n  chat: { apiKeys: true, routing: true, authMirror: true, authBearer: true, accept: true },\n  storage: { apiKeys: true, routing: true, authMirror: true, authBearer: false, contentType: true },\n  auth: { apiKeys: true, routing: true, authMirror: false, authBearer: true, contentType: true },\n  minimal: { apiKeys: false, routing: false, authMirror: false, authBearer: false },\n}\n\nexport interface BuildAthenaRequestHeadersInput {\n  profile: AthenaRequestHeaderProfile\n  sdkHeaderValue: string\n  apiKey?: string | null\n  client?: string | null\n  userId?: string | null\n  organizationId?: string | null\n  backend?: BackendOption\n  publishEvent?: string | null\n  stripNulls?: boolean\n  bearerToken?: string | null\n  cookie?: string | null\n  sessionToken?: string | null\n  pgUri?: string | null\n  jdbcUrl?: string | null\n  forceNoCache?: boolean\n  configHeaders?: Record<string, string>\n  callHeaders?: Record<string, string>\n  contentType?: string | null\n  accept?: string | null\n}\n\n/** Shared config/call fields consumed by gateway, chat, auth, and `client.request(...)`. */\nexport interface AthenaRequestHeaderOverrideFields {\n  apiKey?: string | null\n  client?: string | null\n  userId?: string | null\n  organizationId?: string | null\n  backend?: BackendOption\n  publishEvent?: string | null\n  stripNulls?: boolean\n  bearerToken?: string | null\n  cookie?: string | null\n  sessionToken?: string | null\n  pgUri?: string | null\n  jdbcUrl?: string | null\n  forceNoCache?: boolean\n  headers?: Record<string, string>\n}\n\nexport type ResolvedRequestHeaderOverrides = Omit<\n  BuildAthenaRequestHeadersInput,\n  'profile' | 'sdkHeaderValue' | 'contentType' | 'accept'\n>\n\nfunction normalizeHeaderValue(value?: string | null): string | undefined {\n  return value ? value : undefined\n}\n\nfunction mergeExtraHeaders(\n  configHeaders?: Record<string, string>,\n  callHeaders?: Record<string, string>,\n): Record<string, string> {\n  return { ...(configHeaders ?? {}), ...(callHeaders ?? {}) }\n}\n\nexport function hasHeaderIgnoreCase(\n  headers: Record<string, string>,\n  targetKey: string,\n): boolean {\n  const normalizedTargetKey = targetKey.toLowerCase()\n  return Object.keys(headers).some(key => key.toLowerCase() === normalizedTargetKey)\n}\n\nexport function resolveHeaderValue(\n  headers: Record<string, string>,\n  candidates: readonly string[],\n): string | undefined {\n  for (const candidate of candidates) {\n    const direct = normalizeHeaderValue(headers[candidate])\n    if (direct) return direct\n  }\n\n  const loweredCandidates = new Set(candidates.map(candidate => candidate.toLowerCase()))\n  for (const [key, value] of Object.entries(headers)) {\n    if (!loweredCandidates.has(key.toLowerCase())) {\n      continue\n    }\n    const normalized = normalizeHeaderValue(value)\n    if (normalized) return normalized\n  }\n\n  return undefined\n}\n\nfunction isCacheControlHeaderName(name: string): boolean {\n  return name.toLowerCase() === 'cache-control'\n}\n\nfunction normalizeBearerToken(value: string): string {\n  const trimmed = value.trim()\n  const match = trimmed.match(/^Bearer\\s+(.+)$/i)\n  return match?.[1]?.trim() ?? trimmed\n}\n\nfunction resolveBearerTokenFromAuthorizationHeader(\n  headers: Record<string, string>,\n): string | undefined {\n  const authorization = resolveHeaderValue(headers, ['Authorization'])\n  if (!authorization) {\n    return undefined\n  }\n\n  const token = normalizeBearerToken(authorization)\n  return token ? token : undefined\n}\n\nfunction resolveSessionTokenFromCookieHeader(\n  headers: Record<string, string>,\n): string | undefined {\n  const cookie = resolveHeaderValue(headers, ['Cookie'])\n  if (!cookie) {\n    return undefined\n  }\n\n  return getSessionCookie(new Headers({ cookie })) ?? undefined\n}\n\nfunction resolveBackendType(backend?: BackendOption): string | undefined {\n  if (!backend) {\n    return undefined\n  }\n  return typeof backend === 'string' ? backend : backend.type\n}\n\nexport function resolveRequestHeaderOverrides(\n  config: AthenaRequestHeaderOverrideFields,\n  options?: AthenaRequestHeaderOverrideFields,\n  defaults?: Pick<AthenaRequestHeaderOverrideFields, 'client' | 'stripNulls'>,\n): ResolvedRequestHeaderOverrides {\n  return {\n    apiKey: options?.apiKey ?? config.apiKey,\n    client: options?.client ?? config.client ?? defaults?.client,\n    userId: options?.userId ?? config.userId,\n    organizationId: options?.organizationId ?? config.organizationId,\n    backend: options?.backend ?? config.backend,\n    publishEvent: options?.publishEvent ?? config.publishEvent,\n    stripNulls: options?.stripNulls ?? config.stripNulls ?? defaults?.stripNulls,\n    bearerToken: options?.bearerToken ?? config.bearerToken,\n    cookie: options?.cookie ?? config.cookie,\n    sessionToken: options?.sessionToken ?? config.sessionToken,\n    pgUri: options?.pgUri ?? config.pgUri,\n    jdbcUrl: options?.jdbcUrl ?? config.jdbcUrl,\n    forceNoCache: Boolean(config.forceNoCache || options?.forceNoCache),\n    configHeaders: config.headers,\n    callHeaders: options?.headers,\n  }\n}\n\nexport function buildServiceRequestHeaders(\n  profile: Exclude<AthenaRequestHeaderProfile, 'minimal'>,\n  sdkHeaderValue: string,\n  config: AthenaRequestHeaderOverrideFields,\n  options?: AthenaRequestHeaderOverrideFields,\n  extras?: Pick<BuildAthenaRequestHeadersInput, 'contentType' | 'accept'> & {\n    client?: string | null\n    stripNulls?: boolean\n  },\n): Record<string, string> {\n  const rules = PROFILE_RULES[profile]\n  return buildAthenaRequestHeaders({\n    profile,\n    sdkHeaderValue,\n    ...resolveRequestHeaderOverrides(config, options, {\n      client: extras?.client ?? undefined,\n      stripNulls: extras?.stripNulls ?? (rules.stripNullsDefault ? true : undefined),\n    }),\n    contentType: extras?.contentType ?? (rules.contentType ? 'application/json' : undefined),\n    accept: extras?.accept ?? (rules.accept ? 'application/json' : undefined),\n  })\n}\n\nexport function applyAthenaApiKeyHeaders(\n  headers: Record<string, string>,\n  apiKey?: string | null,\n): void {\n  const resolvedApiKey = normalizeHeaderValue(apiKey)\n  if (resolvedApiKey && !hasHeaderIgnoreCase(headers, 'X-Athena-Key')) {\n    headers['X-Athena-Key'] = resolvedApiKey\n  }\n}\n\nexport function applyAthenaAuthContextHeaders(\n  headers: Record<string, string>,\n  input: Pick<\n    BuildAthenaRequestHeadersInput,\n    'bearerToken' | 'cookie' | 'sessionToken' | 'profile' | 'configHeaders' | 'callHeaders'\n  >,\n): void {\n  const mergedExtraHeaders = mergeExtraHeaders(input.configHeaders, input.callHeaders)\n  const rules = PROFILE_RULES[input.profile]\n  const explicitCookie = normalizeHeaderValue(input.cookie)\n  if (explicitCookie) {\n    mergedExtraHeaders.Cookie = explicitCookie\n  }\n\n  const explicitSessionToken =\n    normalizeHeaderValue(input.sessionToken) ??\n    resolveHeaderValue(mergedExtraHeaders, SESSION_TOKEN_HEADER_CANDIDATES)\n  const derivedSessionToken =\n    explicitSessionToken ?? resolveSessionTokenFromCookieHeader(mergedExtraHeaders)\n  const cookieFromHeaders = resolveHeaderValue(mergedExtraHeaders, ['Cookie'])\n\n  if (explicitCookie && !hasHeaderIgnoreCase(headers, 'Cookie')) {\n    headers.Cookie = explicitCookie\n  } else if (cookieFromHeaders && !hasHeaderIgnoreCase(headers, 'Cookie')) {\n    headers.Cookie = cookieFromHeaders\n  }\n\n  const explicitBearerToken = (() => {\n    const configured = normalizeHeaderValue(input.bearerToken)\n    if (configured) {\n      return normalizeBearerToken(configured)\n    }\n    const mirrored = resolveHeaderValue(mergedExtraHeaders, BEARER_MIRROR_HEADER_CANDIDATES)\n    return mirrored ? normalizeBearerToken(mirrored) : undefined\n  })()\n  const derivedBearerToken =\n    explicitBearerToken ?? resolveBearerTokenFromAuthorizationHeader(mergedExtraHeaders)\n\n  if (rules.authBearer && derivedBearerToken && !hasHeaderIgnoreCase(headers, 'Authorization')) {\n    headers.Authorization = `Bearer ${derivedBearerToken}`\n  }\n\n  if (rules.authMirror) {\n    if (derivedSessionToken && !hasHeaderIgnoreCase(headers, 'X-Athena-Auth-Session-Token')) {\n      headers['X-Athena-Auth-Session-Token'] = derivedSessionToken\n    }\n    if (derivedBearerToken && !hasHeaderIgnoreCase(headers, 'X-Athena-Auth-Bearer-Token')) {\n      headers['X-Athena-Auth-Bearer-Token'] = derivedBearerToken\n    }\n  } else if (derivedSessionToken && !hasHeaderIgnoreCase(headers, 'X-Athena-Auth-Session-Token')) {\n    headers['X-Athena-Auth-Session-Token'] = derivedSessionToken\n  }\n}\n\nexport function applyAthenaPgUriHeaders(\n  headers: Record<string, string>,\n  input: Pick<BuildAthenaRequestHeadersInput, 'pgUri' | 'jdbcUrl' | 'configHeaders' | 'callHeaders'>,\n): void {\n  const mergedExtraHeaders = mergeExtraHeaders(input.configHeaders, input.callHeaders)\n\n  const pgUri =\n    normalizeHeaderValue(input.pgUri) ??\n    resolveHeaderValue(mergedExtraHeaders, PG_URI_HEADER_CANDIDATES)\n  if (pgUri && !hasHeaderIgnoreCase(headers, 'x-pg-uri')) {\n    headers['x-pg-uri'] = pgUri\n  }\n\n  const jdbcUrl =\n    normalizeHeaderValue(input.jdbcUrl) ??\n    resolveHeaderValue(mergedExtraHeaders, JDBC_URI_HEADER_CANDIDATES)\n  if (jdbcUrl) {\n    if (!hasHeaderIgnoreCase(headers, 'x-athena-jdbc-url')) {\n      headers['x-athena-jdbc-url'] = jdbcUrl\n    }\n    if (!hasHeaderIgnoreCase(headers, 'x-jdbc-url')) {\n      headers['x-jdbc-url'] = jdbcUrl\n    }\n  }\n}\n\n/**\n * Minimal gateway/data request headers used by many apps before they adopt\n * the full {@link buildAthenaRequestHeaders} profile model.\n *\n * Additive convenience — does not replace client-built headers. Prefer\n * `createClient({ client, key })` so the SDK sets these on every call.\n */\nexport function buildAthenaGatewayHeaders(input: {\n  clientName?: string | null\n  gatewayKey?: string | null\n  headers?: Record<string, string | null | undefined>\n}): Record<string, string> {\n  const trimmedClientName = input.clientName?.trim()\n  const trimmedGatewayKey = input.gatewayKey?.trim()\n  const merged: Record<string, string | null | undefined> = {\n    ...(trimmedClientName\n      ? {\n          'X-Athena-Client': trimmedClientName,\n        }\n      : {}),\n    ...(trimmedGatewayKey\n      ? {\n          'X-Api-Key': trimmedGatewayKey,\n          'X-Athena-Key': trimmedGatewayKey,\n        }\n      : {}),\n    ...input.headers,\n  }\n\n  return Object.fromEntries(\n    Object.entries(merged).flatMap(([key, value]) =>\n      typeof value === 'string' && value.trim()\n        ? ([[key, value.trim()]] as const)\n        : [],\n    ),\n  )\n}\n\nexport function buildAthenaRequestHeaders(\n  input: BuildAthenaRequestHeadersInput,\n): Record<string, string> {\n  const forceNoCache = Boolean(input.forceNoCache)\n  const mergedExtraHeaders = mergeExtraHeaders(input.configHeaders, input.callHeaders)\n  const rules = PROFILE_RULES[input.profile]\n\n  const headerClient = resolveHeaderValue(mergedExtraHeaders, CLIENT_HEADER_CANDIDATES)\n  const finalClient = normalizeHeaderValue(input.client) ?? headerClient\n  const finalApiKey =\n    normalizeHeaderValue(input.apiKey) ??\n    resolveHeaderValue(mergedExtraHeaders, API_KEY_HEADER_CANDIDATES)\n  const finalAthenaKey =\n    resolveHeaderValue(mergedExtraHeaders, ATHENA_KEY_HEADER_CANDIDATES) ?? finalApiKey\n\n  const headers: Record<string, string> = {\n    'X-Athena-Sdk': input.sdkHeaderValue,\n  }\n\n  if (rules.contentType) {\n    headers['Content-Type'] = input.contentType ?? 'application/json'\n  }\n\n  if (input.accept ?? rules.accept) {\n    headers.Accept = input.accept ?? 'application/json'\n  }\n\n  if (rules.routing) {\n    if (normalizeHeaderValue(input.userId)) {\n      headers['X-User-Id'] = input.userId ?? ''\n    }\n    if (normalizeHeaderValue(input.organizationId)) {\n      headers['X-Organization-Id'] = input.organizationId ?? ''\n    }\n    if (finalClient) {\n      headers['X-Athena-Client'] = finalClient\n    }\n\n    const backendType = resolveBackendType(input.backend)\n    if (backendType) {\n      headers['X-Backend-Type'] = backendType\n    }\n\n    if (typeof input.stripNulls === 'boolean') {\n      headers['X-Strip-Nulls'] = input.stripNulls ? 'true' : 'false'\n    } else if (rules.stripNullsDefault) {\n      headers['X-Strip-Nulls'] = 'true'\n    }\n\n    if (normalizeHeaderValue(input.publishEvent)) {\n      headers['X-Publish-Event'] = input.publishEvent ?? ''\n    }\n  }\n\n  if (rules.apiKeys && (finalApiKey || finalAthenaKey)) {\n    applyAthenaApiKeyHeaders(headers, finalAthenaKey)\n  }\n\n  applyAthenaAuthContextHeaders(headers, input)\n  applyAthenaPgUriHeaders(headers, input)\n\n  const reservedClientHeaderKeys = new Set(CLIENT_HEADER_CANDIDATES.map(key => key.toLowerCase()))\n  Object.entries(mergedExtraHeaders).forEach(([key, value]) => {\n    if (reservedClientHeaderKeys.has(key.toLowerCase())) {\n      return\n    }\n    if (forceNoCache && isCacheControlHeaderName(key)) {\n      return\n    }\n    const normalized = normalizeHeaderValue(value)\n    if (normalized) {\n      headers[key] = normalized\n    }\n  })\n\n  if (forceNoCache) {\n    headers['Cache-Control'] = NO_CACHE_HEADER_VALUE\n  }\n\n  return headers\n}\n","import type { BackendConfig } from './gateway/types.ts'\nimport { normalizeAthenaGatewayBaseUrl } from './gateway/url.ts'\nimport { buildSdkHeaderValue } from './sdk-version.ts'\nimport {\n  buildAthenaRequestHeaders,\n  hasHeaderIgnoreCase,\n} from './utils/athena-request-headers.ts'\n\nconst SDK_NAME = 'xylex-group/athena'\n\nexport type AthenaRequestService = 'db' | 'auth' | 'chat' | 'storage'\nexport type AthenaRequestMethod =\n  | 'GET'\n  | 'POST'\n  | 'PUT'\n  | 'PATCH'\n  | 'DELETE'\n  | 'HEAD'\n  | 'OPTIONS'\n\nexport interface AthenaRequestQueryValueMap {\n  [key: string]:\n    | string\n    | number\n    | boolean\n    | null\n    | undefined\n    | Array<string | number | boolean | null | undefined>\n}\n\nexport interface AthenaRequestOptions {\n  service?: AthenaRequestService\n  url?: string\n  path?: string\n  method?: AthenaRequestMethod\n  headers?: Record<string, string>\n  /** Per-request override for the canonical `X-Athena-Key` header. */\n  apiKey?: string | null\n  query?: AthenaRequestQueryValueMap\n  body?: RequestInit['body'] | Record<string, unknown> | unknown[] | null\n  signal?: AbortSignal\n  credentials?: RequestInit['credentials']\n  responseType?: 'json' | 'text' | 'response'\n}\n\nexport interface AthenaRequestResponse<T = unknown> {\n  ok: boolean\n  status: number\n  statusText: string\n  headers: Headers\n  data: T | string | null\n  raw: Response\n}\n\nexport interface AthenaRawRequestConfig {\n  baseUrl?: string\n  authUrl?: string\n  chatUrl?: string\n  storageUrl?: string\n  apiKey?: string\n  client?: string | null\n  backend?: BackendConfig\n  pgUri?: string | null\n  jdbcUrl?: string | null\n  headers?: Record<string, string>\n}\n\nexport interface AthenaRawRequestContext {\n  userId?: string | null\n  organizationId?: string | null\n  headers?: Record<string, string>\n  cookie?: string | null\n  bearerToken?: string | null\n  sessionToken?: string | null\n  forceNoCache?: boolean\n}\n\nfunction parseArbitraryResponseBody(rawText: string, contentType: string | null): unknown {\n  if (!rawText) {\n    return null\n  }\n  if (contentType?.toLowerCase().includes('application/json')) {\n    try {\n      return JSON.parse(rawText)\n    } catch {\n      return rawText\n    }\n  }\n  const trimmed = rawText.trim()\n  if ((trimmed.startsWith('{') && trimmed.endsWith('}')) || (trimmed.startsWith('[') && trimmed.endsWith(']'))) {\n    try {\n      return JSON.parse(trimmed)\n    } catch {\n      return rawText\n    }\n  }\n  return rawText\n}\n\nfunction toRequestQueryString(query?: AthenaRequestQueryValueMap): string {\n  if (!query) return ''\n  const params = new URLSearchParams()\n  for (const [key, rawValue] of Object.entries(query)) {\n    const values = Array.isArray(rawValue) ? rawValue : [rawValue]\n    for (const value of values) {\n      if (value === undefined) continue\n      params.append(key, value === null ? '' : String(value))\n    }\n  }\n  const serialized = params.toString()\n  return serialized ? `?${serialized}` : ''\n}\n\nfunction isJsonBody(body: AthenaRequestOptions['body']): boolean {\n  return (\n    body !== undefined &&\n    body !== null &&\n    !(body instanceof FormData) &&\n    !(body instanceof Blob) &&\n    !(body instanceof URLSearchParams) &&\n    !(body instanceof ArrayBuffer) &&\n    !ArrayBuffer.isView(body) &&\n    typeof body !== 'string'\n  )\n}\n\nexport function createAthenaRequest(\n  config: AthenaRawRequestConfig,\n  resolveContext: () =>\n    | AthenaRawRequestContext\n    | undefined\n    | Promise<AthenaRawRequestContext | undefined>,\n): <T = unknown>(options: AthenaRequestOptions) => Promise<AthenaRequestResponse<T>> {\n  return async <T = unknown>(options: AthenaRequestOptions): Promise<AthenaRequestResponse<T>> => {\n    const context = await resolveContext()\n    const method = options.method ?? 'GET'\n    const responseType = options.responseType ?? 'json'\n    const service = options.service ?? 'db'\n    const absoluteUrl = options.url?.trim()\n    const baseUrlByService: Record<AthenaRequestService, string | undefined> = {\n      db: config.baseUrl,\n      auth: config.authUrl,\n      chat: config.chatUrl,\n      storage: config.storageUrl,\n    }\n\n    const queryString = toRequestQueryString(options.query)\n    let targetUrl: string\n    if (absoluteUrl) {\n      // Absolute URLs bypass gateway base-url normalization so query/hash are preserved\n      // and auth-only / storage-only clients can still call arbitrary endpoints.\n      try {\n        const parsed = new URL(absoluteUrl)\n        if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n          throw new Error('not http(s)')\n        }\n      } catch {\n        throw new Error(\n          `client.request(...) url must be an absolute http(s) URL. Received ${JSON.stringify(options.url)}.`,\n        )\n      }\n      targetUrl = `${absoluteUrl}${queryString}`\n    } else {\n      const resolvedBaseUrl = baseUrlByService[service]\n      if (!resolvedBaseUrl) {\n        throw new Error(\n          `Athena ${service} base URL is not configured. Pass createClient({ url }) for unified routing or set the service-specific URL first.`,\n        )\n      }\n\n      const normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(resolvedBaseUrl, {\n        label: `Athena ${service} base URL`,\n      })\n      const path = options.path?.trim()\n      if (!path) {\n        throw new Error('client.request(...) requires either an absolute url or a non-empty path.')\n      }\n      const normalizedPath = path.startsWith('/') ? path : `/${path}`\n      targetUrl = `${normalizedBaseUrl}${normalizedPath}${queryString}`\n    }\n\n    const requestProfile =\n      service === 'auth'\n        ? 'auth'\n        : service === 'chat'\n          ? 'chat'\n          : service === 'storage'\n            ? 'storage'\n            : 'gateway'\n    const headers = buildAthenaRequestHeaders({\n      profile: requestProfile,\n      sdkHeaderValue: buildSdkHeaderValue(SDK_NAME),\n      apiKey: options.apiKey ?? config.apiKey,\n      client: config.client,\n      userId: context?.userId,\n      organizationId: context?.organizationId,\n      backend: config.backend,\n      pgUri: config.pgUri,\n      jdbcUrl: config.jdbcUrl,\n      bearerToken: context?.bearerToken,\n      cookie: context?.cookie,\n      sessionToken: context?.sessionToken,\n      forceNoCache: context?.forceNoCache,\n      configHeaders: {\n        ...(config.headers ?? {}),\n        ...(context?.headers ?? {}),\n      },\n      callHeaders: options.headers,\n      accept: service === 'chat' ? 'application/json' : undefined,\n      contentType:\n        service === 'auth' || service === 'db' || service === 'storage'\n          ? 'application/json'\n          : undefined,\n      stripNulls: service === 'db' ? true : undefined,\n    })\n\n    const shouldSendJsonBody = isJsonBody(options.body)\n    if (shouldSendJsonBody && !hasHeaderIgnoreCase(headers, 'Content-Type')) {\n      headers['Content-Type'] = 'application/json'\n    }\n\n    const response = await fetch(targetUrl, {\n      method,\n      headers,\n      body:\n        options.body === undefined || options.body === null\n          ? undefined\n          : shouldSendJsonBody\n            ? JSON.stringify(options.body)\n            : (options.body as RequestInit['body']),\n      signal: options.signal,\n      credentials: options.credentials,\n    })\n\n    if (responseType === 'response') {\n      return {\n        ok: response.ok,\n        status: response.status,\n        statusText: response.statusText,\n        headers: response.headers,\n        data: null,\n        raw: response,\n      }\n    }\n\n    const rawText = await response.text()\n    const parsed =\n      responseType === 'text'\n        ? rawText\n        : parseArbitraryResponseBody(rawText, response.headers.get('content-type'))\n\n    return {\n      ok: response.ok,\n      status: response.status,\n      statusText: response.statusText,\n      headers: response.headers,\n      data: parsed as T | string | null,\n      raw: response,\n    }\n  }\n}\n\n","import type {\n  AthenaGatewayBaseOptions,\n  AthenaGatewayCallOptions,\n  AthenaGatewayConnectionOptions,\n  AthenaGatewayConnectionResult,\n  AthenaGatewayEndpointPath,\n  AthenaGatewayErrorDetails,\n  AthenaGatewayMethod,\n  AthenaRpcCallOptions,\n  AthenaRpcPayload,\n  AthenaGatewayResponse,\n} from \"./types.js\";\nimport type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaInsertPayload,\n  AthenaRpcFilter,\n  AthenaUpdatePayload,\n  AthenaQueryPayload,\n} from \"./types.js\";\nimport { AthenaGatewayError } from \"./errors.ts\";\nimport {\n  ATHENA_DEFAULT_BASE_URL,\n  buildAthenaGatewayUrl,\n  normalizeAthenaGatewayBaseUrl,\n} from \"./url.ts\";\nimport { buildServiceRequestHeaders } from \"../utils/athena-request-headers.ts\";\nimport { buildSdkHeaderValue } from \"../sdk-version.ts\";\n\nconst DEFAULT_CLIENT = \"DEFAULT_CLIENT\";\nconst SDK_NAME = \"xylex-group/athena\";\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME);\nfunction parseResponseBody(rawText: string, contentType: string | null) {\n  if (!rawText) {\n    return { parsed: null as unknown, parseFailed: false };\n  }\n\n  const contentTypeSuggestsJson =\n    contentType?.toLowerCase().includes(\"application/json\") ?? false;\n  const looksJson =\n    contentTypeSuggestsJson || rawText.startsWith(\"{\") || rawText.startsWith(\"[\");\n\n  if (!looksJson) {\n    return { parsed: rawText as unknown, parseFailed: false };\n  }\n\n  try {\n    return { parsed: JSON.parse(rawText) as unknown, parseFailed: false };\n  } catch {\n    return { parsed: rawText as unknown, parseFailed: true };\n  }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n  return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nfunction resolveStructuredErrorPayload(payload: unknown): Record<string, unknown> | null {\n  if (!isRecord(payload)) return null;\n  return isRecord(payload.error) ? payload.error : payload;\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n  return (\n    headers.get(\"x-request-id\") ??\n    headers.get(\"x-correlation-id\") ??\n    headers.get(\"x-athena-request-id\") ??\n    undefined\n  );\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\n  const structuredPayload = resolveStructuredErrorPayload(payload);\n  if (structuredPayload) {\n    const messageCandidates = [structuredPayload.message, structuredPayload.error, structuredPayload.details];\n    for (const candidate of messageCandidates) {\n      const resolved = nonEmptyString(candidate);\n      if (resolved) return resolved;\n    }\n  }\n\n  const rawMessage = nonEmptyString(payload);\n  if (rawMessage) return rawMessage;\n\n  return fallback;\n}\n\nfunction resolveErrorHint(payload: unknown): string | undefined {\n  const structuredPayload = resolveStructuredErrorPayload(payload);\n  return structuredPayload ? nonEmptyString(structuredPayload.hint) : undefined;\n}\n\nfunction resolveStatusText(response: Response, payload: unknown): string | null {\n  const rawStatusText = nonEmptyString(response.statusText);\n  if (rawStatusText) return rawStatusText;\n  const payloadRecord = isRecord(payload) ? payload : null;\n  return payloadRecord ? nonEmptyString(payloadRecord.statusText) ?? null : null;\n}\n\nfunction detailsFromError(error: AthenaGatewayError): AthenaGatewayErrorDetails {\n  return error.toDetails();\n}\n\ninterface AthenaFindManyAstPayload {\n  table_name: string;\n  select: Record<string, unknown>;\n  where?: Record<string, unknown>;\n  orderBy?: Record<string, unknown>;\n  limit?: number;\n}\n\nfunction toQueryScalar(value: unknown): string {\n  if (value === null || value === undefined) return \"null\";\n  if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n  if (typeof value === \"number\") return Number.isFinite(value) ? String(value) : \"null\";\n  return String(value);\n}\n\nfunction toQueryArray(values: unknown[]): string {\n  return `{${values.map(toQueryScalar).join(\",\")}}`;\n}\n\nfunction toRpcArgumentQueryValue(value: unknown): string {\n  if (Array.isArray(value)) return toQueryArray(value);\n  if (value && typeof value === \"object\") return JSON.stringify(value);\n  return toQueryScalar(value);\n}\n\nfunction toRpcFilterQueryValue(filter: AthenaRpcFilter): string {\n  const value = filter.value;\n  switch (filter.operator) {\n    case \"in\": {\n      if (!Array.isArray(value)) {\n        throw new AthenaGatewayError({\n          code: \"UNKNOWN_ERROR\",\n          message: `RPC filter \"${filter.column}\" with operator \"in\" requires an array value`,\n          status: 0,\n        });\n      }\n      return `in.${toQueryArray(value)}`;\n    }\n    case \"is\":\n      return `is.${toQueryScalar(value)}`;\n    case \"eq\":\n    case \"neq\":\n    case \"gt\":\n    case \"gte\":\n    case \"lt\":\n    case \"lte\":\n    case \"like\":\n    case \"ilike\":\n      return `${filter.operator}.${toQueryScalar(value)}`;\n  }\n}\n\nfunction buildRpcGetEndpoint(payload: AthenaRpcPayload): AthenaGatewayEndpointPath {\n  const functionName = (payload.function_name ?? payload.function).trim();\n  if (!functionName) {\n    throw new AthenaGatewayError({\n      code: \"UNKNOWN_ERROR\",\n      message: \"rpc requires a function name\",\n      status: 0,\n      endpoint: \"/gateway/rpc\",\n      method: \"GET\",\n    });\n  }\n\n  const query = new URLSearchParams();\n  if (payload.schema) query.set(\"schema\", payload.schema);\n  if (payload.select) query.set(\"select\", payload.select);\n  if (payload.count) query.set(\"count\", payload.count);\n  if (payload.head) query.set(\"head\", \"true\");\n  if (typeof payload.limit === \"number\") query.set(\"limit\", String(payload.limit));\n  if (typeof payload.offset === \"number\") query.set(\"offset\", String(payload.offset));\n  if (payload.order?.column) {\n    query.set(\n      \"order\",\n      payload.order.ascending === false\n        ? `${payload.order.column}.desc`\n        : payload.order.column,\n    );\n  }\n\n  if (payload.args) {\n    for (const [key, value] of Object.entries(payload.args)) {\n      query.set(key, toRpcArgumentQueryValue(value));\n    }\n  }\n\n  if (payload.filters?.length) {\n    for (const filter of payload.filters) {\n      if (payload.args && Object.prototype.hasOwnProperty.call(payload.args, filter.column)) {\n        throw new AthenaGatewayError({\n          code: \"UNKNOWN_ERROR\",\n          message: `RPC filter \"${filter.column}\" conflicts with RPC argument \"${filter.column}\" in GET mode`,\n          status: 0,\n        });\n      }\n      query.append(filter.column, toRpcFilterQueryValue(filter));\n    }\n  }\n\n  const endpoint = `/rpc/${encodeURIComponent(functionName)}`;\n  const queryText = query.toString();\n  const withQuery = queryText ? `${endpoint}?${queryText}` : endpoint;\n  return withQuery as AthenaGatewayEndpointPath;\n}\n\nfunction buildHeaders(\n  config: AthenaGatewayBaseOptions,\n  options?: AthenaGatewayCallOptions,\n): Record<string, string> {\n  return buildServiceRequestHeaders(\"gateway\", SDK_HEADER_VALUE, config, options, {\n    client: options?.client ?? config.client ?? DEFAULT_CLIENT,\n    stripNulls: options?.stripNulls ?? true,\n  });\n}\n\nfunction toInvalidUrlResponse<T>(\n  error: unknown,\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod,\n): AthenaGatewayResponse<T> {\n  const message = error instanceof Error ? error.message : String(error);\n  const gatewayError =\n    error instanceof AthenaGatewayError\n      ? error\n      : new AthenaGatewayError({\n          code: \"INVALID_URL\",\n          message,\n          status: 0,\n          endpoint,\n          method,\n          cause: message,\n          hint: \"Set ATHENA_URL to a full http(s) URL before running queries.\",\n        });\n\n  return {\n    ok: false,\n    status: 0,\n    statusText: null,\n    data: null,\n    error: gatewayError.message,\n    errorDetails: detailsFromError(\n      new AthenaGatewayError({\n        code: gatewayError.code,\n        message: gatewayError.message,\n        status: gatewayError.status,\n        endpoint,\n        method,\n        requestId: gatewayError.requestId,\n        hint: gatewayError.hint,\n        cause: gatewayError.causeDetail,\n      }),\n    ),\n    raw: null,\n  };\n}\n\nfunction resolveGatewayBaseUrl(input?: string | null) {\n  return normalizeAthenaGatewayBaseUrl(input, {\n    defaultBaseUrl: ATHENA_DEFAULT_BASE_URL,\n  });\n}\n\nfunction resolveProbePath(path?: string) {\n  if (!path) return \"/\";\n  if (!path.startsWith(\"/\")) {\n    throw new AthenaGatewayError({\n      code: \"INVALID_URL\",\n      message: `Athena gateway probe path must start with \"/\". Received ${JSON.stringify(path)}.`,\n      status: 0,\n      hint: 'Use a leading slash such as \"/\" or \"/health\".',\n    });\n  }\n  return path;\n}\n\nfunction mergeConnectionHeaders(\n  baseHeaders: Record<string, string>,\n  headers?: Record<string, string>,\n): Record<string, string> {\n  const merged = {\n    ...baseHeaders,\n    ...(headers ?? {}),\n  };\n\n  if (!merged[\"X-Athena-Sdk\"] && !merged[\"x-athena-sdk\"]) {\n    merged[\"X-Athena-Sdk\"] = SDK_HEADER_VALUE;\n  }\n\n  return merged;\n}\n\nasync function performConnectionCheck(\n  baseUrl: string,\n  requestHeaders: Record<string, string>,\n  options?: AthenaGatewayConnectionOptions,\n): Promise<AthenaGatewayConnectionResult> {\n  const path = resolveProbePath(options?.path);\n  const url = buildAthenaGatewayUrl(baseUrl, path);\n\n  try {\n    const response = await fetch(url, {\n      method: \"GET\",\n      headers: mergeConnectionHeaders(requestHeaders, options?.headers),\n      signal: options?.signal,\n    });\n    const rawText = await response.text();\n    const requestId = resolveRequestId(response.headers);\n    const parsedBody = parseResponseBody(\n      rawText ?? \"\",\n      response.headers.get(\"content-type\"),\n    );\n\n    if (parsedBody.parseFailed) {\n      const invalidJsonError = new AthenaGatewayError({\n        code: \"INVALID_JSON\",\n        message: \"Gateway probe returned malformed JSON\",\n        status: response.status,\n        method: \"GET\",\n        requestId,\n        hint: \"Verify the gateway response body is valid JSON.\",\n        cause: rawText.slice(0, 300),\n      });\n      return {\n        ok: false,\n        reachable: true,\n        status: response.status,\n        statusText: resolveStatusText(response, parsedBody.parsed),\n        baseUrl,\n        url,\n        error: invalidJsonError.message,\n        errorDetails: detailsFromError(invalidJsonError),\n        raw: parsedBody.parsed,\n      };\n    }\n\n    const parsed = parsedBody.parsed;\n    if (!response.ok) {\n      const httpError = new AthenaGatewayError({\n        code: \"HTTP_ERROR\",\n        message: resolveErrorMessage(\n          parsed,\n          `Athena gateway GET ${path} failed with status ${response.status}`,\n        ),\n        status: response.status,\n        method: \"GET\",\n        requestId,\n        hint: resolveErrorHint(parsed),\n      });\n\n      return {\n        ok: false,\n        reachable: true,\n        status: response.status,\n        statusText: resolveStatusText(response, parsed),\n        baseUrl,\n        url,\n        error: httpError.message,\n        errorDetails: detailsFromError(httpError),\n        raw: parsed,\n      };\n    }\n\n    return {\n      ok: true,\n      reachable: true,\n      status: response.status,\n      statusText: resolveStatusText(response, parsed),\n      baseUrl,\n      url,\n      error: undefined,\n      errorDetails: null,\n      raw: parsed,\n    };\n  } catch (callError) {\n    const message = callError instanceof Error ? callError.message : String(callError);\n    const networkError = new AthenaGatewayError({\n      code: \"NETWORK_ERROR\",\n      message: `Network error while probing Athena gateway ${url}: ${message}`,\n      method: \"GET\",\n      cause: message,\n      hint: \"Check gateway URL, DNS, and network reachability.\",\n    });\n    return {\n      ok: false,\n      reachable: false,\n      status: 0,\n      statusText: null,\n      baseUrl,\n      url,\n      error: networkError.message,\n      errorDetails: detailsFromError(networkError),\n      raw: null,\n    };\n  }\n}\n\nexport async function verifyAthenaGatewayUrl(\n  baseUrl: string,\n  options?: AthenaGatewayConnectionOptions,\n): Promise<AthenaGatewayConnectionResult> {\n  const normalizedBaseUrl = normalizeAthenaGatewayBaseUrl(baseUrl);\n  return performConnectionCheck(normalizedBaseUrl, { \"X-Athena-Sdk\": SDK_HEADER_VALUE }, options);\n}\n\nasync function callAthena<T>(\n  config: AthenaGatewayBaseOptions,\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod,\n  payload: unknown,\n  options?: AthenaGatewayCallOptions,\n): Promise<AthenaGatewayResponse<T>> {\n  let baseUrl: string;\n  try {\n    baseUrl = resolveGatewayBaseUrl(options?.baseUrl ?? config.baseUrl);\n  } catch (error) {\n    return toInvalidUrlResponse<T>(error, endpoint, method);\n  }\n\n  const url = buildAthenaGatewayUrl(baseUrl, endpoint);\n  const headers = buildHeaders(config, options);\n\n  try {\n    const requestInit: RequestInit = {\n      method,\n      headers,\n    };\n    if (method !== \"GET\") {\n      requestInit.body = JSON.stringify(payload);\n    }\n\n    const response = await fetch(url, requestInit);\n\n    const rawText = await response.text();\n    const requestId = resolveRequestId(response.headers);\n    const parsedBody = parseResponseBody(\n      rawText ?? \"\",\n      response.headers.get(\"content-type\"),\n    );\n\n    if (parsedBody.parseFailed) {\n      const invalidJsonError = new AthenaGatewayError({\n        code: \"INVALID_JSON\",\n        message: \"Gateway returned malformed JSON\",\n        status: response.status,\n        endpoint,\n        method,\n        requestId,\n        hint: \"Verify the gateway response body is valid JSON.\",\n        cause: rawText.slice(0, 300),\n      });\n      return {\n        ok: false,\n        status: response.status,\n        statusText: resolveStatusText(response, parsedBody.parsed),\n        data: null,\n        error: invalidJsonError.message,\n        errorDetails: detailsFromError(invalidJsonError),\n        raw: parsedBody.parsed,\n      };\n    }\n\n    const parsed = parsedBody.parsed;\n    const parsedPayload = isRecord(parsed) ? parsed : null;\n\n    if (!response.ok) {\n      const httpError = new AthenaGatewayError({\n        code: \"HTTP_ERROR\",\n        message: resolveErrorMessage(\n          parsed,\n          `Athena gateway ${method} ${endpoint} failed with status ${response.status}`,\n        ),\n        status: response.status,\n        endpoint,\n        method,\n        requestId,\n        hint: resolveErrorHint(parsed),\n      });\n\n      return {\n        ok: false,\n        status: response.status,\n        statusText: resolveStatusText(response, parsed),\n        data: null,\n        error: httpError.message,\n        errorDetails: detailsFromError(httpError),\n        raw: parsed,\n      };\n    }\n\n    // Unwrap envelope: API may return { data: [...], error: null } (e.g. when cached)\n    // vs raw array when uncached. Use inner data when present to avoid double nesting.\n    const payloadData =\n      parsedPayload && \"data\" in parsedPayload\n        ? (parsedPayload.data as T)\n        : (parsed as T);\n    const payloadCount =\n      parsedPayload && \"count\" in parsedPayload\n        ? typeof parsedPayload.count === \"number\" || parsedPayload.count === null\n          ? (parsedPayload.count as number | null)\n          : undefined\n        : undefined;\n\n    return {\n      ok: true,\n      status: response.status,\n      statusText: resolveStatusText(response, parsed),\n      data: payloadData ?? null,\n      count: payloadCount,\n      error: undefined,\n      errorDetails: null,\n      raw: parsed,\n    };\n  } catch (callError) {\n    const message = callError instanceof Error ? callError.message : String(callError);\n    const networkError = new AthenaGatewayError({\n      code: \"NETWORK_ERROR\",\n      message: `Network error while calling ${method} ${endpoint}: ${message}`,\n      endpoint,\n      method,\n      cause: message,\n      hint: \"Check gateway URL, DNS, and network reachability.\",\n    });\n    return {\n      ok: false,\n      status: 0,\n      statusText: null,\n      data: null,\n      error: networkError.message,\n      errorDetails: detailsFromError(networkError),\n      raw: null,\n    };\n  }\n}\n\nexport interface AthenaGatewayClient {\n  baseUrl: string;\n  buildHeaders(options?: AthenaGatewayCallOptions): Record<string, string>;\n  resolveCallOptions(\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaGatewayCallOptions | undefined>;\n  verifyConnection(\n    options?: AthenaGatewayConnectionOptions,\n  ): Promise<AthenaGatewayConnectionResult>;\n  fetchGateway<T>(\n    payload: AthenaFetchPayload | AthenaFindManyAstPayload,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaGatewayResponse<T>>;\n  insertGateway<T>(\n    payload: AthenaInsertPayload,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaGatewayResponse<T>>;\n  updateGateway<T>(\n    payload: AthenaUpdatePayload,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaGatewayResponse<T>>;\n  deleteGateway<T>(\n    payload: AthenaDeletePayload,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaGatewayResponse<T>>;\n  rpcGateway<T>(\n    payload: AthenaRpcPayload,\n    options?: AthenaRpcCallOptions,\n  ): Promise<AthenaGatewayResponse<T>>;\n  queryGateway<T>(\n    payload: AthenaQueryPayload,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaGatewayResponse<T>>;\n}\n\nexport function createAthenaGatewayClient(\n  config: AthenaGatewayBaseOptions = {},\n): AthenaGatewayClient {\n  const normalizedBaseUrl = resolveGatewayBaseUrl(config.baseUrl);\n  const normalizedConfig: AthenaGatewayBaseOptions = {\n    ...config,\n    baseUrl: normalizedBaseUrl,\n  };\n\n  return {\n    baseUrl: normalizedBaseUrl,\n    buildHeaders(options) {\n      return buildHeaders(normalizedConfig, options);\n    },\n    async resolveCallOptions(options) {\n      return options;\n    },\n    verifyConnection(options) {\n      return performConnectionCheck(\n        normalizedBaseUrl,\n        buildHeaders(normalizedConfig),\n        options,\n      );\n    },\n    fetchGateway(payload, options) {\n      return callAthena(normalizedConfig, \"/gateway/fetch\", \"POST\", payload, options);\n    },\n    insertGateway(payload, options) {\n      return callAthena(normalizedConfig, \"/gateway/insert\", \"PUT\", payload, options);\n    },\n    updateGateway(payload, options) {\n      return callAthena(normalizedConfig, \"/gateway/update\", \"POST\", payload, options);\n    },\n    deleteGateway(payload, options) {\n      return callAthena(normalizedConfig, \"/gateway/delete\", \"DELETE\", payload, options);\n    },\n    rpcGateway(payload, options) {\n      if (options?.get) {\n        const endpoint = buildRpcGetEndpoint(payload);\n        return callAthena(normalizedConfig, endpoint, \"GET\", null, options);\n      }\n      return callAthena(normalizedConfig, \"/gateway/rpc\", \"POST\", payload, options);\n    },\n    queryGateway(payload, options) {\n      return callAthena(normalizedConfig, \"/gateway/query\", \"POST\", payload, options);\n    },\n  };\n}\n\ntype AthenaGatewayCallOptionsResolver = () =>\n  | AthenaGatewayCallOptions\n  | undefined\n  | Promise<AthenaGatewayCallOptions | undefined>;\n\nfunction mergeGatewayCallOptions(\n  base?: AthenaGatewayCallOptions,\n  override?: AthenaGatewayCallOptions,\n): AthenaGatewayCallOptions | undefined {\n  if (!base && !override) return undefined;\n  return {\n    ...base,\n    ...override,\n    headers:\n      base?.headers || override?.headers\n        ? { ...(base?.headers ?? {}), ...(override?.headers ?? {}) }\n        : undefined,\n  };\n}\n\n/**\n * Creates a request-context view over one immutable gateway transport.\n * The resolver runs once for every operation; the underlying transport and\n * normalized route configuration are never reconstructed.\n */\nexport function createAthenaGatewayClientView(\n  transport: AthenaGatewayClient,\n  resolveContext: AthenaGatewayCallOptionsResolver,\n): AthenaGatewayClient {\n  const resolveCallOptions = async (\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaGatewayCallOptions | undefined> =>\n    mergeGatewayCallOptions(await resolveContext(), options);\n\n  return {\n    baseUrl: transport.baseUrl,\n    buildHeaders(options) {\n      return transport.buildHeaders(options);\n    },\n    resolveCallOptions,\n    async verifyConnection(options) {\n      const context = await resolveCallOptions();\n      const contextHeaders = transport.buildHeaders(context);\n      return transport.verifyConnection({\n        ...options,\n        headers: {\n          ...contextHeaders,\n          ...(options?.headers ?? {}),\n        },\n      });\n    },\n    async fetchGateway(payload, options) {\n      return transport.fetchGateway(payload, await resolveCallOptions(options));\n    },\n    async insertGateway(payload, options) {\n      return transport.insertGateway(payload, await resolveCallOptions(options));\n    },\n    async updateGateway(payload, options) {\n      return transport.updateGateway(payload, await resolveCallOptions(options));\n    },\n    async deleteGateway(payload, options) {\n      return transport.deleteGateway(payload, await resolveCallOptions(options));\n    },\n    async rpcGateway(payload, options) {\n      return transport.rpcGateway(payload, await resolveCallOptions(options));\n    },\n    async queryGateway(payload, options) {\n      return transport.queryGateway(payload, await resolveCallOptions(options));\n    },\n  };\n}\n","export interface AthenaAuthAdminLimits {\n  maxAdminJsonBytes: number\n  maxAdminJsonDepth: number\n  maxTemplateVariables: number\n  maxTemplateVariableLength: number\n}\n\nexport const ATHENA_AUTH_MAX_ADMIN_JSON_BYTES = 32 * 1024\nexport const ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH = 8\nexport const ATHENA_AUTH_MAX_TEMPLATE_VARIABLES = 64\nexport const ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH = 128\n\nexport const ATHENA_AUTH_ADMIN_LIMITS = {\n  maxAdminJsonBytes: ATHENA_AUTH_MAX_ADMIN_JSON_BYTES,\n  maxAdminJsonDepth: ATHENA_AUTH_MAX_ADMIN_JSON_DEPTH,\n  maxTemplateVariables: ATHENA_AUTH_MAX_TEMPLATE_VARIABLES,\n  maxTemplateVariableLength: ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH,\n} as const satisfies AthenaAuthAdminLimits\n\nfunction describeTemplateVariableTarget(target?: string) {\n  const normalized = target?.trim()\n  return normalized && normalized.length > 0\n    ? normalized\n    : 'Athena auth admin email template variables'\n}\n\nexport function assertAthenaAuthTemplateVariables(\n  variables: unknown,\n  target?: string,\n): asserts variables is string[] {\n  const label = describeTemplateVariableTarget(target)\n  if (!Array.isArray(variables)) {\n    throw new Error(`${label} must be an array of strings.`)\n  }\n\n  if (variables.length > ATHENA_AUTH_MAX_TEMPLATE_VARIABLES) {\n    throw new Error(\n      `${label} cannot contain more than ${ATHENA_AUTH_MAX_TEMPLATE_VARIABLES} entries.`,\n    )\n  }\n\n  variables.forEach((variable, index) => {\n    if (typeof variable !== 'string') {\n      throw new Error(\n        `${label} must contain only strings. Received ${typeof variable} at index ${index}.`,\n      )\n    }\n\n    if (variable.length > ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH) {\n      throw new Error(\n        `${label} cannot contain entries longer than ${ATHENA_AUTH_MAX_TEMPLATE_VARIABLE_LENGTH} characters. Received ${variable.length} characters at index ${index}.`,\n      )\n    }\n  })\n}\n","import type {\n  AthenaAuthEmailTemplateBuilder,\n  AthenaAuthEmailTemplateCreateFromDefinitionInput,\n  AthenaAuthEmailTemplateDefinition,\n  AthenaAuthEmailTemplateUpdateFromDefinitionInput,\n  AthenaAuthLooseRecord,\n  AthenaAuthReactEmailComponent,\n  AthenaAuthReactEmailConfig,\n  AthenaAuthReactEmailEventPhase,\n  AthenaAuthReactEmailProps,\n  AthenaAuthReactEmailRenderEvent,\n  AthenaAuthReactEmailRenderInput,\n  AthenaAuthReactEmailRenderOptions,\n} from './types.ts'\n\ntype ReactEmailRenderModule = {\n  render: (element: unknown) => string | Promise<string>\n  toPlainText?: (html: string) => string | Promise<string>\n  pretty?: (html: string) => string | Promise<string>\n}\n\nexport interface AthenaAuthRenderedReactEmail {\n  html: string\n  text?: string\n}\n\nexport interface AthenaAuthReactEmailPayload {\n  react?: AthenaAuthReactEmailRenderInput\n}\n\nexport interface AthenaAuthReactEmailRuntimeOptions {\n  route?: string\n  defaults?: AthenaAuthReactEmailRenderOptions\n  observe?: (event: AthenaAuthReactEmailRenderEvent) => void\n}\n\ninterface ResolvePayloadFieldsInput {\n  htmlField: string\n  textField: string\n  variablesField?: string\n}\n\nlet reactEmailRenderModulePromise: Promise<ReactEmailRenderModule> | undefined\n\nfunction isRecord(value: unknown): value is AthenaAuthLooseRecord {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction isFunction(value: unknown): value is (...args: unknown[]) => unknown {\n  return typeof value === 'function'\n}\n\nfunction toStringOrUndefined(value: unknown): string | undefined {\n  if (typeof value !== 'string') return undefined\n  return value\n}\n\nfunction nowIsoString() {\n  return new Date().toISOString()\n}\n\nfunction emitReactEmailEvent(\n  observe: ((event: AthenaAuthReactEmailRenderEvent) => void) | undefined,\n  phase: AthenaAuthReactEmailEventPhase,\n  input: Omit<AthenaAuthReactEmailRenderEvent, 'phase' | 'timestamp'> = {},\n) {\n  if (!observe) return\n  try {\n    observe({\n      phase,\n      timestamp: nowIsoString(),\n      ...input,\n    })\n  } catch {\n    // Observability hooks are non-blocking.\n  }\n}\n\nfunction mergeRenderDefaults(\n  input: AthenaAuthReactEmailRenderInput,\n  defaults?: AthenaAuthReactEmailRenderOptions,\n): AthenaAuthReactEmailRenderInput {\n  return {\n    ...input,\n    pretty: input.pretty ?? defaults?.pretty,\n    includePlainText: input.includePlainText ?? defaults?.includePlainText,\n  }\n}\n\nfunction mergeRuntimeOptions(\n  options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig,\n): AthenaAuthReactEmailRuntimeOptions | undefined {\n  if (!options) return undefined\n  return {\n    defaults: options.defaults,\n    observe: options.observe,\n    route: 'route' in options ? options.route : undefined,\n  }\n}\n\nasync function resolveReactEmailRenderModule(): Promise<ReactEmailRenderModule> {\n  if (!reactEmailRenderModulePromise) {\n    reactEmailRenderModulePromise = (async () => {\n      try {\n        const loaded = await import('@react-email/render')\n        if (!isFunction(loaded.render)) {\n          throw new Error('missing render(...) export')\n        }\n        return {\n          render: loaded.render as ReactEmailRenderModule['render'],\n          toPlainText: isFunction(loaded.toPlainText)\n            ? (loaded.toPlainText as ReactEmailRenderModule['toPlainText'])\n            : undefined,\n          pretty: isFunction(loaded.pretty)\n            ? (loaded.pretty as ReactEmailRenderModule['pretty'])\n            : undefined,\n        }\n      } catch (error) {\n        const message = error instanceof Error ? error.message : String(error)\n        throw new Error(\n          `React Email rendering requires @react-email/render. Install it in your project (for example: pnpm add @react-email/render). Loader error: ${message}`,\n        )\n      }\n    })()\n  }\n\n  if (!reactEmailRenderModulePromise) {\n    throw new Error('React Email renderer module failed to initialize')\n  }\n\n  return reactEmailRenderModulePromise\n}\n\nasync function resolveReactEmailElement(input: AthenaAuthReactEmailRenderInput): Promise<unknown> {\n  if (input.element != null) {\n    return input.element\n  }\n  if (!input.component) {\n    throw new Error('react email payload requires either `element` or `component`')\n  }\n\n  try {\n    const reactModule = await import('react')\n    if (typeof reactModule.createElement !== 'function') {\n      throw new Error('react createElement(...) export is unavailable')\n    }\n    return reactModule.createElement(\n      input.component as Parameters<typeof reactModule.createElement>[0],\n      input.props ?? {},\n    )\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error)\n    throw new Error(\n      `React Email component rendering requires react runtime support. Install react in your project. Loader error: ${message}`,\n    )\n  }\n}\n\nexport function createAuthReactEmailInput<\n  TProps extends AthenaAuthReactEmailProps = AthenaAuthReactEmailProps,\n>(\n  component: AthenaAuthReactEmailComponent<TProps>,\n  props: TProps,\n  overrides: Omit<AthenaAuthReactEmailRenderInput, 'component' | 'props' | 'element'> = {},\n): AthenaAuthReactEmailRenderInput {\n  return {\n    ...overrides,\n    component: component as AthenaAuthReactEmailComponent,\n    props,\n  }\n}\n\nexport function defineAuthEmailTemplate<\n  TProps extends AthenaAuthReactEmailProps = AthenaAuthReactEmailProps,\n>(\n  definition: AthenaAuthEmailTemplateDefinition<TProps>,\n): AthenaAuthEmailTemplateBuilder<TProps> {\n  const react: AthenaAuthEmailTemplateBuilder<TProps>['react'] = (props, overrides) =>\n    createAuthReactEmailInput(definition.component, props, {\n      ...definition.defaults,\n      ...overrides,\n    })\n\n  return {\n    component: definition.component,\n    react,\n    toTemplateCreate: (input: AthenaAuthEmailTemplateCreateFromDefinitionInput<TProps>) => {\n      const templateKey = input.templateKey ?? definition.templateKey\n      const subjectTemplate = input.subjectTemplate ?? definition.subjectTemplate\n      if (!templateKey) {\n        throw new Error('defineAuthEmailTemplate.toTemplateCreate requires templateKey')\n      }\n      if (!subjectTemplate) {\n        throw new Error('defineAuthEmailTemplate.toTemplateCreate requires subjectTemplate')\n      }\n\n      const { props, react: reactOverrides, ...rest } = input\n      return {\n        ...rest,\n        templateKey,\n        subjectTemplate,\n        react: react(props, reactOverrides),\n      }\n    },\n    toTemplateUpdate: (input: AthenaAuthEmailTemplateUpdateFromDefinitionInput<TProps>) => {\n      const { props, react: reactOverrides, ...rest } = input\n      return {\n        ...rest,\n        react: react(props, reactOverrides),\n      }\n    },\n  }\n}\n\nexport async function renderAthenaReactEmail(\n  input: AthenaAuthReactEmailRenderInput,\n  options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig,\n): Promise<AthenaAuthRenderedReactEmail> {\n  if (!isRecord(input)) {\n    throw new Error('react email payload must be an object')\n  }\n\n  const runtimeOptions = mergeRuntimeOptions(options)\n  const start = Date.now()\n  emitReactEmailEvent(runtimeOptions?.observe, 'render:start', {\n    route: runtimeOptions?.route,\n    message: 'Rendering react email payload',\n  })\n\n  try {\n    const normalizedInput = mergeRenderDefaults(input, runtimeOptions?.defaults)\n    const element = await resolveReactEmailElement(normalizedInput)\n    const renderModule = await resolveReactEmailRenderModule()\n    const htmlValue = await renderModule.render(element)\n    const renderedHtml = typeof htmlValue === 'string' ? htmlValue : String(htmlValue ?? '')\n    if (!renderedHtml.trim()) {\n      throw new Error('react email renderer returned an empty HTML string')\n    }\n\n    let html = renderedHtml\n    if (normalizedInput.pretty && renderModule.pretty) {\n      const prettyValue = await renderModule.pretty(renderedHtml)\n      if (typeof prettyValue === 'string' && prettyValue.trim().length > 0) {\n        html = prettyValue\n      }\n    }\n\n    const explicitText = toStringOrUndefined(normalizedInput.text)\n    if (explicitText !== undefined) {\n      emitReactEmailEvent(runtimeOptions?.observe, 'render:success', {\n        route: runtimeOptions?.route,\n        durationMs: Date.now() - start,\n        message: 'Rendered react email with explicit text',\n      })\n      return {\n        html,\n        text: explicitText,\n      }\n    }\n\n    if (normalizedInput.includePlainText === false || !renderModule.toPlainText) {\n      emitReactEmailEvent(runtimeOptions?.observe, 'render:success', {\n        route: runtimeOptions?.route,\n        durationMs: Date.now() - start,\n        message: 'Rendered react email without plain-text derivation',\n      })\n      return { html }\n    }\n\n    const plainTextValue = await renderModule.toPlainText(html)\n    const plainText = toStringOrUndefined(plainTextValue)\n    emitReactEmailEvent(runtimeOptions?.observe, 'render:success', {\n      route: runtimeOptions?.route,\n      durationMs: Date.now() - start,\n      message: plainText ? 'Rendered react email with derived plain text' : 'Rendered react email HTML only',\n    })\n    if (plainText === undefined) {\n      return { html }\n    }\n\n    return {\n      html,\n      text: plainText,\n    }\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error)\n    emitReactEmailEvent(runtimeOptions?.observe, 'render:error', {\n      route: runtimeOptions?.route,\n      durationMs: Date.now() - start,\n      error: message,\n      message: 'Failed to render react email payload',\n    })\n    throw error\n  }\n}\n\nexport async function resolveReactEmailPayloadFields<\n  TInput extends AthenaAuthReactEmailPayload,\n>(\n  input: TInput,\n  fields: ResolvePayloadFieldsInput,\n  options?: AthenaAuthReactEmailRuntimeOptions | AthenaAuthReactEmailConfig,\n): Promise<Omit<TInput, 'react'>> {\n  const { react, ...payloadWithoutReact } = input\n  if (!react) {\n    return payloadWithoutReact as Omit<TInput, 'react'>\n  }\n\n  const rendered = await renderAthenaReactEmail(react, options)\n  const payload: AthenaAuthLooseRecord = {\n    ...(payloadWithoutReact as AthenaAuthLooseRecord),\n  }\n\n  payload[fields.htmlField] = rendered.html\n\n  const currentTextValue = payload[fields.textField]\n  if (\n    rendered.text !== undefined &&\n    (currentTextValue === undefined || currentTextValue === null || currentTextValue === '')\n  ) {\n    payload[fields.textField] = rendered.text\n  }\n\n  if (\n    fields.variablesField &&\n    (payload[fields.variablesField] === undefined || payload[fields.variablesField] === null) &&\n    isRecord(react.props)\n  ) {\n    const derivedVariables = Object.keys(react.props)\n    if (derivedVariables.length > 0) {\n      payload[fields.variablesField] = derivedVariables\n    }\n  }\n\n  return payload as Omit<TInput, 'react'>\n}\n","import type {\n  AthenaAdminHasPermissionRequest,\n  AthenaAdminRevokeUserSessionRequest,\n  AthenaAdminRevokeUserSessionsRequest,\n  AthenaAdminSuccessResponse,\n  AthenaAdminHasPermissionResponse,\n  AthenaApiKeyDeleteAllExpiredResponse,\n  AthenaAuthCallOptions,\n  AthenaAuthClientConfig,\n  AthenaAuthEndpointPath,\n  AthenaAuthErrorCode,\n  AthenaAuthErrorDetails,\n  AthenaAuthFetchCompatibleInput,\n  AthenaAuthGetUserResponse,\n  AthenaAuthGenericInput,\n  AthenaAuthGenericQueryInput,\n  AthenaAuthBindings,\n  AthenaAuthEmailListQuery,\n  AthenaAuthEmailListResponse,\n  AthenaAuthGuardResult,\n  AthenaAuthHealthResponse,\n  AthenaAuthOkResponse,\n  AthenaAuthLinkedAccount,\n  AthenaAuthOrganizationBindings,\n  AthenaAuthOrganization,\n  AthenaAuthOrganizationCheckSlugRequest,\n  AthenaAuthOrganizationCreateRequest,\n  AthenaAuthOrganizationDeleteRequest,\n  AthenaAuthOrganizationGetFullQuery,\n  AthenaAuthOrganizationGetInvitationQuery,\n  AthenaAuthOrganizationInvitation,\n  AthenaAuthOrganizationInvitationActionRequest,\n  AthenaAuthOrganizationInviteMemberRequest,\n  AthenaAuthOrganizationLeaveRequest,\n  AthenaAuthOrganizationListInvitationsQuery,\n  AthenaAuthOrganizationListMembersQuery,\n  AthenaAuthOrganizationListUserInvitationsQuery,\n  AthenaAuthOrganizationMember,\n  AthenaAuthOrganizationRemoveMemberRequest,\n  AthenaAuthOrganizationSetActiveRequest,\n  AthenaAuthOrganizationUpdateMemberRoleRequest,\n  AthenaAuthOrganizationUpdateRequest,\n  AthenaAuthMethod,\n  AthenaAuthQueryValue,\n  AthenaAuthRequestInput,\n  AthenaAuthReactEmailRenderInput,\n  AthenaAuthResult,\n  InternalAthenaAuthModule,\n  AthenaAuthSession,\n  AthenaAuthSessionResponse,\n  AthenaAuthSignInResponse,\n  AthenaAuthSignOutResponse,\n  AthenaAuthSocialRedirectResponse,\n  AthenaAuthStatusResponse,\n  AthenaAuthUser,\n  AthenaChangeEmailRequest,\n  AthenaChangePasswordRequest,\n  AthenaDeleteUserCallbackRequest,\n  AthenaDeleteUserRequest,\n  AthenaDeleteUserResponse,\n  AthenaEmailSignInRequest,\n  AthenaEmailSignUpRequest,\n  AthenaForgetPasswordRequest,\n  AthenaLinkSocialRequest,\n  AthenaOAuthAccountTokenRequest,\n  AthenaOAuthTokenBundle,\n  AthenaResetPasswordRequest,\n  AthenaSendVerificationEmailRequest,\n  AthenaSocialSignInRequest,\n  AthenaTwoFactorGenerateBackupCodesRequest,\n  AthenaTwoFactorGenerateBackupCodesResponse,\n  AthenaUnlinkAccountRequest,\n  AthenaUpdateUserRequest,\n  AthenaVerifyEmailRequest,\n  AthenaUsernameSignInRequest,\n} from './types.ts'\nimport { assertAthenaAuthTemplateVariables } from './limits.ts'\nimport { resolveReactEmailPayloadFields } from './react-email.ts'\nimport { buildSdkHeaderValue } from '../sdk-version.ts'\nimport { buildServiceRequestHeaders } from '../utils/athena-request-headers.ts'\n\nconst DEFAULT_AUTH_BASE_URL = 'http://localhost:3001/api/auth'\nconst SDK_NAME = 'xylex-group/athena-auth'\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME)\n\ntype AuthRequestContext = {\n  endpoint: AthenaAuthEndpointPath\n  method: AthenaAuthMethod\n}\n\nexport interface InternalAuthModuleRuntimeOptions {\n  resolveCallOptions?: () =>\n    | AthenaAuthCallOptions\n    | undefined\n    | Promise<AthenaAuthCallOptions | undefined>\n}\n\ntype InternalErrorInput = AuthRequestContext & {\n  code: AthenaAuthErrorCode\n  status: number\n  message: string\n  requestId?: string\n  hint?: string\n  cause?: string\n}\n\nfunction normalizeBaseUrl(baseUrl?: string): string {\n  return (baseUrl ?? DEFAULT_AUTH_BASE_URL).replace(/\\/$/, '')\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction parseResponseBody(rawText: string, contentType: string | null) {\n  if (!rawText) {\n    return { parsed: null as unknown, parseFailed: false }\n  }\n\n  const contentTypeSuggestsJson =\n    contentType?.toLowerCase().includes('application/json') ?? false\n  const looksJson =\n    contentTypeSuggestsJson || rawText.startsWith('{') || rawText.startsWith('[')\n\n  if (!looksJson) {\n    return { parsed: rawText as unknown, parseFailed: false }\n  }\n\n  try {\n    return { parsed: JSON.parse(rawText) as unknown, parseFailed: false }\n  } catch {\n    return { parsed: rawText as unknown, parseFailed: true }\n  }\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n  return (\n    headers.get('x-request-id') ??\n    headers.get('x-correlation-id') ??\n    headers.get('x-athena-request-id') ??\n    undefined\n  )\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string) {\n  if (isRecord(payload)) {\n    const messageCandidates = [payload.error, payload.message, payload.details]\n    for (const candidate of messageCandidates) {\n      if (typeof candidate === 'string' && candidate.trim().length > 0) {\n        return candidate.trim()\n      }\n    }\n  }\n\n  if (typeof payload === 'string' && payload.trim().length > 0) {\n    return payload.trim()\n  }\n\n  return fallback\n}\n\nfunction toErrorDetails(input: InternalErrorInput): AthenaAuthErrorDetails {\n  return {\n    code: input.code,\n    message: input.message,\n    status: input.status,\n    endpoint: input.endpoint,\n    method: input.method,\n    requestId: input.requestId,\n    hint: input.hint,\n    cause: input.cause,\n  }\n}\n\nfunction mergeCallOptions(\n  base?: AthenaAuthCallOptions,\n  override?: AthenaAuthCallOptions,\n): AthenaAuthCallOptions | undefined {\n  if (!base && !override) return undefined\n  return {\n    ...base,\n    ...override,\n    headers: {\n      ...(base?.headers ?? {}),\n      ...(override?.headers ?? {}),\n    },\n  }\n}\n\nfunction copyDefinedField(\n  target: Record<string, unknown>,\n  source: Record<string, unknown>,\n  targetKey: string,\n  sourceKey: string,\n): void {\n  if (!(sourceKey in source)) {\n    return\n  }\n  const value = source[sourceKey]\n  if (value !== undefined) {\n    target[targetKey] = value\n  }\n}\n\nfunction normalizeEmailTemplateAttachmentsValue(value: unknown): unknown {\n  if (typeof value === 'string' || value == null) {\n    return value\n  }\n\n  if (Array.isArray(value)) {\n    return value.map(item => normalizeEmailTemplateAttachmentsValue(item))\n  }\n\n  if (typeof value !== 'object') {\n    return value\n  }\n\n  const attachment = { ...(value as Record<string, unknown>) }\n  copyDefinedField(attachment, attachment, 'file_url', 'fileUrl')\n  delete attachment.fileUrl\n  return attachment\n}\n\nfunction normalizeAdminEmailTemplatePayload(payload: Record<string, unknown>): Record<string, unknown> {\n  const normalized = { ...payload }\n\n  copyDefinedField(normalized, payload, 'template_key', 'templateKey')\n  copyDefinedField(normalized, payload, 'event_type', 'eventType')\n  copyDefinedField(normalized, payload, 'subject_template', 'subjectTemplate')\n  copyDefinedField(normalized, payload, 'text_template', 'textTemplate')\n  copyDefinedField(normalized, payload, 'html_template', 'htmlTemplate')\n  copyDefinedField(normalized, payload, 'variable_bindings', 'variableBindings')\n  copyDefinedField(normalized, payload, 'attachment_failure_mode', 'attachmentFailureMode')\n  copyDefinedField(normalized, payload, 'is_active', 'isActive')\n\n  if (Object.hasOwn(payload, 'attachments')) {\n    normalized.attachments = normalizeEmailTemplateAttachmentsValue(payload.attachments)\n  }\n\n  delete normalized.templateKey\n  delete normalized.eventType\n  delete normalized.subjectTemplate\n  delete normalized.textTemplate\n  delete normalized.htmlTemplate\n  delete normalized.variableBindings\n  delete normalized.attachmentFailureMode\n  delete normalized.isActive\n\n  return normalized\n}\n\nfunction toReactEmailTemplateCompatibilityInput<TInput extends AthenaAuthFetchCompatibleInput & {\n  react?: AthenaAuthReactEmailRenderInput\n}>(input: TInput): TInput {\n  const payload = input as Record<string, unknown>\n  const compatibility = { ...payload }\n\n  copyDefinedField(compatibility, payload, 'templateKey', 'template_key')\n  copyDefinedField(compatibility, payload, 'eventType', 'event_type')\n  copyDefinedField(compatibility, payload, 'subjectTemplate', 'subject_template')\n  copyDefinedField(compatibility, payload, 'textTemplate', 'text_template')\n  copyDefinedField(compatibility, payload, 'htmlTemplate', 'html_template')\n  copyDefinedField(compatibility, payload, 'variableBindings', 'variable_bindings')\n  copyDefinedField(compatibility, payload, 'attachmentFailureMode', 'attachment_failure_mode')\n  copyDefinedField(compatibility, payload, 'isActive', 'is_active')\n\n  return compatibility as unknown as TInput\n}\n\nfunction normalizeAdminEmailTemplateSendPayload(payload: Record<string, unknown>): Record<string, unknown> {\n  const normalized = { ...payload }\n\n  copyDefinedField(normalized, payload, 'template_id', 'templateId')\n  copyDefinedField(normalized, payload, 'recipient_email', 'recipientEmail')\n  copyDefinedField(normalized, payload, 'render_variables', 'renderVariables')\n  copyDefinedField(normalized, payload, 'user_id', 'userId')\n  copyDefinedField(normalized, payload, 'organization_id', 'organizationId')\n  copyDefinedField(normalized, payload, 'session_token', 'sessionToken')\n  copyDefinedField(normalized, payload, 'attachment_failure_mode', 'attachmentFailureMode')\n\n  if (Object.hasOwn(payload, 'attachments')) {\n    normalized.attachments = normalizeEmailTemplateAttachmentsValue(payload.attachments)\n  }\n\n  delete normalized.templateId\n  delete normalized.recipientEmail\n  delete normalized.renderVariables\n  delete normalized.userId\n  delete normalized.organizationId\n  delete normalized.sessionToken\n  delete normalized.attachmentFailureMode\n\n  return normalized\n}\n\nfunction toSessionGuardFailure(\n  sessionResult: AthenaAuthResult<AthenaAuthSessionResponse>,\n): AthenaAuthGuardResult {\n  if (sessionResult.status === 401 || sessionResult.data == null) {\n    return {\n      ok: false,\n      reason: 'unauthorized',\n      status: 401,\n      error: sessionResult.error ?? 'Unauthorized',\n      sessionResult,\n    }\n  }\n\n  return {\n    ok: false,\n    reason: 'upstream_error',\n    status: sessionResult.status,\n    error: sessionResult.error ?? 'Failed to resolve current session',\n    sessionResult,\n  }\n}\n\nfunction toPermissionGuardFailure(\n  permissionResult: AthenaAuthResult<AthenaAdminHasPermissionResponse>,\n  sessionResult: AthenaAuthResult<AthenaAuthSessionResponse>,\n): AthenaAuthGuardResult {\n  if (permissionResult.status === 401) {\n    return {\n      ok: false,\n      reason: 'unauthorized',\n      status: 401,\n      error: permissionResult.error ?? 'Unauthorized',\n      sessionResult,\n      permissionResult,\n    }\n  }\n\n  if (permissionResult.status === 403) {\n    return {\n      ok: false,\n      reason: 'forbidden',\n      status: 403,\n      error: permissionResult.error ?? 'Forbidden',\n      sessionResult,\n      permissionResult,\n    }\n  }\n\n  return {\n    ok: false,\n    reason: 'upstream_error',\n    status: permissionResult.status,\n    error: permissionResult.error ?? 'Failed to resolve permission check',\n    sessionResult,\n    permissionResult,\n  }\n}\n\nfunction extractFetchOptions<T extends AthenaAuthFetchCompatibleInput | undefined>(input: T) {\n  if (!input) {\n    return {\n      payload: undefined,\n      fetchOptions: undefined,\n    }\n  }\n\n  const { fetchOptions, ...rest } = input\n  const hasPayloadKeys = Object.keys(rest).length > 0\n  return {\n    payload: hasPayloadKeys ? rest : undefined,\n    fetchOptions,\n  }\n}\n\nfunction buildHeaders(\n  config: AthenaAuthClientConfig,\n  options?: AthenaAuthCallOptions,\n): Record<string, string> {\n  return buildServiceRequestHeaders('auth', SDK_HEADER_VALUE, config, options)\n}\n\nfunction appendQueryParam(searchParams: URLSearchParams, key: string, value: AthenaAuthQueryValue) {\n  if (value === undefined || value === null) return\n  if (Array.isArray(value)) {\n    value.forEach(item => {\n      searchParams.append(key, String(item))\n    })\n    return\n  }\n  searchParams.append(key, String(value))\n}\n\nfunction buildRequestUrl(\n  baseUrl: string,\n  endpoint: AthenaAuthEndpointPath,\n  query?: Record<string, AthenaAuthQueryValue>,\n) {\n  const url = `${baseUrl}${endpoint}`\n  if (!query || Object.keys(query).length === 0) return url\n  const searchParams = new URLSearchParams()\n  Object.entries(query).forEach(([key, value]) => appendQueryParam(searchParams, key, value))\n  const queryText = searchParams.toString()\n  return queryText ? `${url}?${queryText}` : url\n}\n\nfunction inferDefaultMethod(endpoint: AthenaAuthEndpointPath): AthenaAuthMethod {\n  if (endpoint.startsWith('/reset-password/')) {\n    return 'GET'\n  }\n\n  switch (endpoint) {\n    case '/get-session':\n    case '/list-sessions':\n    case '/verify-email':\n    case '/change-email/verify':\n    case '/delete-user/verify':\n    case '/email-list':\n    case '/email/list':\n    case '/delete-user/callback':\n    case '/list-accounts':\n    case '/passkey/generate-register-options':\n    case '/passkey/list-user-passkeys':\n    case '/.well-known/webauthn':\n    case '/admin/list-users':\n    case '/admin/athena-client/list':\n    case '/admin/audit-log/list':\n    case '/admin/email/get':\n    case '/admin/email-failure/list':\n    case '/admin/email-failure/get':\n    case '/admin/email-template/get':\n    case '/admin/email-template/list':\n    case '/admin/email/list':\n    case '/api-key/get':\n    case '/api-key/list':\n    case '/organization/get-full-organization':\n    case '/organization/list':\n    case '/organization/get-invitation':\n    case '/organization/list-invitations':\n    case '/organization/list-user-invitations':\n    case '/organization/list-members':\n    case '/organization/get-active-member':\n    case '/health':\n    case '/ok':\n    case '/error':\n      return 'GET'\n    default:\n      return 'POST'\n  }\n}\n\nasync function callAuthEndpoint<T>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  body?: unknown,\n  query?: Record<string, AthenaAuthQueryValue>,\n  options?: AthenaAuthCallOptions,\n): Promise<AthenaAuthResult<T>> {\n  const baseUrl = normalizeBaseUrl(options?.baseUrl ?? config.baseUrl)\n  const url = buildRequestUrl(baseUrl, context.endpoint, query)\n  const headers = buildHeaders(config, options)\n  const credentials = options?.credentials ?? config.credentials ?? 'include'\n  const requestInit: RequestInit = {\n    method: context.method,\n    headers,\n    credentials,\n    signal: options?.signal,\n  }\n\n  if (context.method !== 'GET') {\n    requestInit.body = JSON.stringify(body ?? {})\n  }\n\n  const fetcher = config.fetch ?? globalThis.fetch\n  if (!fetcher) {\n    const details = toErrorDetails({\n      code: 'UNKNOWN_ERROR',\n      message: 'No fetch implementation available for auth client',\n      status: 0,\n      endpoint: context.endpoint,\n      method: context.method,\n      hint: 'Use Node 18+ or provide `fetch` through createClient({ auth: { fetch } })',\n    })\n    return {\n      ok: false,\n      status: 0,\n      data: null,\n      error: details.message,\n      errorDetails: details,\n      raw: null,\n    }\n  }\n\n  try {\n    const response = await fetcher(url, requestInit)\n    const rawText = await response.text()\n    const requestId = resolveRequestId(response.headers)\n    const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\n\n    if (parsedBody.parseFailed) {\n      const details = toErrorDetails({\n        code: 'INVALID_JSON',\n        message: 'Auth server returned malformed JSON',\n        status: response.status,\n        endpoint: context.endpoint,\n        method: context.method,\n        requestId,\n        hint: 'Verify the auth endpoint response body is valid JSON.',\n        cause: rawText.slice(0, 300),\n      })\n      return {\n        ok: false,\n        status: response.status,\n        data: null,\n        error: details.message,\n        errorDetails: details,\n        raw: parsedBody.parsed,\n      }\n    }\n\n    const parsed = parsedBody.parsed\n\n    if (!response.ok) {\n      const details = toErrorDetails({\n        code: 'HTTP_ERROR',\n        message: resolveErrorMessage(\n          parsed,\n          `Auth endpoint ${context.method} ${context.endpoint} failed with status ${response.status}`,\n        ),\n        status: response.status,\n        endpoint: context.endpoint,\n        method: context.method,\n        requestId,\n      })\n      return {\n        ok: false,\n        status: response.status,\n        data: null,\n        error: details.message,\n        errorDetails: details,\n        raw: parsed,\n      }\n    }\n\n    return {\n      ok: true,\n      status: response.status,\n      data: (parsed as T) ?? null,\n      error: null,\n      errorDetails: null,\n      raw: parsed,\n    }\n  } catch (callError) {\n    const message = callError instanceof Error ? callError.message : String(callError)\n    const details = toErrorDetails({\n      code: 'NETWORK_ERROR',\n      message: `Network error while calling ${context.method} ${context.endpoint}: ${message}`,\n      status: 0,\n      endpoint: context.endpoint,\n      method: context.method,\n      cause: message,\n      hint: 'Check auth server URL, DNS, and network reachability.',\n    })\n    return {\n      ok: false,\n      status: 0,\n      data: null,\n      error: details.message,\n      errorDetails: details,\n      raw: null,\n    }\n  }\n}\n\nfunction executePostWithCompatibleInput<TPayload extends AthenaAuthFetchCompatibleInput, TResult>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  input: TPayload,\n  options?: AthenaAuthCallOptions,\n) {\n  const { payload, fetchOptions } = extractFetchOptions(input)\n  const mergedOptions = mergeCallOptions(fetchOptions, options)\n  return callAuthEndpoint<TResult>(config, context, payload ?? {}, undefined, mergedOptions)\n}\n\nfunction executePostWithOptionalInput<TResult>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  input?: AthenaAuthFetchCompatibleInput,\n  options?: AthenaAuthCallOptions,\n) {\n  const { fetchOptions } = extractFetchOptions(input)\n  const mergedOptions = mergeCallOptions(fetchOptions, options)\n  return callAuthEndpoint<TResult>(config, context, {}, undefined, mergedOptions)\n}\n\nfunction executeGetWithCompatibleInput<TResult>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  input?: AthenaAuthFetchCompatibleInput,\n  options?: AthenaAuthCallOptions,\n) {\n  const { fetchOptions } = extractFetchOptions(input)\n  const mergedOptions = mergeCallOptions(fetchOptions, options)\n  return callAuthEndpoint<TResult>(config, context, undefined, undefined, mergedOptions)\n}\n\nfunction executeGetWithQueryCompatibleInput<\n  TQuery extends object,\n  TResult,\n>(\n  config: AthenaAuthClientConfig,\n  context: AuthRequestContext,\n  input?: { query?: TQuery } & AthenaAuthFetchCompatibleInput,\n  options?: AthenaAuthCallOptions,\n) {\n  const { payload, fetchOptions } = extractFetchOptions(input)\n  const mergedOptions = mergeCallOptions(fetchOptions, options)\n  const query = (payload as { query?: Record<string, AthenaAuthQueryValue> } | undefined)?.query\n  return callAuthEndpoint<TResult>(\n    config,\n    context,\n    undefined,\n    query,\n    mergedOptions,\n  )\n}\n\n/**\n * Internal auth-module assembly used by the root client factory.\n */\nexport function createAuthModule(\n  config: AthenaAuthClientConfig = {},\n  runtimeOptions: InternalAuthModuleRuntimeOptions = {},\n): InternalAthenaAuthModule {\n  const normalizedBaseUrl = normalizeBaseUrl(config.baseUrl)\n  const resolvedConfig: AthenaAuthClientConfig = {\n    ...config,\n    baseUrl: normalizedBaseUrl,\n  }\n\n  const request = async <T = unknown>(\n    input: AthenaAuthRequestInput,\n    options?: AthenaAuthCallOptions,\n  ): Promise<AthenaAuthResult<T>> => {\n    const method = input.method ?? (input.body !== undefined ? 'POST' : inferDefaultMethod(input.endpoint))\n    const contextOptions = await runtimeOptions.resolveCallOptions?.()\n    const mergedOptions = mergeCallOptions(\n      mergeCallOptions(contextOptions, input.fetchOptions),\n      options,\n    )\n    return await callAuthEndpoint<T>(\n      resolvedConfig,\n      { endpoint: input.endpoint, method },\n      input.body,\n      input.query,\n      mergedOptions,\n    )\n  }\n\n  const postGeneric = <T = unknown>(\n    endpoint: AthenaAuthEndpointPath,\n    input?: (AthenaAuthFetchCompatibleInput & object),\n    options?: AthenaAuthCallOptions,\n  ) => {\n    const { payload, fetchOptions } = extractFetchOptions(input)\n    return request<T>(\n      {\n        endpoint,\n        method: 'POST',\n        body: payload ?? {},\n        fetchOptions,\n      },\n      options,\n    )\n  }\n\n  const getGeneric = <T = unknown>(\n    endpoint: AthenaAuthEndpointPath,\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions,\n  ) => {\n    const { fetchOptions } = extractFetchOptions(input)\n    return request<T>(\n      {\n        endpoint,\n        method: 'GET',\n        fetchOptions,\n      },\n      options,\n    )\n  }\n\n  const getWithQuery = <\n    T = unknown,\n    TQuery extends object = Record<string, AthenaAuthQueryValue>,\n  >(\n    endpoint: AthenaAuthEndpointPath,\n    input?: AthenaAuthFetchCompatibleInput & {\n      query?: TQuery\n    },\n    options?: AthenaAuthCallOptions,\n  ) => {\n    const { payload, fetchOptions } = extractFetchOptions(input)\n    const query = (payload as { query?: TQuery } | undefined)?.query as\n      | Record<string, AthenaAuthQueryValue>\n      | undefined\n    return request<T>(\n      {\n        endpoint,\n        method: 'GET',\n        query,\n        fetchOptions,\n      },\n      options,\n    )\n  }\n\n  const withReactEmailRoute = (route: AthenaAuthEndpointPath) => ({\n    ...resolvedConfig.reactEmail,\n    route,\n  })\n\n  const resolveAdminEmailPayload = <TInput extends AthenaAuthFetchCompatibleInput & {\n    react?: AthenaAuthReactEmailRenderInput\n  }>(\n    route: '/admin/email/create' | '/admin/email/update',\n    input: TInput,\n  ) =>\n    resolveReactEmailPayloadFields(input, {\n      htmlField: 'htmlBody',\n      textField: 'textBody',\n    }, withReactEmailRoute(route))\n\n  const resolveAdminEmailTemplatePayload = <TInput extends AthenaAuthFetchCompatibleInput & {\n    react?: AthenaAuthReactEmailRenderInput\n  }>(\n    route: '/admin/email-template/create' | '/admin/email-template/update',\n    input: TInput,\n  ) =>\n    resolveReactEmailPayloadFields(toReactEmailTemplateCompatibilityInput(input), {\n      htmlField: 'htmlTemplate',\n      textField: 'textTemplate',\n      variablesField: 'variables',\n    }, withReactEmailRoute(route)).then(payload => {\n      const normalizedPayload = normalizeAdminEmailTemplatePayload(payload as Record<string, unknown>)\n      if ('variables' in payload && payload.variables !== undefined && payload.variables !== null) {\n        assertAthenaAuthTemplateVariables(\n          payload.variables,\n          `${route} variables`,\n        )\n      }\n      return normalizedPayload\n    })\n\n  const requireSession: AthenaAuthBindings['requireSession'] = async (input, options) => {\n    const sessionInput = input?.fetchOptions\n      ? { fetchOptions: input.fetchOptions }\n      : undefined\n    const sessionResult = await getGeneric<AthenaAuthSessionResponse>(\n      '/get-session',\n      sessionInput,\n      options,\n    )\n\n    if (!sessionResult.ok || sessionResult.data == null) {\n      return toSessionGuardFailure(sessionResult)\n    }\n\n    return {\n      ok: true,\n      session: sessionResult.data,\n    }\n  }\n\n  const getUser: AthenaAuthBindings['getUser'] = async (input, options) => {\n    const sessionResult = await getGeneric<AthenaAuthSessionResponse>(\n      '/get-session',\n      input,\n      options,\n    )\n\n    if (!sessionResult.ok) {\n      return {\n        ...sessionResult,\n        data: null,\n      }\n    }\n\n    return {\n      ...sessionResult,\n      data: {\n        user: sessionResult.data?.user ?? null,\n      } satisfies AthenaAuthGetUserResponse,\n    }\n  }\n\n  const requirePermission = async (\n    endpoint: '/admin/has-permission' | '/organization/has-permission',\n    input: AthenaAdminHasPermissionRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions,\n  ): Promise<AthenaAuthGuardResult> => {\n    const sessionGuard = await requireSession(\n      input?.fetchOptions ? { fetchOptions: input.fetchOptions } : undefined,\n      options,\n    )\n\n    if (!sessionGuard.ok) {\n      return sessionGuard\n    }\n\n    const permissionResult = await postGeneric<AthenaAdminHasPermissionResponse>(\n      endpoint,\n      input,\n      options,\n    )\n\n    if (!permissionResult.ok) {\n      return toPermissionGuardFailure(permissionResult, {\n        ok: true,\n        status: 200,\n        data: sessionGuard.session,\n        error: null,\n        errorDetails: null,\n        raw: sessionGuard.session,\n      })\n    }\n\n    if (!permissionResult.data?.success) {\n      return {\n        ok: false,\n        reason: 'forbidden',\n        status: 403,\n        error: permissionResult.data?.error ?? 'Forbidden',\n        sessionResult: {\n          ok: true,\n          status: 200,\n          data: sessionGuard.session,\n          error: null,\n          errorDetails: null,\n          raw: sessionGuard.session,\n        },\n        permissionResult,\n      }\n    }\n\n    return sessionGuard\n  }\n\n  const listUserEmailsWithFallback: AthenaAuthBindings['user']['email']['list'] = async (input, options) => {\n    const primary = await getWithQuery<AthenaAuthEmailListResponse, AthenaAuthEmailListQuery>(\n      '/email/list',\n      input,\n      options,\n    )\n    if (primary.ok || primary.status !== 404 || primary.errorDetails?.code !== 'HTTP_ERROR') {\n      return primary\n    }\n    return getWithQuery<AthenaAuthEmailListResponse, AthenaAuthEmailListQuery>(\n      '/email-list',\n      input,\n      options,\n    )\n  }\n\n  const healthWithFallback: AthenaAuthBindings['health'] = async (input, options) => {\n    const primary = await getGeneric<AthenaAuthHealthResponse>('/health', input, options)\n    if (primary.ok || primary.status !== 404 || primary.errorDetails?.code !== 'HTTP_ERROR') {\n      return primary\n    }\n\n    const fallback = await getGeneric<AthenaAuthOkResponse>('/ok', input, options)\n    if (!fallback.ok) {\n      return {\n        ...fallback,\n        data: null,\n      }\n    }\n\n    const fallbackStatus =\n      isRecord(fallback.data) && typeof fallback.data.ok === 'boolean'\n        ? (fallback.data.ok ? 'ok' : 'error')\n        : 'ok'\n\n    return {\n      ...fallback,\n      data: {\n        status: fallbackStatus,\n      },\n    }\n  }\n\n  const signOut = (\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions,\n  ) =>\n    executePostWithOptionalInput<AthenaAuthSignOutResponse>(\n      resolvedConfig,\n      { endpoint: '/sign-out', method: 'POST' },\n      input,\n      options,\n    )\n\n  const revokeSessions = (\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions,\n  ) =>\n    executePostWithOptionalInput<AthenaAuthStatusResponse>(\n      resolvedConfig,\n      { endpoint: '/revoke-sessions', method: 'POST' },\n      input,\n      options,\n    )\n\n  const revokeOtherSessions = (\n    input?: AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions,\n  ) =>\n    executePostWithOptionalInput<AthenaAuthStatusResponse>(\n      resolvedConfig,\n      { endpoint: '/revoke-other-sessions', method: 'POST' },\n      input,\n      options,\n    )\n\n  const revokeSession = (\n    input: { token: string } & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions,\n  ) =>\n    executePostWithCompatibleInput<typeof input, AthenaAuthStatusResponse>(\n      resolvedConfig,\n      { endpoint: '/revoke-session', method: 'POST' },\n      input,\n      options,\n    )\n\n  const deleteUser = (\n    input?: AthenaDeleteUserRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions,\n  ) => {\n    const { payload, fetchOptions } = extractFetchOptions(input)\n    const mergedOptions = mergeCallOptions(fetchOptions, options)\n    return callAuthEndpoint<AthenaDeleteUserResponse>(\n      resolvedConfig,\n      { endpoint: '/delete-user', method: 'POST' },\n      payload ?? {},\n      undefined,\n      mergedOptions,\n    )\n  }\n\n  const deleteUserCallback = (\n    input?: AthenaDeleteUserCallbackRequest & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions,\n  ) => {\n    const { payload, fetchOptions } = extractFetchOptions(input)\n    const mergedOptions = mergeCallOptions(fetchOptions, options)\n    const query = (payload ?? {}) as AthenaDeleteUserCallbackRequest\n    return callAuthEndpoint<AthenaDeleteUserResponse>(\n      resolvedConfig,\n      { endpoint: '/delete-user/callback', method: 'GET' },\n      undefined,\n      {\n        token: query.token,\n        callbackURL: query.callbackURL,\n      },\n      mergedOptions,\n    )\n  }\n\n  const resolveResetPasswordToken = (\n    input: { token: string; callbackURL?: string } & AthenaAuthFetchCompatibleInput,\n    options?: AthenaAuthCallOptions,\n  ) => {\n    const { payload, fetchOptions } = extractFetchOptions(input)\n    const mergedOptions = mergeCallOptions(fetchOptions, options)\n    const query = payload as { token?: string; callbackURL?: string } | undefined\n    const token = query?.token?.trim()\n    if (!token) {\n      throw new Error('resolveResetPasswordToken requires a non-empty token')\n    }\n    const endpoint = `/reset-password/${encodeURIComponent(token)}` as AthenaAuthEndpointPath\n    return callAuthEndpoint<{ token?: string }>(\n      resolvedConfig,\n      { endpoint, method: 'GET' },\n      undefined,\n      query?.callbackURL ? { callbackURL: query.callbackURL } : undefined,\n      mergedOptions,\n    )\n  }\n\n  const organization: AthenaAuthOrganizationBindings = {\n    create: (input, options) =>\n      executePostWithCompatibleInput<\n        AthenaAuthOrganizationCreateRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthOrganization\n      >(\n        resolvedConfig,\n        { endpoint: '/organization/create', method: 'POST' },\n        input,\n        options,\n      ),\n    update: (input, options) =>\n      executePostWithCompatibleInput<\n        AthenaAuthOrganizationUpdateRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthOrganization\n      >(\n        resolvedConfig,\n        { endpoint: '/organization/update', method: 'POST' },\n        input,\n        options,\n      ),\n    delete: (input, options) =>\n      executePostWithCompatibleInput<\n        AthenaAuthOrganizationDeleteRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/organization/delete', method: 'POST' },\n        input,\n        options,\n      ),\n    setActive: (input, options) =>\n      executePostWithCompatibleInput<\n        AthenaAuthOrganizationSetActiveRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/organization/set-active', method: 'POST' },\n        input,\n        options,\n      ),\n    list: (input, options) =>\n      getGeneric<AthenaAuthOrganization[]>(\n        '/organization/list',\n        input,\n        options,\n      ),\n    getFull: (input, options) =>\n      executeGetWithQueryCompatibleInput<AthenaAuthOrganizationGetFullQuery, {\n        organization: AthenaAuthOrganization\n        members?: AthenaAuthOrganizationMember[]\n        invitations?: AthenaAuthOrganizationInvitation[]\n      }>(\n        resolvedConfig,\n        { endpoint: '/organization/get-full-organization', method: 'GET' },\n        input,\n        options,\n      ),\n    checkSlug: (input, options) =>\n      executePostWithCompatibleInput<\n        AthenaAuthOrganizationCheckSlugRequest & AthenaAuthFetchCompatibleInput,\n        { available: boolean }\n      >(\n        resolvedConfig,\n        { endpoint: '/organization/check-slug', method: 'POST' },\n        input,\n        options,\n      ),\n    leave: (input, options) =>\n      executePostWithCompatibleInput<\n        AthenaAuthOrganizationLeaveRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/organization/leave', method: 'POST' },\n        input,\n        options,\n      ),\n    listUserInvitations: (input, options) =>\n      executeGetWithQueryCompatibleInput<\n        AthenaAuthOrganizationListUserInvitationsQuery,\n        AthenaAuthOrganizationInvitation[]\n      >(\n        resolvedConfig,\n        { endpoint: '/organization/list-user-invitations', method: 'GET' },\n        input,\n        options,\n      ),\n    hasPermission: (input, options) =>\n      postGeneric<AthenaAdminHasPermissionResponse>(\n        '/organization/has-permission',\n        input,\n        options,\n      ),\n    requirePermission: (input, options) =>\n      requirePermission('/organization/has-permission', input, options),\n    invitation: {\n      cancel: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaAuthOrganizationInvitationActionRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/organization/cancel-invitation', method: 'POST' },\n          input,\n          options,\n        ),\n      accept: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaAuthOrganizationInvitationActionRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/organization/accept-invitation', method: 'POST' },\n          input,\n          options,\n        ),\n      get: (input, options) =>\n        executeGetWithQueryCompatibleInput<\n          AthenaAuthOrganizationGetInvitationQuery,\n          AthenaAuthOrganizationInvitation\n        >(\n          resolvedConfig,\n          { endpoint: '/organization/get-invitation', method: 'GET' },\n          input,\n          options,\n        ),\n      reject: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaAuthOrganizationInvitationActionRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/organization/reject-invitation', method: 'POST' },\n          input,\n          options,\n        ),\n      list: (input, options) =>\n        executeGetWithQueryCompatibleInput<\n          AthenaAuthOrganizationListInvitationsQuery,\n          AthenaAuthOrganizationInvitation[]\n        >(\n          resolvedConfig,\n          { endpoint: '/organization/list-invitations', method: 'GET' },\n          input,\n          options,\n        ),\n    },\n    member: {\n      remove: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaAuthOrganizationRemoveMemberRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/organization/remove-member', method: 'POST' },\n          input,\n          options,\n        ),\n      updateRole: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaAuthOrganizationUpdateMemberRoleRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthStatusResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/organization/update-member-role', method: 'POST' },\n          input,\n          options,\n        ),\n      invite: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaAuthOrganizationInviteMemberRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthOrganizationInvitation\n        >(\n          resolvedConfig,\n          { endpoint: '/organization/invite-member', method: 'POST' },\n          input,\n          options,\n        ),\n      getActive: (input, options) =>\n        executeGetWithCompatibleInput<AthenaAuthOrganizationMember>(\n          resolvedConfig,\n          { endpoint: '/organization/get-active-member', method: 'GET' },\n          input,\n          options,\n        ),\n      list: (input, options) =>\n        executeGetWithQueryCompatibleInput<\n          AthenaAuthOrganizationListMembersQuery,\n          AthenaAuthOrganizationMember[]\n        >(\n          resolvedConfig,\n          { endpoint: '/organization/list-members', method: 'GET' },\n          input,\n          options,\n        ),\n    },\n  }\n\n  const authResetPassword = Object.assign(\n    (\n      input: AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/reset-password', method: 'POST' },\n        input,\n        options,\n      ),\n    {\n      token: resolveResetPasswordToken,\n    },\n  )\n\n  const sessionRevokeBinding: AthenaAuthBindings['session']['revoke'] = (\n    input,\n    options,\n  ) => {\n    if (Array.isArray(input)) {\n      if (input.length === 0) {\n        throw new Error('session.revoke requires at least one session token')\n      }\n      if (input.length === 1) {\n        return revokeSession(input[0], options)\n      }\n      return revokeSessions(undefined, options)\n    }\n\n    const parsed = input as AthenaAuthGenericInput & {\n      token?: string\n      tokens?: string[]\n    }\n    const tokens = Array.isArray(parsed.tokens)\n      ? parsed.tokens.filter(token => token.trim().length > 0)\n      : undefined\n\n    if (tokens && tokens.length > 1) {\n      return revokeSessions(\n        parsed.fetchOptions ? { fetchOptions: parsed.fetchOptions } : undefined,\n        options,\n      )\n    }\n\n    if (tokens && tokens.length === 1) {\n      return revokeSession(\n        { token: tokens[0], fetchOptions: parsed.fetchOptions },\n        options,\n      )\n    }\n\n    const token = parsed.token?.trim()\n    if (!token) {\n      throw new Error('session.revoke requires a non-empty token or a non-empty token list')\n    }\n\n    return revokeSession(\n      {\n        token,\n        fetchOptions: parsed.fetchOptions,\n      },\n      options,\n    )\n  }\n\n  const adminUserSessionRevokeBinding: AthenaAuthBindings['admin']['user']['session']['revoke'] = (\n    input,\n    options,\n  ) => {\n    const requireUserId = (userId: string | undefined): string => {\n      const trimmed = String(userId ?? '').trim()\n      if (!trimmed) {\n        throw new Error('admin.user.session.revoke requires a non-empty userId')\n      }\n      return trimmed\n    }\n\n    const requireSinglePluralUserId = (\n      sessions: AthenaAdminRevokeUserSessionRequest[],\n    ): AthenaAdminRevokeUserSessionsRequest => {\n      const uniqueUserIds = [...new Set(sessions.map(session => requireUserId(session.userId)))]\n      if (uniqueUserIds.length !== 1) {\n        throw new Error('admin.user.session.revoke requires the same userId across plural payloads')\n      }\n      return { userId: uniqueUserIds[0] }\n    }\n\n    if (Array.isArray(input)) {\n      if (input.length === 0) {\n        throw new Error('admin.user.session.revoke requires at least one payload item')\n      }\n      if (input.length === 1) {\n        return postGeneric<AthenaAdminSuccessResponse>(\n          '/admin/revoke-user-session',\n          {\n            ...input[0],\n            userId: requireUserId(input[0].userId),\n          } as AthenaAuthGenericInput,\n          options,\n        )\n      }\n      return postGeneric<AthenaAdminSuccessResponse>(\n        '/admin/revoke-user-sessions',\n        requireSinglePluralUserId(input),\n        options,\n      )\n    }\n\n    const parsed = input as AthenaAuthGenericInput & {\n      sessions?: AthenaAdminRevokeUserSessionRequest[]\n      sessionToken?: string\n      userId?: string\n    }\n    const sessions = parsed.sessions\n\n    if (sessions && sessions.length === 0) {\n      throw new Error('admin.user.session.revoke requires at least one payload item')\n    }\n\n    if (sessions && sessions.length === 1) {\n      return postGeneric<AthenaAdminSuccessResponse>(\n        '/admin/revoke-user-session',\n        {\n          ...sessions[0],\n          userId: requireUserId(sessions[0].userId),\n          fetchOptions: parsed.fetchOptions,\n        } as AthenaAuthGenericInput,\n        options,\n      )\n    }\n\n    if (sessions && sessions.length > 1) {\n      return postGeneric<AthenaAdminSuccessResponse>(\n        '/admin/revoke-user-sessions',\n        {\n          ...requireSinglePluralUserId(sessions),\n          fetchOptions: parsed.fetchOptions,\n        } as AthenaAuthGenericInput,\n        options,\n      )\n    }\n\n    const normalizedUserId = requireUserId(parsed.userId)\n\n    if (!parsed.sessionToken) {\n      return postGeneric<AthenaAdminSuccessResponse>(\n        '/admin/revoke-user-sessions',\n        {\n          userId: normalizedUserId,\n          fetchOptions: parsed.fetchOptions,\n        } as AthenaAuthGenericInput,\n        options,\n      )\n    }\n    return postGeneric<AthenaAdminSuccessResponse>(\n      '/admin/revoke-user-session',\n      {\n        ...parsed,\n        userId: normalizedUserId,\n      } as AthenaAuthGenericInput,\n      options,\n    )\n  }\n\n  const auth: AthenaAuthBindings = {\n    getSession: (input, options) => getGeneric('/get-session', input, options),\n    getUser,\n    requireSession,\n    signOut,\n    forgetPassword: (input, options) => postGeneric('/forget-password', input, options),\n    resetPassword: authResetPassword,\n    setPassword: (input, options) => postGeneric('/set-password', input, options),\n    verifyEmail: (input, options) => {\n      const queryInput: AthenaAuthGenericQueryInput = {\n        query: {\n          token: input.token,\n          callbackURL: input.callbackURL,\n        },\n        fetchOptions: input.fetchOptions,\n      }\n      return getWithQuery<{ user: AthenaAuthUser; status: boolean }>(\n        '/verify-email',\n        queryInput,\n        options,\n      )\n    },\n    sendVerificationEmail: (input, options) => postGeneric('/send-verification-email', input, options),\n    changeEmail: (input, options) => postGeneric('/change-email', input, options),\n    changeEmailVerify: (input, options) => getWithQuery('/change-email/verify', input, options),\n    deleteUserVerify: (input, options) => getWithQuery('/delete-user/verify', input, options),\n    changePassword: (input, options) => postGeneric('/change-password', input, options),\n    user: {\n      update: (input, options) => postGeneric('/update-user', input, options),\n      delete: (input, options) => postGeneric('/delete-user', input, options),\n      email: {\n        list: listUserEmailsWithFallback,\n      },\n    },\n    session: {\n      list: (input, options) => getGeneric('/list-sessions', input, options),\n      revoke: sessionRevokeBinding,\n      revokeOther: revokeOtherSessions,\n    },\n    social: {\n      link: (input, options) => postGeneric('/link-social', input, options),\n    },\n    account: {\n      list: (input, options) => getGeneric('/list-accounts', input, options),\n      unlink: (input, options) => postGeneric('/unlink-account', input, options),\n    },\n    deleteUser: {\n      callback: deleteUserCallback,\n    },\n    refreshToken: (input, options) => postGeneric('/refresh-token', input, options),\n    getAccessToken: (input, options) => postGeneric('/get-access-token', input, options),\n    health: healthWithFallback,\n    ok: (input, options) => getGeneric('/ok', input, options),\n    error: (input, options) => getGeneric('/error', input, options),\n    twoFactor: {\n      getTotpUri: (input, options) => postGeneric('/two-factor/get-totp-uri', input, options),\n      verifyTotp: (input, options) => postGeneric('/two-factor/verify-totp', input, options),\n      sendOtp: (input, options) => postGeneric('/two-factor/send-otp', input, options),\n      verifyOtp: (input, options) => postGeneric('/two-factor/verify-otp', input, options),\n      verifyBackupCode: (input, options) => postGeneric('/two-factor/verify-backup-code', input, options),\n      generateBackupCodes: (input, options) =>\n        executePostWithCompatibleInput<\n          AthenaTwoFactorGenerateBackupCodesRequest & AthenaAuthFetchCompatibleInput,\n          AthenaTwoFactorGenerateBackupCodesResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/two-factor/generate-backup-codes', method: 'POST' },\n          input,\n          options,\n        ),\n      enable: (input, options) => postGeneric('/two-factor/enable', input, options),\n      disable: (input, options) => postGeneric('/two-factor/disable', input, options),\n    },\n    passkey: {\n      generateRegisterOptions: (input, options) =>\n        getGeneric('/passkey/generate-register-options', input, options),\n      generateAuthenticateOptions: (input, options) =>\n        postGeneric('/passkey/generate-authenticate-options', input, options),\n      verifyRegistration: (input, options) =>\n        postGeneric('/passkey/verify-registration', input, options),\n      verifyAuthentication: (input, options) =>\n        postGeneric('/passkey/verify-authentication', input, options),\n      listUserPasskeys: (input, options) => getGeneric('/passkey/list-user-passkeys', input, options),\n      deletePasskey: (input, options) => postGeneric('/passkey/delete-passkey', input, options),\n      updatePasskey: (input, options) => postGeneric('/passkey/update-passkey', input, options),\n      getRelatedOrigins: (input, options) => getGeneric('/.well-known/webauthn', input, options),\n    },\n    admin: {\n      role: {\n        set: (input, options) => postGeneric('/admin/set-role', input, options),\n      },\n      user: {\n        list: (input, options) => getWithQuery('/admin/list-users', input, options),\n        create: (input, options) => postGeneric('/admin/create-user', input, options),\n        unban: (input, options) => postGeneric('/admin/unban-user', input, options),\n        ban: (input, options) => postGeneric('/admin/ban-user', input, options),\n        impersonate: (input, options) => postGeneric('/admin/impersonate-user', input, options),\n        stopImpersonating: (input, options) => postGeneric('/admin/stop-impersonating', input, options),\n        remove: (input, options) => postGeneric('/admin/remove-user', input, options),\n        setPassword: (input, options) => postGeneric('/admin/set-user-password', input, options),\n        session: {\n          list: (input, options) => postGeneric('/admin/list-user-sessions', input, options),\n          revoke: adminUserSessionRevokeBinding,\n        },\n      },\n      hasPermission: (input, options) =>\n        postGeneric<AthenaAdminHasPermissionResponse>('/admin/has-permission', input, options),\n      requirePermission: (input, options) =>\n        requirePermission('/admin/has-permission', input, options),\n      apiKey: {\n        create: (input, options) => postGeneric('/admin/api-key/create', input, options),\n      },\n      athenaClient: {\n        create: (input, options) => postGeneric('/admin/athena-client/create', input, options),\n        list: (input, options) => getWithQuery('/admin/athena-client/list', input, options),\n      },\n      auditLog: {\n        list: (input, options) => getWithQuery('/admin/audit-log/list', input, options),\n      },\n      email: {\n        list: (input, options) => getWithQuery('/admin/email/list', input, options),\n        get: (input, options) => getWithQuery('/admin/email/get', input, options),\n        create: async (input, options) =>\n          postGeneric(\n            '/admin/email/create',\n            await resolveAdminEmailPayload('/admin/email/create', input),\n            options,\n          ),\n        update: async (input, options) =>\n          postGeneric(\n            '/admin/email/update',\n            await resolveAdminEmailPayload('/admin/email/update', input),\n            options,\n          ),\n        delete: (input, options) => postGeneric('/admin/email/delete', input, options),\n        failure: {\n          list: (input, options) => getWithQuery('/admin/email-failure/list', input, options),\n          get: (input, options) => getWithQuery('/admin/email-failure/get', input, options),\n          create: (input, options) => postGeneric('/admin/email-failure/create', input, options),\n          update: (input, options) => postGeneric('/admin/email-failure/update', input, options),\n          delete: (input, options) => postGeneric('/admin/email-failure/delete', input, options),\n        },\n        template: {\n          list: (input, options) => getWithQuery('/admin/email-template/list', input, options),\n          get: (input, options) => getWithQuery('/admin/email-template/get', input, options),\n          create: async (input, options) =>\n            postGeneric(\n              '/admin/email-template/create',\n              await resolveAdminEmailTemplatePayload('/admin/email-template/create', input),\n              options,\n            ),\n          update: async (input, options) =>\n            postGeneric(\n              '/admin/email-template/update',\n              await resolveAdminEmailTemplatePayload('/admin/email-template/update', input),\n              options,\n            ),\n          delete: (input, options) => postGeneric('/admin/email-template/delete', input, options),\n          send: (input, options) =>\n            postGeneric(\n              '/admin/email-template/send',\n              normalizeAdminEmailTemplateSendPayload(extractFetchOptions(input).payload as Record<string, unknown>),\n              options,\n            ),\n        },\n        eventType: {\n          list: (input, options) => getWithQuery('/admin/email-event-type/list', input, options),\n        },\n      },\n      emailTemplate: {\n        get: (input, options) => getWithQuery('/admin/email-template/get', input, options),\n        create: async (input, options) =>\n          postGeneric(\n            '/admin/email-template/create',\n            await resolveAdminEmailTemplatePayload('/admin/email-template/create', input),\n            options,\n          ),\n        delete: (input, options) => postGeneric('/admin/email-template/delete', input, options),\n        list: (input, options) => getWithQuery('/admin/email-template/list', input, options),\n        update: async (input, options) =>\n          postGeneric(\n            '/admin/email-template/update',\n            await resolveAdminEmailTemplatePayload('/admin/email-template/update', input),\n            options,\n          ),\n        send: (input, options) =>\n          postGeneric(\n            '/admin/email-template/send',\n            normalizeAdminEmailTemplateSendPayload(extractFetchOptions(input).payload as Record<string, unknown>),\n            options,\n          ),\n      },\n      emailEventType: {\n        list: (input, options) => getWithQuery('/admin/email-event-type/list', input, options),\n      },\n    },\n    apiKey: {\n      create: (input, options) => postGeneric('/api-key/create', input, options),\n      get: (input, options) => getWithQuery('/api-key/get', input, options),\n      update: (input, options) => postGeneric('/api-key/update', input, options),\n      delete: (input, options) => postGeneric('/api-key/delete', input, options),\n      list: (input, options) => getWithQuery('/api-key/list', input, options),\n      verify: (input, options) => postGeneric('/api-key/verify', input, options),\n      deleteAllExpired: (input, options) =>\n        executePostWithOptionalInput<AthenaApiKeyDeleteAllExpiredResponse>(\n          resolvedConfig,\n          { endpoint: '/api-key/delete-all-expired-api-keys', method: 'POST' },\n          input,\n          options,\n        ),\n    },\n    signIn: {\n      email: (input, options) => postGeneric('/sign-in/email', input, options),\n      username: (input, options) => postGeneric('/sign-in/username', input, options),\n      social: (input, options) => postGeneric('/sign-in/social', input, options),\n    },\n    signUp: {\n      email: (input, options) => postGeneric('/sign-up/email', input, options),\n    },\n    organization,\n    callback: {\n      provider: (input, options) => {\n        const { payload, fetchOptions } = extractFetchOptions(input)\n        const parsed = payload as {\n          provider?: string\n          code?: string\n          state?: string\n        } | undefined\n        const provider = String(parsed?.provider ?? '').trim()\n        if (!provider) {\n          throw new Error('callback.provider requires a non-empty provider value')\n        }\n        const code = String(parsed?.code ?? '').trim()\n        const state = String(parsed?.state ?? '').trim()\n        if (!code || !state) {\n          throw new Error('callback.provider requires non-empty code and state values')\n        }\n        const endpoint = `/callback/${encodeURIComponent(provider)}` as AthenaAuthEndpointPath\n        return request({\n          endpoint,\n          method: 'GET',\n          query: {\n            code,\n            state,\n          },\n          fetchOptions,\n        }, options)\n      },\n    },\n  }\n\n  return {\n    baseUrl: normalizedBaseUrl,\n    request,\n    signIn: {\n      email: (\n        input: AthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\n        options?: AthenaAuthCallOptions,\n      ) =>\n        executePostWithCompatibleInput<\n          AthenaEmailSignInRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthSignInResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/sign-in/email', method: 'POST' },\n          input,\n          options,\n        ),\n      username: (\n        input: AthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\n        options?: AthenaAuthCallOptions,\n      ) =>\n        executePostWithCompatibleInput<\n          AthenaUsernameSignInRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthSignInResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/sign-in/username', method: 'POST' },\n          input,\n          options,\n        ),\n      social: (\n        input: AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\n        options?: AthenaAuthCallOptions,\n      ) =>\n        executePostWithCompatibleInput<\n          AthenaSocialSignInRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthSocialRedirectResponse | AthenaAuthSignInResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/sign-in/social', method: 'POST' },\n          input,\n          options,\n        ),\n    },\n    signUp: {\n      email: (\n        input: AthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\n        options?: AthenaAuthCallOptions,\n      ) =>\n        executePostWithCompatibleInput<\n          AthenaEmailSignUpRequest & AthenaAuthFetchCompatibleInput,\n          AthenaAuthSignInResponse\n        >(\n          resolvedConfig,\n          { endpoint: '/sign-up/email', method: 'POST' },\n          input,\n          options,\n        ),\n    },\n    signOut,\n    logout: signOut,\n    getSession: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\n      executeGetWithCompatibleInput<AthenaAuthSessionResponse>(\n        resolvedConfig,\n        { endpoint: '/get-session', method: 'GET' },\n        input,\n        options,\n      ),\n    getUser,\n    requireSession,\n    listSessions: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\n      executeGetWithCompatibleInput<AthenaAuthSession[]>(\n        resolvedConfig,\n        { endpoint: '/list-sessions', method: 'GET' },\n        input,\n        options,\n      ),\n    revokeSession,\n    clearSession: revokeSession,\n    revokeSessions,\n    clearSessions: revokeSessions,\n    revokeOtherSessions,\n    clearOtherSessions: revokeOtherSessions,\n    forgetPassword: (\n      input: AthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaForgetPasswordRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/forget-password', method: 'POST' },\n        input,\n        options,\n      ),\n    resetPassword: (\n      input: AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaResetPasswordRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/reset-password', method: 'POST' },\n        input,\n        options,\n      ),\n    resolveResetPasswordToken,\n    verifyEmail: (\n      input: AthenaVerifyEmailRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) => {\n      const { payload, fetchOptions } = extractFetchOptions(input)\n      const mergedOptions = mergeCallOptions(fetchOptions, options)\n      const query = payload as AthenaVerifyEmailRequest | undefined\n      return callAuthEndpoint<{ user: AthenaAuthUser; status: boolean }>(\n        resolvedConfig,\n        { endpoint: '/verify-email', method: 'GET' },\n        undefined,\n        query\n          ? {\n              token: query.token,\n              callbackURL: query.callbackURL,\n            }\n          : undefined,\n        mergedOptions,\n      )\n    },\n    sendVerificationEmail: (\n      input: AthenaSendVerificationEmailRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaSendVerificationEmailRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/send-verification-email', method: 'POST' },\n        input,\n        options,\n      ),\n    changeEmail: (\n      input: AthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaChangeEmailRequest & AthenaAuthFetchCompatibleInput,\n        { status: boolean; message?: string | null }\n      >(\n        resolvedConfig,\n        { endpoint: '/change-email', method: 'POST' },\n        input,\n        options,\n      ),\n    changePassword: (\n      input: AthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaChangePasswordRequest & AthenaAuthFetchCompatibleInput,\n        { token?: string | null; user: AthenaAuthUser }\n      >(\n        resolvedConfig,\n        { endpoint: '/change-password', method: 'POST' },\n        input,\n        options,\n      ),\n    updateUser: (\n      input: AthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaUpdateUserRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/update-user', method: 'POST' },\n        input,\n        options,\n      ),\n    deleteUser,\n    deleteUserCallback,\n    linkSocial: (\n      input: AthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaLinkSocialRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthSocialRedirectResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/link-social', method: 'POST' },\n        input,\n        options,\n      ),\n    listAccounts: (input?: AthenaAuthFetchCompatibleInput, options?: AthenaAuthCallOptions) =>\n      executeGetWithCompatibleInput<AthenaAuthLinkedAccount[]>(\n        resolvedConfig,\n        { endpoint: '/list-accounts', method: 'GET' },\n        input,\n        options,\n      ),\n    unlinkAccount: (\n      input: AthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaUnlinkAccountRequest & AthenaAuthFetchCompatibleInput,\n        AthenaAuthStatusResponse\n      >(\n        resolvedConfig,\n        { endpoint: '/unlink-account', method: 'POST' },\n        input,\n        options,\n      ),\n    refreshToken: (\n      input: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n        AthenaOAuthTokenBundle\n      >(\n        resolvedConfig,\n        { endpoint: '/refresh-token', method: 'POST' },\n        input,\n        options,\n      ),\n    getAccessToken: (\n      input: AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n      options?: AthenaAuthCallOptions,\n    ) =>\n      executePostWithCompatibleInput<\n        AthenaOAuthAccountTokenRequest & AthenaAuthFetchCompatibleInput,\n        AthenaOAuthTokenBundle\n      >(\n        resolvedConfig,\n        { endpoint: '/get-access-token', method: 'POST' },\n        input,\n        options,\n      ),\n    organization,\n    auth,\n  }\n}\n","import type {\n  AthenaStorageDirectUploadConfig,\n  AthenaStoragePutBody,\n} from './module.ts'\n\ninterface DirectUploadProgress {\n  loaded: number\n}\n\ninterface DirectUploadXhr {\n  readonly upload: {\n    onprogress: ((event: { loaded: number }) => void) | null\n  }\n  readonly status: number\n  readonly statusText: string\n  readonly response: unknown\n  onload: (() => void) | null\n  onerror: (() => void) | null\n  onabort: (() => void) | null\n  open(method: string, url: string): void\n  setRequestHeader(key: string, value: string): void\n  getAllResponseHeaders(): string\n  send(body: unknown): void\n  abort(): void\n}\n\ndeclare const XMLHttpRequest: (new () => DirectUploadXhr) | undefined\n\nconst SERVICE = 's3'\nconst TERMINATOR = 'aws4_request'\n\nexport async function putDirectStorageUploadBody(\n  config: AthenaStorageDirectUploadConfig,\n  bucket: string | undefined,\n  storageKey: string,\n  body: AthenaStoragePutBody,\n  uploadHeaders: Record<string, string>,\n  signal: AbortSignal | undefined,\n  onProgress: (progress: DirectUploadProgress) => void,\n): Promise<Response> {\n  if (config.bucket && bucket && config.bucket !== bucket) {\n    throw new Error(\n      `athena.storage.file.upload direct mode bucket mismatch: configured ${config.bucket} but Athena returned ${bucket}`,\n    )\n  }\n  const target = createDirectUploadTarget(config, bucket, storageKey)\n  const bytes = await bodyToArrayBuffer(body)\n  const payloadHash = await sha256Hex(bytes)\n  const headers = new Headers(uploadHeaders)\n  if (isBlobBody(body) && body.type && !headers.has('Content-Type')) {\n    headers.set('Content-Type', body.type)\n  }\n\n  const signed = await signDirectUploadRequest(config, target, headers, payloadHash)\n  if (typeof XMLHttpRequest !== 'undefined') {\n    return putWithXhr(target.toString(), signed, body, signal, onProgress)\n  }\n\n  onProgress({ loaded: 0 })\n  const response = await fetch(target, {\n    method: 'PUT',\n    headers: signed.requestHeaders,\n    body: body as RequestInit['body'],\n    signal,\n  })\n  if (!response.ok) {\n    throw new Error(`athena.storage.file.upload failed with status ${response.status}`)\n  }\n  onProgress({ loaded: bytes.byteLength })\n  return response\n}\n\nfunction createDirectUploadTarget(\n  config: AthenaStorageDirectUploadConfig,\n  bucket: string | undefined,\n  storageKey: string,\n): URL {\n  const resolvedBucket = config.bucket ?? bucket\n  if (!resolvedBucket?.trim()) {\n    throw new Error(\n      'athena.storage.file.upload direct mode requires a bucket in storage.directUpload or the server upload response',\n    )\n  }\n  if (!storageKey.trim()) {\n    throw new Error('athena.storage.file.upload direct mode requires a storage key')\n  }\n\n  let endpoint: URL\n  try {\n    endpoint = new URL(config.endpoint)\n  } catch (error) {\n    throw new Error(\n      `athena.storage.file.upload direct mode received an invalid endpoint: ${error instanceof Error ? error.message : String(error)}`,\n    )\n  }\n  if (endpoint.search || endpoint.hash) {\n    throw new Error('athena.storage.file.upload direct mode endpoint must not contain a query or hash')\n  }\n\n  const endpointPath = endpoint.pathname.replace(/\\/+$/, '')\n  const pathParts = config.forcePathStyle === false\n    ? [endpointPath, storageKey]\n    : [endpointPath, resolvedBucket, storageKey]\n  if (config.forcePathStyle === false) {\n    endpoint.hostname = `${resolvedBucket}.${endpoint.hostname}`\n  }\n  endpoint.pathname = pathParts\n    .filter(Boolean)\n    .flatMap(part => part.split('/'))\n    .map(awsEncode)\n    .join('/')\n    .replace(/^([^/])/, '/$1')\n  return endpoint\n}\n\nasync function signDirectUploadRequest(\n  config: AthenaStorageDirectUploadConfig,\n  target: URL,\n  inputHeaders: Headers,\n  payloadHash: string,\n): Promise<{ requestHeaders: Record<string, string> }> {\n  const accessKeyId = config.accessKeyId.trim()\n  const secretAccessKey = config.secretAccessKey.trim()\n  if (!accessKeyId || !secretAccessKey) {\n    throw new Error(\n      'athena.storage.file.upload direct mode requires accessKeyId and secretAccessKey',\n    )\n  }\n\n  const now = new Date()\n  const amzDate = formatAmzDate(now)\n  const shortDate = amzDate.slice(0, 8)\n  const region = config.region?.trim() || 'auto'\n  const headers: Record<string, string> = {}\n  inputHeaders.forEach((value, key) => {\n    if (key.toLowerCase() !== 'authorization' && key.toLowerCase() !== 'host') {\n      headers[key.toLowerCase()] = value.trim().replace(/\\s+/g, ' ')\n    }\n  })\n  headers['x-amz-content-sha256'] = payloadHash\n  headers['x-amz-date'] = amzDate\n  if (config.sessionToken?.trim()) {\n    headers['x-amz-security-token'] = config.sessionToken.trim()\n  }\n\n  const canonicalHeaders = Object.keys(headers)\n    .sort()\n    .map(key => `${key}:${headers[key]}\\n`)\n    .join('')\n  const signedHeaders = Object.keys(headers).sort().join(';')\n  const canonicalRequest = [\n    'PUT',\n    target.pathname,\n    '',\n    `host:${target.host}\\n${canonicalHeaders}`,\n    `host;${signedHeaders}`,\n    payloadHash,\n  ].join('\\n')\n  const credentialScope = `${shortDate}/${region}/${SERVICE}/${TERMINATOR}`\n  const stringToSign = [\n    'AWS4-HMAC-SHA256',\n    amzDate,\n    credentialScope,\n    await sha256Hex(canonicalRequest),\n  ].join('\\n')\n  const dateKey = await hmac(`AWS4${secretAccessKey}`, shortDate)\n  const regionKey = await hmac(dateKey, region)\n  const serviceKey = await hmac(regionKey, SERVICE)\n  const signingKey = await hmac(serviceKey, TERMINATOR)\n  const signature = await hmacHex(signingKey, stringToSign)\n  headers.authorization = `AWS4-HMAC-SHA256 Credential=${accessKeyId}/${credentialScope}, SignedHeaders=host;${signedHeaders}, Signature=${signature}`\n\n  return { requestHeaders: headers }\n}\n\nasync function putWithXhr(\n  url: string,\n  signed: { requestHeaders: Record<string, string> },\n  body: AthenaStoragePutBody,\n  signal: AbortSignal | undefined,\n  onProgress: (progress: DirectUploadProgress) => void,\n): Promise<Response> {\n  const Xhr = XMLHttpRequest\n  if (Xhr === undefined) {\n    return Promise.reject(new Error('athena.storage.file.upload direct mode requires XMLHttpRequest in this runtime'))\n  }\n  return new Promise((resolve, reject) => {\n    const xhr = new Xhr()\n    const abort = () => xhr.abort()\n    xhr.open('PUT', url)\n    Object.entries(signed.requestHeaders).forEach(([key, value]) => xhr.setRequestHeader(key, value))\n    xhr.upload.onprogress = event => onProgress({ loaded: event.loaded })\n    xhr.onload = () => {\n      signal?.removeEventListener('abort', abort)\n      if (xhr.status < 200 || xhr.status >= 300) {\n        reject(new Error(`athena.storage.file.upload failed with status ${xhr.status}`))\n        return\n      }\n      onProgress({ loaded: bodySize(body) })\n      resolve(new Response(xhr.response as ConstructorParameters<typeof Response>[0], {\n        status: xhr.status,\n        statusText: xhr.statusText,\n        headers: parseXhrHeaders(xhr.getAllResponseHeaders()),\n      }))\n    }\n    xhr.onerror = () => {\n      signal?.removeEventListener('abort', abort)\n      reject(new Error('athena.storage.file.upload failed with a network error'))\n    }\n    xhr.onabort = () => {\n      signal?.removeEventListener('abort', abort)\n      reject(new DOMException('Upload aborted', 'AbortError'))\n    }\n    if (signal) {\n      if (signal.aborted) {\n        abort()\n        return\n      }\n      signal.addEventListener('abort', abort, { once: true })\n    }\n    xhr.send(body)\n  })\n}\n\nfunction isBlobBody(body: AthenaStoragePutBody): body is Blob {\n  return typeof Blob !== 'undefined' && body instanceof Blob\n}\n\nasync function bodyToArrayBuffer(body: AthenaStoragePutBody): Promise<ArrayBuffer> {\n  if (isBlobBody(body)) return body.arrayBuffer()\n  if (body instanceof ArrayBuffer) return body\n  if (ArrayBuffer.isView(body)) {\n    return body.buffer.slice(body.byteOffset, body.byteOffset + body.byteLength) as ArrayBuffer\n  }\n  throw new Error('athena.storage.file.upload direct mode does not support ReadableStream bodies')\n}\n\nfunction bodySize(body: AthenaStoragePutBody): number {\n  if (isBlobBody(body)) return body.size\n  if (body instanceof ArrayBuffer) return body.byteLength\n  if (ArrayBuffer.isView(body)) return body.byteLength\n  return 0\n}\n\nfunction awsEncode(value: string): string {\n  return encodeURIComponent(value).replace(/[!'()*]/g, character => `%${character.charCodeAt(0).toString(16).toUpperCase()}`)\n}\n\nfunction formatAmzDate(date: Date): string {\n  return date.toISOString().replace(/[:-]|\\.\\d{3}/g, '')\n}\n\nasync function sha256Hex(value: string | ArrayBuffer): Promise<string> {\n  const bytes = typeof value === 'string' ? new TextEncoder().encode(value) : value\n  const digest = await crypto.subtle.digest('SHA-256', bytes)\n  return toHex(new Uint8Array(digest))\n}\n\nasync function hmac(key: string | ArrayBuffer, value: string): Promise<ArrayBuffer> {\n  const keyBytes = typeof key === 'string' ? new TextEncoder().encode(key) : key\n  const cryptoKey = await crypto.subtle.importKey(\n    'raw',\n    keyBytes,\n    { name: 'HMAC', hash: 'SHA-256' },\n    false,\n    ['sign'],\n  )\n  return crypto.subtle.sign('HMAC', cryptoKey, new TextEncoder().encode(value))\n}\n\nasync function hmacHex(key: ArrayBuffer, value: string): Promise<string> {\n  return toHex(new Uint8Array(await hmac(key, value)))\n}\n\nfunction toHex(bytes: Uint8Array): string {\n  return Array.from(bytes, byte => byte.toString(16).padStart(2, '0')).join('')\n}\n\nfunction parseXhrHeaders(rawHeaders: string): Headers {\n  const headers = new Headers()\n  rawHeaders.trim().split(/[\\r\\n]+/).forEach(line => {\n    const separator = line.indexOf(':')\n    if (separator > 0) {\n      headers.set(line.slice(0, separator).trim(), line.slice(separator + 1).trim())\n    }\n  })\n  return headers\n}\n","import type {\n  AthenaStorageBinaryCallOptions,\n  AthenaStorageCallOptions,\n  AthenaStorageDirectUploadConfig,\n  CreateStorageUploadUrlRequest,\n  GetStorageFileUrlQuery,\n  ListStorageFilesRequest,\n  ManagedFileRecord,\n  StorageBatchUploadUrlResponse,\n  StorageFileMutationResponse,\n  StorageListFilesResponse,\n  StorageMultipartAbortRequest,\n  StorageMultipartCompleteRequest,\n  StorageMultipartCreateRequest,\n  StorageMultipartSignPartRequest,\n  StorageServerSideEncryptionOptions,\n  StorageUploadUrlResponse,\n} from './module.ts'\nimport { putDirectStorageUploadBody } from './direct-upload.ts'\n\n/** Files at or above this size use multipart unless `forceSinglePut` is set. */\nexport const DEFAULT_MULTIPART_THRESHOLD_BYTES = 32 * 1024 * 1024\n/** Chunk size for multipart uploads (S3 requires >= 5 MiB except the last part). */\nexport const DEFAULT_MULTIPART_PART_SIZE_BYTES = 8 * 1024 * 1024\nconst MIN_MULTIPART_PART_SIZE_BYTES = 5 * 1024 * 1024\n\nexport type AthenaStorageTemplateValue = string | number | boolean | null | undefined\nexport type AthenaStorageTemplateVars = Record<string, AthenaStorageTemplateValue>\nexport type AthenaStorageEnv = Record<string, string | undefined>\nexport type AthenaStorageUploadHeaders = ConstructorParameters<typeof Headers>[0]\nexport type AthenaStoragePrefixPath =\n  | string\n  | ((context: AthenaStoragePathContext) => string | null | undefined)\n\nexport interface AthenaStoragePathContext {\n  vars: AthenaStorageTemplateVars\n  env: AthenaStorageEnv\n  organizationId?: string\n  organization_id?: string\n  userId?: string\n  user_id?: string\n  resourceId?: string\n  resource_id?: string\n}\n\nexport interface AthenaStorageFileConfig {\n  /**\n   * Prefix applied by high-level file helpers before storage keys are sent to Athena.\n   * Supports tokens such as `{organization_id}`, `{organizationId}`, `{env.NODE_ENV}`,\n   * and `${ATHENA_STORAGE_PREFIX}`.\n   */\n  prefixPath?: AthenaStoragePrefixPath\n  vars?: AthenaStorageTemplateVars\n  env?: AthenaStorageEnv\n  directUpload?: AthenaStorageDirectUploadConfig\n}\n\nexport type AthenaStorageUploadSource = Blob | ArrayBuffer | Uint8Array\n\nexport interface AthenaStorageUploadConstraints {\n  maxFiles?: number\n  allowedExtensions?: readonly string[]\n  extensions?: readonly string[]\n  maxFileSizeMb?: number\n  maxFileSizeBytes?: number\n}\n\nexport interface AthenaStorageUploadProgress {\n  phase: 'preparing' | 'uploading' | 'complete'\n  fileIndex: number\n  fileCount: number\n  fileName: string\n  loaded: number\n  total: number\n  percent: number\n  aggregateLoaded: number\n  aggregateTotal: number\n  aggregatePercent: number\n  /** Present when the active file is uploading via multipart. */\n  multipart?: {\n    uploadId: string\n    partNumber: number\n    partCount: number\n  }\n}\n\nexport type AthenaStorageUploadProgressHandler = (progress: AthenaStorageUploadProgress) => void\n\nexport interface AthenaStorageFileUploadInput extends AthenaStorageUploadConstraints, StorageServerSideEncryptionOptions {\n  s3_id: string\n  bucket?: string\n  files: AthenaStorageUploadSource | ArrayLike<AthenaStorageUploadSource> | readonly AthenaStorageUploadSource[]\n  storage_key?: string\n  storageKey?: string\n  storageKeyTemplate?: string\n  prefixPath?: AthenaStoragePrefixPath\n  fileName?: string\n  name?: string\n  original_name?: string\n  resource_id?: string\n  resourceId?: string\n  organization_id?: string\n  organizationId?: string\n  user_id?: string\n  userId?: string\n  mime_type?: string\n  content_type?: string\n  public?: boolean\n  metadata?: Record<string, unknown>\n  vars?: AthenaStorageTemplateVars\n  env?: AthenaStorageEnv\n  uploadHeaders?: AthenaStorageUploadHeaders\n  onProgress?: AthenaStorageUploadProgressHandler\n  /** Override auto-multipart threshold (default 32 MiB). */\n  multipartThresholdBytes?: number\n  /** Override multipart chunk size (default 8 MiB, minimum 5 MiB). */\n  multipartPartSizeBytes?: number\n  /** Always use a single PUT even when the file exceeds the multipart threshold. */\n  forceSinglePut?: boolean\n  /** Always use multipart even when the file is below the threshold. */\n  forceMultipart?: boolean\n}\n\nexport interface AthenaStorageUploadedFile {\n  file: ManagedFileRecord\n  upload: StorageUploadUrlResponse['upload']\n  source: AthenaStorageUploadSource\n  fileName: string\n  storage_key: string\n  response: Response\n}\n\nexport interface AthenaStorageFileUploadResult {\n  files: AthenaStorageUploadedFile[]\n  count: number\n}\n\nexport interface AthenaStorageFileListInput extends Omit<ListStorageFilesRequest, 'prefix'> {\n  prefix?: string\n  prefixPath?: AthenaStoragePrefixPath\n  vars?: AthenaStorageTemplateVars\n  env?: AthenaStorageEnv\n  organization_id?: string\n  organizationId?: string\n  user_id?: string\n  userId?: string\n  resource_id?: string\n  resourceId?: string\n}\n\nexport interface AthenaStorageFileDownloadInput extends GetStorageFileUrlQuery {\n  fileId?: string\n  fileIds?: readonly string[]\n}\n\nexport type AthenaStorageFileDeleteInput = string | readonly string[]\n\nexport interface AthenaStorageFileModule {\n  upload(\n    input: AthenaStorageFileUploadInput,\n    options?: AthenaStorageCallOptions,\n  ): Promise<AthenaStorageFileUploadResult>\n  uploadMultipart(\n    input: AthenaStorageFileUploadInput,\n    options?: AthenaStorageCallOptions,\n  ): Promise<AthenaStorageFileUploadResult>\n  download(\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions,\n  ): Promise<Response>\n  download(\n    fileIds: readonly string[],\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions,\n  ): Promise<Response[]>\n  download(\n    input: AthenaStorageFileDownloadInput,\n    options?: AthenaStorageBinaryCallOptions,\n  ): Promise<Response | Response[]>\n  list(\n    input: AthenaStorageFileListInput,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageListFilesResponse>\n  delete(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n  delete(fileIds: readonly string[], options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse[]>\n}\n\nexport interface AthenaStorageFileBaseModule {\n  createStorageUploadUrl(\n    input: CreateStorageUploadUrlRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageUploadUrlResponse>\n  createStorageUploadUrls(\n    input: { files: CreateStorageUploadUrlRequest[] },\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageBatchUploadUrlResponse>\n  listStorageFiles(input: ListStorageFilesRequest, options?: AthenaStorageCallOptions): Promise<StorageListFilesResponse>\n  getStorageFileProxy(\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions,\n  ): Promise<Response>\n  deleteStorageFile(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n}\n\nexport interface AthenaStorageMultipartClient {\n  create(\n    input: StorageMultipartCreateRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<Record<string, unknown>>\n  signPart(\n    input: StorageMultipartSignPartRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<Record<string, unknown>>\n  complete(\n    input: StorageMultipartCompleteRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationResponse>\n  abort(\n    input: StorageMultipartAbortRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<Record<string, unknown>>\n}\n\ninterface NormalizedUploadSource {\n  source: AthenaStorageUploadSource\n  fileName: string\n  sizeBytes: number\n  contentType?: string\n}\n\ninterface ResolvedUploadRequest {\n  uploadRequest: CreateStorageUploadUrlRequest\n  source: NormalizedUploadSource\n}\n\ninterface AthenaStorageXhrProgressEvent {\n  loaded: number\n}\n\ninterface AthenaStorageXhr {\n  readonly upload: {\n    onprogress: ((event: AthenaStorageXhrProgressEvent) => void) | null\n  }\n  readonly status: number\n  readonly statusText: string\n  readonly response: unknown\n  onload: (() => void) | null\n  onerror: (() => void) | null\n  onabort: (() => void) | null\n  open(method: string, url: string): void\n  setRequestHeader(key: string, value: string): void\n  getAllResponseHeaders(): string\n  send(body: unknown): void\n  abort(): void\n}\n\ndeclare const XMLHttpRequest: (new () => AthenaStorageXhr) | undefined\n\nfunction mergeUploadHeaders(\n  serverHeaders: Record<string, string>,\n  inputHeaders: AthenaStorageUploadHeaders | undefined,\n): Record<string, string> {\n  const headers: Record<string, string> = { ...serverHeaders }\n  new Headers(inputHeaders).forEach((value, key) => {\n    headers[key] = value\n  })\n  return headers\n}\n\nexport function createStorageFileModule(\n  base: AthenaStorageFileBaseModule,\n  config: AthenaStorageFileConfig = {},\n  multipart?: AthenaStorageMultipartClient,\n): AthenaStorageFileModule {\n  const uploadSinglePut = async (\n    input: AthenaStorageFileUploadInput,\n    sources: NormalizedUploadSource[],\n    options?: AthenaStorageCallOptions,\n  ): Promise<AthenaStorageFileUploadResult> => {\n    const uploadRequests = sources.map((source, index): ResolvedUploadRequest => {\n      const storageKey = resolveUploadStorageKey(input, source, index, options, config)\n      return {\n        source,\n        uploadRequest: {\n          s3_id: input.s3_id,\n          bucket: input.bucket,\n          storage_key: storageKey,\n          name: input.name ?? source.fileName,\n          original_name: input.original_name ?? source.fileName,\n          resource_id: input.resource_id ?? input.resourceId,\n          mime_type: input.mime_type ?? source.contentType,\n          content_type: input.content_type ?? source.contentType,\n          size_bytes: source.sizeBytes,\n          public: input.public,\n          metadata: input.metadata,\n          server_side_encryption: input.server_side_encryption,\n          sse: input.sse,\n          ssekms_key_id: input.ssekms_key_id,\n          kms_key_id: input.kms_key_id,\n          bucket_key_enabled: input.bucket_key_enabled,\n        },\n      }\n    })\n\n    input.onProgress?.(createProgressSnapshot('preparing', sources, 0, 0, 0))\n\n    const uploadUrls =\n      uploadRequests.length === 1\n        ? [await base.createStorageUploadUrl(uploadRequests[0].uploadRequest, options)]\n        : (await base.createStorageUploadUrls({ files: uploadRequests.map(request => request.uploadRequest) }, options)).files\n\n    const aggregateLoaded = new Array(uploadRequests.length).fill(0) as number[]\n    const uploaded: AthenaStorageUploadedFile[] = []\n\n    for (let index = 0; index < uploadRequests.length; index += 1) {\n      const request = uploadRequests[index]\n      const uploadUrl = uploadUrls[index]\n      const aggregateProgress = (progress: { loaded: number }) => {\n        aggregateLoaded[index] = progress.loaded\n        input.onProgress?.(createProgressSnapshot('uploading', sources, index, progress.loaded, sum(aggregateLoaded)))\n      }\n      const response = config.directUpload\n        ? await putDirectStorageUploadBody(\n            config.directUpload,\n            uploadUrl.upload.bucket,\n            uploadUrl.upload.storage_key,\n            request.source.source,\n            mergeUploadHeaders(uploadUrl.upload.headers ?? {}, input.uploadHeaders),\n            options?.signal,\n            aggregateProgress,\n          )\n        : await putUploadBody(\n            uploadUrl.upload.url,\n            uploadUrl.upload.headers ?? {},\n            request.source,\n            input,\n            options,\n            aggregateProgress,\n          )\n      uploaded.push({\n        file: uploadUrl.file,\n        upload: uploadUrl.upload,\n        source: request.source.source,\n        fileName: request.source.fileName,\n        storage_key: request.uploadRequest.storage_key,\n        response,\n      })\n      aggregateLoaded[index] = request.source.sizeBytes\n      input.onProgress?.(createProgressSnapshot('complete', sources, index, request.source.sizeBytes, sum(aggregateLoaded)))\n    }\n\n    return {\n      files: uploaded,\n      count: uploaded.length,\n    }\n  }\n\n  const uploadMultipart: AthenaStorageFileModule['uploadMultipart'] = async (input, options) => {\n    if (!multipart) {\n      throw new Error('athena.storage.file.uploadMultipart requires the multipart namespace')\n    }\n    const sources = normalizeUploadSources(input)\n    validateUploadConstraints(sources, input)\n    const partSize = Math.max(\n      input.multipartPartSizeBytes ?? DEFAULT_MULTIPART_PART_SIZE_BYTES,\n      MIN_MULTIPART_PART_SIZE_BYTES,\n    )\n\n    input.onProgress?.(createProgressSnapshot('preparing', sources, 0, 0, 0))\n\n    const aggregateLoaded = new Array(sources.length).fill(0) as number[]\n    const uploaded: AthenaStorageUploadedFile[] = []\n\n    for (let index = 0; index < sources.length; index += 1) {\n      const source = sources[index]\n      const storageKey = resolveUploadStorageKey(input, source, index, options, config)\n      const uploadUrl = await base.createStorageUploadUrl(\n        {\n          s3_id: input.s3_id,\n          bucket: input.bucket,\n          storage_key: storageKey,\n          name: input.name ?? source.fileName,\n          original_name: input.original_name ?? source.fileName,\n          resource_id: input.resource_id ?? input.resourceId,\n          mime_type: input.mime_type ?? source.contentType,\n          content_type: input.content_type ?? source.contentType,\n          size_bytes: source.sizeBytes,\n          public: input.public,\n          metadata: input.metadata,\n          server_side_encryption: input.server_side_encryption,\n          sse: input.sse,\n          ssekms_key_id: input.ssekms_key_id,\n          kms_key_id: input.kms_key_id,\n          bucket_key_enabled: input.bucket_key_enabled,\n        },\n        options,\n      )\n\n      const fileId = uploadUrl.file.id\n      let uploadId = ''\n      try {\n        const created = await multipart.create(\n          {\n            file_id: fileId,\n            content_type: input.content_type ?? source.contentType,\n            server_side_encryption: input.server_side_encryption,\n            sse: input.sse,\n            ssekms_key_id: input.ssekms_key_id,\n            kms_key_id: input.kms_key_id,\n            bucket_key_enabled: input.bucket_key_enabled,\n          },\n          options,\n        )\n        uploadId = readStringField(created, ['upload_id', 'uploadId'])\n        if (!uploadId) {\n          throw new Error('athena.storage.file.uploadMultipart did not receive an upload_id')\n        }\n\n        const partCount = Math.max(1, Math.ceil(source.sizeBytes / partSize))\n        const completedParts: Array<{ part_number: number; etag: string }> = []\n        let fileLoaded = 0\n\n        for (let partNumber = 1; partNumber <= partCount; partNumber += 1) {\n          const start = (partNumber - 1) * partSize\n          const end = Math.min(start + partSize, source.sizeBytes)\n          const chunk = sliceUploadSource(source.source, start, end)\n          const signed = await multipart.signPart(\n            {\n              file_id: fileId,\n              upload_id: uploadId,\n              part_number: partNumber,\n            },\n            options,\n          )\n          const partUrl = readStringField(signed, ['url'])\n          if (!partUrl) {\n            throw new Error(`athena.storage.file.uploadMultipart missing part URL for part ${partNumber}`)\n          }\n          const partHeaders = readHeadersField(signed)\n          const response = await putUploadBody(\n            partUrl,\n            partHeaders,\n            {\n              source: chunk,\n              fileName: source.fileName,\n              sizeBytes: end - start,\n              contentType: source.contentType,\n            },\n            input,\n            options,\n            (progress) => {\n              const loaded = fileLoaded + progress.loaded\n              aggregateLoaded[index] = loaded\n              input.onProgress?.(\n                createProgressSnapshot('uploading', sources, index, loaded, sum(aggregateLoaded), {\n                  uploadId,\n                  partNumber,\n                  partCount,\n                }),\n              )\n            },\n          )\n          const etag = extractEtag(response)\n          if (!etag) {\n            throw new Error(`athena.storage.file.uploadMultipart missing ETag for part ${partNumber}`)\n          }\n          completedParts.push({ part_number: partNumber, etag })\n          fileLoaded = end\n          aggregateLoaded[index] = fileLoaded\n          input.onProgress?.(\n            createProgressSnapshot('uploading', sources, index, fileLoaded, sum(aggregateLoaded), {\n              uploadId,\n              partNumber,\n              partCount,\n            }),\n          )\n        }\n\n        const completed = await multipart.complete(\n          {\n            file_id: fileId,\n            upload_id: uploadId,\n            parts: completedParts,\n          },\n          options,\n        )\n\n        uploaded.push({\n          file: completed.file ?? uploadUrl.file,\n          upload: uploadUrl.upload,\n          source: source.source,\n          fileName: source.fileName,\n          storage_key: storageKey,\n          response: new Response(null, { status: 200 }),\n        })\n        aggregateLoaded[index] = source.sizeBytes\n        input.onProgress?.(\n          createProgressSnapshot('complete', sources, index, source.sizeBytes, sum(aggregateLoaded), {\n            uploadId,\n            partNumber: partCount,\n            partCount,\n          }),\n        )\n      } catch (error) {\n        if (uploadId) {\n          try {\n            await multipart.abort({ file_id: fileId, upload_id: uploadId }, options)\n          } catch {\n            // Best-effort abort; surface the original upload error.\n          }\n        }\n        throw error\n      }\n    }\n\n    return {\n      files: uploaded,\n      count: uploaded.length,\n    }\n  }\n\n  const upload: AthenaStorageFileModule['upload'] = async (input, options) => {\n    const sources = normalizeUploadSources(input)\n    validateUploadConstraints(sources, input)\n\n    const threshold = input.multipartThresholdBytes ?? DEFAULT_MULTIPART_THRESHOLD_BYTES\n    const useMultipart =\n      Boolean(multipart) &&\n      !input.forceSinglePut &&\n      !config.directUpload &&\n      (input.forceMultipart || sources.some(source => source.sizeBytes >= threshold))\n\n    if (useMultipart) {\n      const multipartSources = sources.filter(\n        source => input.forceMultipart || source.sizeBytes >= threshold,\n      )\n      const singleSources = sources.filter(\n        source => !(input.forceMultipart || source.sizeBytes >= threshold),\n      )\n\n      if (multipartSources.length === sources.length) {\n        return uploadMultipart(input, options)\n      }\n\n      // Mixed batch: upload large files via multipart, small via single PUT.\n      const multipartResult = multipartSources.length > 0\n        ? await uploadMultipart({ ...input, files: multipartSources.map(source => source.source), maxFiles: multipartSources.length }, options)\n        : { files: [], count: 0 }\n      const singleResult = singleSources.length > 0\n        ? await uploadSinglePut(\n            { ...input, files: singleSources.map(source => source.source), maxFiles: singleSources.length },\n            singleSources,\n            options,\n          )\n        : { files: [], count: 0 }\n      const files = [...multipartResult.files, ...singleResult.files]\n      return { files, count: files.length }\n    }\n\n    return uploadSinglePut(input, sources, options)\n  }\n\n  const download = ((\n    input: string | readonly string[] | AthenaStorageFileDownloadInput,\n    queryOrOptions?: GetStorageFileUrlQuery | AthenaStorageBinaryCallOptions,\n    maybeOptions?: AthenaStorageBinaryCallOptions,\n  ): Promise<Response | Response[]> => {\n    const { fileIds, query, options } = normalizeDownloadArgs(input, queryOrOptions, maybeOptions)\n    const downloads = fileIds.map(fileId => base.getStorageFileProxy(fileId, query, options))\n    return Array.isArray(input) || (isRecord(input) && Array.isArray(input.fileIds))\n      ? Promise.all(downloads)\n      : downloads[0]\n  }) as AthenaStorageFileModule['download']\n\n  const deleteFile = ((\n    input: string | readonly string[],\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationResponse | StorageFileMutationResponse[]> => {\n    if (Array.isArray(input)) {\n      return Promise.all(input.map(fileId => base.deleteStorageFile(fileId, options)))\n    }\n    return base.deleteStorageFile(input as string, options)\n  }) as AthenaStorageFileModule['delete']\n\n  return {\n    upload,\n    uploadMultipart,\n    download,\n\n    list(input, options) {\n      const prefix = resolveStoragePath(input.prefix ?? '', input, options, config)\n      return base.listStorageFiles(\n        {\n          s3_id: input.s3_id,\n          prefix,\n        },\n        options,\n      )\n    },\n\n    delete: deleteFile,\n  }\n}\n\nexport function resolveStoragePath(\n  path: string,\n  input: {\n    prefixPath?: AthenaStoragePrefixPath\n    vars?: AthenaStorageTemplateVars\n    env?: AthenaStorageEnv\n    organization_id?: string\n    organizationId?: string\n    user_id?: string\n    userId?: string\n    resource_id?: string\n    resourceId?: string\n  },\n  options: AthenaStorageCallOptions | undefined,\n  config: AthenaStorageFileConfig = {},\n): string {\n  const context = createPathContext(input, options, config)\n  const prefixPath = input.prefixPath ?? config.prefixPath\n  const prefix = typeof prefixPath === 'function'\n    ? prefixPath(context)\n    : prefixPath\n  return joinStoragePath(renderStorageTemplate(prefix ?? '', context), renderStorageTemplate(path, context))\n}\n\nfunction resolveUploadStorageKey(\n  input: AthenaStorageFileUploadInput,\n  source: NormalizedUploadSource,\n  index: number,\n  options: AthenaStorageCallOptions | undefined,\n  config: AthenaStorageFileConfig,\n): string {\n  const explicitKey = input.storage_key ?? input.storageKey\n  const keyTemplate = input.storageKeyTemplate\n  const fallbackName = source.fileName\n  const context = createPathContext(input, options, config)\n  const key = keyTemplate\n    ? renderStorageTemplate(keyTemplate, {\n        ...context,\n        vars: {\n          ...context.vars,\n          index,\n          fileName: source.fileName,\n          name: source.fileName,\n        },\n      })\n    : explicitKey ?? fallbackName\n  return resolveStoragePath(key, input, options, config)\n}\n\nfunction normalizeUploadSources(input: AthenaStorageFileUploadInput): NormalizedUploadSource[] {\n  const files = toArray(input.files)\n  if (files.length === 0) {\n    throw new Error('athena.storage.file.upload requires at least one file')\n  }\n  return files.map((source, index) => {\n    const fileName = input.fileName ?? sourceName(source) ?? `file-${index + 1}`\n    const sizeBytes = sourceSize(source)\n    const contentType = input.content_type ?? input.mime_type ?? sourceContentType(source)\n    return {\n      source,\n      fileName,\n      sizeBytes,\n      contentType,\n    }\n  })\n}\n\nfunction validateUploadConstraints(sources: readonly NormalizedUploadSource[], input: AthenaStorageFileUploadInput): void {\n  const maxFiles = input.maxFiles ?? 1\n  if (sources.length > maxFiles) {\n    throw new Error(`athena.storage.file.upload accepts at most ${maxFiles} file${maxFiles === 1 ? '' : 's'} for this call`)\n  }\n\n  const maxFileSizeBytes = input.maxFileSizeBytes ?? (\n    input.maxFileSizeMb === undefined ? undefined : Math.floor(input.maxFileSizeMb * 1024 * 1024)\n  )\n  if (maxFileSizeBytes !== undefined) {\n    const tooLarge = sources.find(source => source.sizeBytes > maxFileSizeBytes)\n    if (tooLarge) {\n      throw new Error(`athena.storage.file.upload rejected ${tooLarge.fileName}: file exceeds ${maxFileSizeBytes} bytes`)\n    }\n  }\n\n  const allowedExtensions = normalizeExtensions(input.allowedExtensions ?? input.extensions)\n  if (allowedExtensions.size > 0) {\n    const invalid = sources.find(source => !allowedExtensions.has(fileExtension(source.fileName)))\n    if (invalid) {\n      throw new Error(`athena.storage.file.upload rejected ${invalid.fileName}: extension is not allowed`)\n    }\n  }\n}\n\nasync function putUploadBody(\n  url: string,\n  uploadHeaders: Record<string, string>,\n  source: NormalizedUploadSource,\n  input: AthenaStorageFileUploadInput,\n  options: AthenaStorageCallOptions | undefined,\n  onProgress: (progress: { loaded: number }) => void,\n): Promise<Response> {\n  const headers = new Headers(uploadHeaders)\n  new Headers(input.uploadHeaders).forEach((value, key) => headers.set(key, value))\n  if (source.contentType && !headers.has('Content-Type')) {\n    headers.set('Content-Type', source.contentType)\n  }\n  if (typeof XMLHttpRequest !== 'undefined') {\n    return putUploadBodyWithXhr(url, source, headers, options, onProgress)\n  }\n  onProgress({ loaded: 0 })\n  const response = await fetch(url, {\n    method: 'PUT',\n    headers,\n    body: source.source as RequestInit['body'],\n    signal: options?.signal,\n  })\n  if (!response.ok) {\n    throw new Error(`athena.storage.file.upload failed with status ${response.status}`)\n  }\n  onProgress({ loaded: source.sizeBytes })\n  return response\n}\n\nfunction putUploadBodyWithXhr(\n  url: string,\n  source: NormalizedUploadSource,\n  headers: Headers,\n  options: AthenaStorageCallOptions | undefined,\n  onProgress: (progress: { loaded: number }) => void,\n): Promise<Response> {\n  const Xhr = XMLHttpRequest\n  if (Xhr === undefined) {\n    return Promise.reject(new Error('athena.storage.file.upload requires XMLHttpRequest in this runtime'))\n  }\n  return new Promise((resolve, reject) => {\n    const xhr = new Xhr()\n    const abort = () => xhr.abort()\n    xhr.open('PUT', url)\n    headers.forEach((value, key) => xhr.setRequestHeader(key, value))\n    xhr.upload.onprogress = (event: AthenaStorageXhrProgressEvent) => {\n      onProgress({ loaded: event.loaded })\n    }\n    xhr.onload = () => {\n      if (options?.signal) {\n        options.signal.removeEventListener('abort', abort)\n      }\n      if (xhr.status < 200 || xhr.status >= 300) {\n        reject(new Error(`athena.storage.file.upload failed with status ${xhr.status}`))\n        return\n      }\n      onProgress({ loaded: source.sizeBytes })\n      resolve(new Response(xhr.response as ConstructorParameters<typeof Response>[0], {\n        status: xhr.status,\n        statusText: xhr.statusText,\n        headers: parseXhrHeaders(xhr.getAllResponseHeaders()),\n      }))\n    }\n    xhr.onerror = () => {\n      if (options?.signal) {\n        options.signal.removeEventListener('abort', abort)\n      }\n      reject(new Error('athena.storage.file.upload failed with a network error'))\n    }\n    xhr.onabort = () => {\n      if (options?.signal) {\n        options.signal.removeEventListener('abort', abort)\n      }\n      reject(new DOMException('Upload aborted', 'AbortError'))\n    }\n    if (options?.signal) {\n      if (options.signal.aborted) {\n        abort()\n        return\n      }\n      options.signal.addEventListener('abort', abort, { once: true })\n    }\n    xhr.send(source.source)\n  })\n}\n\nfunction normalizeDownloadArgs(\n  input: string | readonly string[] | AthenaStorageFileDownloadInput,\n  queryOrOptions?: GetStorageFileUrlQuery | AthenaStorageBinaryCallOptions,\n  maybeOptions?: AthenaStorageBinaryCallOptions,\n): {\n  fileIds: string[]\n  query?: GetStorageFileUrlQuery\n  options?: AthenaStorageBinaryCallOptions\n} {\n  if (typeof input === 'string') {\n    return { fileIds: [input], query: queryOrOptions as GetStorageFileUrlQuery | undefined, options: maybeOptions }\n  }\n  if (Array.isArray(input)) {\n    return { fileIds: [...input], query: queryOrOptions as GetStorageFileUrlQuery | undefined, options: maybeOptions }\n  }\n  const downloadInput = input as AthenaStorageFileDownloadInput\n  const { fileId, fileIds, ...query } = downloadInput\n  return {\n    fileIds: fileIds ? [...fileIds] : fileId ? [fileId] : [],\n    query,\n    options: queryOrOptions as AthenaStorageBinaryCallOptions | undefined,\n  }\n}\n\nfunction createPathContext(\n  input: {\n    vars?: AthenaStorageTemplateVars\n    env?: AthenaStorageEnv\n    organization_id?: string\n    organizationId?: string\n    user_id?: string\n    userId?: string\n    resource_id?: string\n    resourceId?: string\n  },\n  options: AthenaStorageCallOptions | undefined,\n  config: AthenaStorageFileConfig,\n): AthenaStoragePathContext {\n  const organizationId = input.organizationId ?? input.organization_id ?? options?.organizationId ?? undefined\n  const userId = input.userId ?? input.user_id ?? options?.userId ?? undefined\n  const resourceId = input.resourceId ?? input.resource_id ?? undefined\n  const vars = {\n    ...(config.vars ?? {}),\n    ...(input.vars ?? {}),\n  }\n  if (organizationId !== undefined) {\n    vars.organizationId = organizationId\n    vars.organization_id = organizationId\n  }\n  if (userId !== undefined) {\n    vars.userId = userId\n    vars.user_id = userId\n  }\n  if (resourceId !== undefined) {\n    vars.resourceId = resourceId\n    vars.resource_id = resourceId\n  }\n  return {\n    vars,\n    env: {\n      ...readProcessEnv(),\n      ...(config.env ?? {}),\n      ...(input.env ?? {}),\n    },\n    organizationId,\n    organization_id: organizationId,\n    userId,\n    user_id: userId,\n    resourceId,\n    resource_id: resourceId,\n  }\n}\n\nfunction renderStorageTemplate(template: string, context: AthenaStoragePathContext): string {\n  return template.replace(/\\$\\{([^}]+)\\}|\\{([^}]+)\\}/g, (_match, shellToken: string | undefined, braceToken: string | undefined) => {\n    const token = (shellToken ?? braceToken ?? '').trim()\n    if (!token) return ''\n    const value = resolveTemplateToken(token, context)\n    return value === undefined || value === null ? '' : String(value)\n  })\n}\n\nfunction resolveTemplateToken(token: string, context: AthenaStoragePathContext): AthenaStorageTemplateValue {\n  if (token.startsWith('env.')) {\n    return context.env[token.slice(4)]\n  }\n  if (token in context.vars) {\n    return context.vars[token]\n  }\n  return context.env[token]\n}\n\nfunction joinStoragePath(...parts: readonly string[]): string {\n  return parts\n    .map(part => part.trim().replace(/^\\/+|\\/+$/g, ''))\n    .filter(Boolean)\n    .join('/')\n}\n\nfunction toArray(files: AthenaStorageFileUploadInput['files']): AthenaStorageUploadSource[] {\n  if (isUploadSource(files)) return [files]\n  return Array.from(files)\n}\n\nfunction isUploadSource(value: unknown): value is AthenaStorageUploadSource {\n  return value instanceof Blob || value instanceof ArrayBuffer || value instanceof Uint8Array\n}\n\nfunction sourceName(source: AthenaStorageUploadSource): string | undefined {\n  return isRecord(source) && typeof source.name === 'string' && source.name.trim()\n    ? source.name.trim()\n    : undefined\n}\n\nfunction sourceSize(source: AthenaStorageUploadSource): number {\n  if (source instanceof Blob) return source.size\n  return source.byteLength\n}\n\nfunction sourceContentType(source: AthenaStorageUploadSource): string | undefined {\n  return source instanceof Blob && source.type.trim() ? source.type.trim() : undefined\n}\n\nfunction normalizeExtensions(extensions: readonly string[] | undefined): Set<string> {\n  return new Set((extensions ?? []).map(extension => extension.replace(/^\\./, '').toLowerCase()).filter(Boolean))\n}\n\nfunction fileExtension(fileName: string): string {\n  const lastDot = fileName.lastIndexOf('.')\n  return lastDot === -1 ? '' : fileName.slice(lastDot + 1).toLowerCase()\n}\n\nfunction createProgressSnapshot(\n  phase: AthenaStorageUploadProgress['phase'],\n  sources: readonly NormalizedUploadSource[],\n  fileIndex: number,\n  loaded: number,\n  aggregateLoaded: number,\n  multipartInfo?: AthenaStorageUploadProgress['multipart'],\n): AthenaStorageUploadProgress {\n  const total = sources[fileIndex]?.sizeBytes ?? 0\n  const aggregateTotal = sources.reduce((totalBytes, source) => totalBytes + source.sizeBytes, 0)\n  return {\n    phase,\n    fileIndex,\n    fileCount: sources.length,\n    fileName: sources[fileIndex]?.fileName ?? '',\n    loaded,\n    total,\n    percent: total > 0 ? Math.round((loaded / total) * 100) : 100,\n    aggregateLoaded,\n    aggregateTotal,\n    aggregatePercent: aggregateTotal > 0 ? Math.round((aggregateLoaded / aggregateTotal) * 100) : 100,\n    ...(multipartInfo ? { multipart: multipartInfo } : {}),\n  }\n}\n\nfunction sliceUploadSource(\n  source: AthenaStorageUploadSource,\n  start: number,\n  end: number,\n): AthenaStorageUploadSource {\n  if (source instanceof Blob) {\n    return source.slice(start, end)\n  }\n  if (source instanceof ArrayBuffer) {\n    return source.slice(start, end)\n  }\n  return source.slice(start, end)\n}\n\nfunction readStringField(value: unknown, keys: readonly string[]): string {\n  if (!isRecord(value)) return ''\n  for (const key of keys) {\n    const candidate = value[key]\n    if (typeof candidate === 'string' && candidate.trim()) {\n      return candidate.trim()\n    }\n  }\n  return ''\n}\n\nfunction readHeadersField(value: unknown): Record<string, string> {\n  if (!isRecord(value)) return {}\n  const headers = value.headers\n  if (!isRecord(headers)) return {}\n  const result: Record<string, string> = {}\n  for (const [key, headerValue] of Object.entries(headers)) {\n    if (typeof headerValue === 'string') {\n      result[key] = headerValue\n    }\n  }\n  return result\n}\n\nfunction extractEtag(response: Response): string {\n  const etag = response.headers.get('etag') ?? response.headers.get('ETag') ?? ''\n  return etag.trim()\n}\n\nfunction sum(values: readonly number[]): number {\n  return values.reduce((total, value) => total + value, 0)\n}\n\nfunction parseXhrHeaders(raw: string): Headers {\n  const headers = new Headers()\n  for (const line of raw.trim().split(/[\\r\\n]+/)) {\n    const index = line.indexOf(':')\n    if (index === -1) continue\n    headers.set(line.slice(0, index).trim(), line.slice(index + 1).trim())\n  }\n  return headers\n}\n\nfunction readProcessEnv(): AthenaStorageEnv {\n  const processLike = (globalThis as { process?: { env?: AthenaStorageEnv } }).process\n  return processLike?.env ?? {}\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object'\n}\n","/**\n * Admin backup surface exposed under `client.storage.backup.*`.\n *\n * Routes live at `/admin/backups*` (admin / elevated key). Archives land in the\n * server-configured S3 or R2 profile (`ATHENA_BACKUP_S3_*` including provider + account_id).\n */\n\nimport type { AthenaGatewayClient } from '../gateway/client.ts'\nimport type {\n  AthenaGatewayEndpointPath,\n  AthenaGatewayMethod,\n} from '../gateway/types.ts'\nimport { buildAthenaGatewayUrl, normalizeAthenaGatewayBaseUrl } from '../gateway/url.ts'\nimport type { AthenaStorageCallOptions, AthenaStorageClientConfig } from './module.ts'\n\n/** Avoid circular import with module.ts — shape matches AthenaStorageError enough for callers. */\nfunction backupError(\n  message: string,\n  status: number,\n  endpoint: string,\n  method: string,\n  cause?: unknown,\n  raw?: unknown,\n): never {\n  const error = new Error(message) as Error & {\n    name: string\n    code: string\n    status: number\n    endpoint: string\n    method: string\n    cause?: unknown\n    raw?: unknown\n  }\n  error.name = 'AthenaStorageError'\n  error.code = status === 0 ? 'NETWORK_ERROR' : 'HTTP_ERROR'\n  error.status = status\n  error.endpoint = endpoint\n  error.method = method\n  error.cause = cause\n  error.raw = raw\n  throw error\n}\n\nexport type BackupRecoveryStrategy = 'none' | 'repair_missing_role_oids'\n\nexport interface StorageBackupRecord {\n  job_id: number\n  s3_bucket: string\n  s3_key: string\n  /** Alias of s3_key for convenience */\n  key: string\n  client_name: string\n  label?: string | null\n  size_bytes: number\n  execution_daemon_id?: string | null\n  completed_at: string\n}\n\nexport interface StorageBackupListPage {\n  backups: StorageBackupRecord[]\n  next_cursor: string | null\n}\n\nexport interface StorageBackupListQuery {\n  client_name?: string\n  cursor?: string | null\n  limit?: number\n}\n\nexport interface StorageBackupCreateRequest {\n  client_name: string\n  label?: string\n  pg_uri?: string\n  recovery_strategy?: BackupRecoveryStrategy\n}\n\nexport interface StorageBackupQueuedJob {\n  job_id: number\n  client_name: string\n  status: string\n  key?: string\n}\n\nexport interface StorageBackupRestoreRequest {\n  client_name: string\n  pg_uri?: string\n}\n\nexport interface StorageBackupJob {\n  id: number\n  job_type: string\n  client_name?: string | null\n  status: string\n  progress_pct?: number | null\n  progress_stage?: string | null\n  s3_bucket?: string | null\n  s3_key?: string | null\n  label?: string | null\n  error_message?: string | null\n  created_at?: string\n  updated_at?: string\n  completed_at?: string | null\n  [key: string]: unknown\n}\n\nexport interface StorageBackupSchedule {\n  id: number\n  client_name: string\n  frequency?: string\n  enabled?: boolean\n  label?: string | null\n  [key: string]: unknown\n}\n\nexport interface StorageBackupScheduleCreateRequest {\n  client_name: string\n  frequency: string\n  time_of_day?: string\n  day_of_week?: number\n  day_of_month?: number\n  label?: string\n  execution_daemon_id?: string\n  enabled?: boolean\n  [key: string]: unknown\n}\n\nexport interface AthenaStorageBackupNamespace {\n  /** `GET /admin/backups` */\n  list(\n    query?: StorageBackupListQuery,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageBackupListPage>\n  /** `POST /admin/backups` — queue a backup job */\n  create(\n    input: StorageBackupCreateRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageBackupQueuedJob>\n  /** `POST /admin/backups/{key}/restore` */\n  restore(\n    key: string,\n    input: StorageBackupRestoreRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageBackupQueuedJob>\n  /** `DELETE /admin/backups/{key}` */\n  delete(key: string, options?: AthenaStorageCallOptions): Promise<void>\n  /** Build a browser download URL for `GET /admin/backups/{key}/download` */\n  downloadUrl(key: string, options?: { apiKey?: string }): string\n  jobs: {\n    list(\n      query?: { limit?: number; status?: string; client_name?: string },\n      options?: AthenaStorageCallOptions,\n    ): Promise<StorageBackupJob[]>\n    get(jobId: number | string, options?: AthenaStorageCallOptions): Promise<StorageBackupJob>\n    cancel(jobId: number | string, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n    delete(jobId: number | string, options?: AthenaStorageCallOptions): Promise<void>\n    /** Presigned/console open link for the job archive object (S3 or R2) */\n    openObjectUrl(jobId: number | string, options?: AthenaStorageCallOptions): Promise<string>\n  }\n  schedules: {\n    list(options?: AthenaStorageCallOptions): Promise<StorageBackupSchedule[]>\n    create(\n      input: StorageBackupScheduleCreateRequest,\n      options?: AthenaStorageCallOptions,\n    ): Promise<StorageBackupSchedule>\n    update(\n      id: number | string,\n      input: Partial<StorageBackupScheduleCreateRequest>,\n      options?: AthenaStorageCallOptions,\n    ): Promise<StorageBackupSchedule>\n    delete(id: number | string, options?: AthenaStorageCallOptions): Promise<void>\n  }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction asPath(path: string): AthenaGatewayEndpointPath {\n  return path as AthenaGatewayEndpointPath\n}\n\nfunction appendQuery(path: string, query?: object): string {\n  if (!query) return path\n  const params = new URLSearchParams()\n  for (const [key, value] of Object.entries(query)) {\n    if (value === undefined || value === null || value === '') continue\n    params.set(key, String(value))\n  }\n  const text = params.toString()\n  return text ? `${path}?${text}` : path\n}\n\nfunction unwrapAthenaData<T>(payload: unknown): T {\n  if (isRecord(payload) && 'data' in payload) {\n    return payload.data as T\n  }\n  return payload as T\n}\n\nfunction requireKey(key: string): string {\n  const trimmed = key.trim()\n  if (!trimmed || trimmed === 'undefined' || trimmed === 'null') {\n    backupError('Backup object key is required', 400, '/admin/backups/{key}', 'DELETE')\n  }\n  return trimmed\n}\n\nfunction resolveMessage(payload: unknown, fallback: string): string {\n  if (isRecord(payload)) {\n    const message = payload.message ?? payload.error ?? payload.details\n    if (typeof message === 'string' && message.trim()) return message.trim()\n  }\n  if (typeof payload === 'string' && payload.trim()) return payload.trim()\n  return fallback\n}\n\nasync function callBackupEndpoint<T>(\n  gateway: AthenaGatewayClient,\n  path: string,\n  method: AthenaGatewayMethod,\n  payload: unknown | undefined,\n  options: AthenaStorageCallOptions | undefined,\n  runtime: AthenaStorageClientConfig | undefined,\n): Promise<T> {\n  const resolvedOptions = await gateway.resolveCallOptions(options)\n  const endpoint = asPath(path)\n  const baseUrl = resolvedOptions?.baseUrl\n    ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n    : gateway.baseUrl\n  const url = buildAthenaGatewayUrl(baseUrl, endpoint)\n  void runtime\n  const headers = gateway.buildHeaders(resolvedOptions)\n  const init: RequestInit = {\n    method,\n    headers,\n    signal: resolvedOptions?.signal,\n  }\n  if (payload !== undefined && method !== 'GET') {\n    init.body = JSON.stringify(payload)\n  }\n\n  let response: Response\n  try {\n    response = await fetch(url, init)\n  } catch (error) {\n    backupError(\n      error instanceof Error ? error.message : 'Backup network error',\n      0,\n      path,\n      method,\n      error,\n    )\n  }\n\n  const rawText = await response.text()\n  let parsed: unknown = null\n  if (rawText) {\n    try {\n      parsed = JSON.parse(rawText)\n    } catch {\n      parsed = rawText\n    }\n  }\n\n  if (!response.ok) {\n    backupError(\n      resolveMessage(parsed, `Backup ${method} ${path} failed (${response.status})`),\n      response.status,\n      path,\n      method,\n      undefined,\n      parsed,\n    )\n  }\n\n  return unwrapAthenaData<T>(parsed)\n}\n\n/**\n * Create the `storage.backup` namespace bound to an Athena gateway client.\n */\nexport function createStorageBackupModule(\n  gateway: AthenaGatewayClient,\n  runtimeOptions?: AthenaStorageClientConfig,\n): AthenaStorageBackupNamespace {\n  const resolvedBaseUrl = () => String(gateway.baseUrl ?? '').replace(/\\/+$/, '')\n\n  return {\n    async list(query, options) {\n      const path = appendQuery('/admin/backups', {\n        limit: query?.limit ?? 10,\n        client_name: query?.client_name,\n        cursor: query?.cursor ?? undefined,\n      })\n      const data = await callBackupEndpoint<{\n        backups?: Array<Omit<StorageBackupRecord, 'key'> & { key?: string }>\n        next_cursor?: string | null\n      }>(gateway, path, 'GET', undefined, options, runtimeOptions)\n\n      const backups = (data?.backups ?? []).map((row) => ({\n        ...row,\n        key: row.key ?? row.s3_key,\n      }))\n      return {\n        backups,\n        next_cursor: data?.next_cursor ?? null,\n      }\n    },\n\n    async create(input, options) {\n      const data = await callBackupEndpoint<{\n        job_id?: number\n        client_name?: string\n        status?: string\n      }>(gateway, '/admin/backups', 'POST', input, options, runtimeOptions)\n      return {\n        job_id: Number(data?.job_id ?? 0),\n        client_name: String(data?.client_name ?? input.client_name),\n        status: String(data?.status ?? 'pending'),\n      }\n    },\n\n    async restore(key, input, options) {\n      const backupKey = requireKey(key)\n      const path = `/admin/backups/${encodeURIComponent(backupKey)}/restore`\n      const data = await callBackupEndpoint<{\n        job_id?: number\n        key?: string\n        client_name?: string\n        status?: string\n      }>(gateway, path, 'POST', input, options, runtimeOptions)\n      return {\n        job_id: Number(data?.job_id ?? 0),\n        client_name: String(data?.client_name ?? input.client_name),\n        status: String(data?.status ?? 'pending'),\n        key: String(data?.key ?? backupKey),\n      }\n    },\n\n    async delete(key, options) {\n      const backupKey = requireKey(key)\n      await callBackupEndpoint(\n        gateway,\n        `/admin/backups/${encodeURIComponent(backupKey)}`,\n        'DELETE',\n        undefined,\n        options,\n        runtimeOptions,\n      )\n    },\n\n    downloadUrl(key, options) {\n      const backupKey = requireKey(key)\n      const base = `${resolvedBaseUrl()}/admin/backups/${encodeURIComponent(backupKey)}/download`\n      return options?.apiKey\n        ? `${base}?api_key=${encodeURIComponent(options.apiKey)}`\n        : base\n    },\n\n    jobs: {\n      async list(query, options) {\n        const path = appendQuery('/admin/backups/jobs', query ?? {})\n        const data = await callBackupEndpoint<\n          StorageBackupJob[] | { jobs?: StorageBackupJob[] }\n        >(gateway, path, 'GET', undefined, options, runtimeOptions)\n        if (Array.isArray(data)) return data\n        if (isRecord(data) && Array.isArray(data.jobs)) return data.jobs\n        return []\n      },\n      async get(jobId, options) {\n        return callBackupEndpoint(\n          gateway,\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}`,\n          'GET',\n          undefined,\n          options,\n          runtimeOptions,\n        )\n      },\n      async cancel(jobId, options) {\n        return callBackupEndpoint(\n          gateway,\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}/cancel`,\n          'POST',\n          {},\n          options,\n          runtimeOptions,\n        )\n      },\n      async delete(jobId, options) {\n        await callBackupEndpoint(\n          gateway,\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}`,\n          'DELETE',\n          undefined,\n          options,\n          runtimeOptions,\n        )\n      },\n      async openObjectUrl(jobId, options) {\n        const data = await callBackupEndpoint<{ url?: string }>(\n          gateway,\n          `/admin/backups/jobs/${encodeURIComponent(String(jobId))}/s3-open`,\n          'GET',\n          undefined,\n          options,\n          runtimeOptions,\n        )\n        return String(data?.url ?? '')\n      },\n    },\n\n    schedules: {\n      async list(options) {\n        const data = await callBackupEndpoint<\n          StorageBackupSchedule[] | { schedules?: StorageBackupSchedule[] }\n        >(gateway, '/admin/backups/schedules', 'GET', undefined, options, runtimeOptions)\n        if (Array.isArray(data)) return data\n        if (isRecord(data) && Array.isArray(data.schedules)) return data.schedules\n        return []\n      },\n      async create(input, options) {\n        return callBackupEndpoint(\n          gateway,\n          '/admin/backups/schedules',\n          'POST',\n          input,\n          options,\n          runtimeOptions,\n        )\n      },\n      async update(id, input, options) {\n        return callBackupEndpoint(\n          gateway,\n          `/admin/backups/schedules/${encodeURIComponent(String(id))}`,\n          'PATCH',\n          input,\n          options,\n          runtimeOptions,\n        )\n      },\n      async delete(id, options) {\n        await callBackupEndpoint(\n          gateway,\n          `/admin/backups/schedules/${encodeURIComponent(String(id))}`,\n          'DELETE',\n          undefined,\n          options,\n          runtimeOptions,\n        )\n      },\n    },\n  }\n}\n","import type { AthenaGatewayClient } from '../gateway/client.ts'\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaGatewayEndpointPath,\n  AthenaGatewayErrorCode,\n  AthenaGatewayMethod,\n} from '../gateway/types.ts'\nimport type {\n  AthenaErrorCategory,\n  AthenaErrorCode,\n  AthenaErrorKind,\n  NormalizedAthenaError,\n} from '../auxiliaries.ts'\nimport { normalizeAthenaError } from '../auxiliaries.ts'\nimport { isAthenaGatewayError } from '../gateway/errors.ts'\nimport { buildAthenaGatewayUrl, normalizeAthenaGatewayBaseUrl } from '../gateway/url.ts'\nimport { createStorageFileModule } from './file.ts'\nimport type { AthenaStorageFileConfig, AthenaStorageFileModule } from './file.ts'\nimport { createStorageBackupModule } from './backup.ts'\nimport type { AthenaStorageBackupNamespace } from './backup.ts'\n\nexport type {\n  AthenaStorageBackupNamespace,\n  BackupRecoveryStrategy,\n  StorageBackupCreateRequest,\n  StorageBackupJob,\n  StorageBackupListPage,\n  StorageBackupListQuery,\n  StorageBackupQueuedJob,\n  StorageBackupRecord,\n  StorageBackupRestoreRequest,\n  StorageBackupSchedule,\n  StorageBackupScheduleCreateRequest,\n} from './backup.ts'\n\nexport const storageSdkManifest = {\n  namespace: 'storage',\n  basePath: '/storage',\n  envelopeKinds: {\n    raw: 'response body is the payload',\n    athena: 'response body is { status, message, data }',\n  },\n  methods: [\n    {\n      name: 'listStorageCatalogs',\n      method: 'GET',\n      path: '/storage/catalogs',\n      responseEnvelope: 'raw',\n      responseType: '{ data: S3CatalogItem[] }',\n    },\n    {\n      name: 'createStorageCatalog',\n      method: 'POST',\n      path: '/storage/catalogs',\n      requestType: 'CreateStorageCatalogRequest',\n      responseEnvelope: 'raw',\n      responseType: 'S3CatalogItem',\n    },\n    {\n      name: 'updateStorageCatalog',\n      method: 'PATCH',\n      path: '/storage/catalogs/{id}',\n      pathParams: ['id'],\n      requestType: 'UpdateStorageCatalogRequest',\n      responseEnvelope: 'raw',\n      responseType: 'S3CatalogItem',\n    },\n    {\n      name: 'deleteStorageCatalog',\n      method: 'DELETE',\n      path: '/storage/catalogs/{id}',\n      pathParams: ['id'],\n      responseEnvelope: 'raw',\n      responseType: '{ id: string; deleted: boolean }',\n    },\n    {\n      name: 'listStorageCredentials',\n      method: 'GET',\n      path: '/storage/credentials',\n      responseEnvelope: 'raw',\n      responseType: '{ data: S3CredentialListItem[] }',\n    },\n    {\n      name: 'backup.list',\n      method: 'GET',\n      path: '/admin/backups',\n      responseEnvelope: 'athena',\n      responseType: 'StorageBackupListPage',\n      note: 'Admin backup archives on server S3/R2 profile',\n    },\n    {\n      name: 'backup.create',\n      method: 'POST',\n      path: '/admin/backups',\n      requestType: 'StorageBackupCreateRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageBackupQueuedJob',\n    },\n    {\n      name: 'backup.restore',\n      method: 'POST',\n      path: '/admin/backups/{key}/restore',\n      pathParams: ['key'],\n      requestType: 'StorageBackupRestoreRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageBackupQueuedJob',\n    },\n    {\n      name: 'backup.delete',\n      method: 'DELETE',\n      path: '/admin/backups/{key}',\n      pathParams: ['key'],\n      responseEnvelope: 'athena',\n      responseType: 'void',\n    },\n    {\n      name: 'backup.jobs.list',\n      method: 'GET',\n      path: '/admin/backups/jobs',\n      responseEnvelope: 'athena',\n      responseType: 'StorageBackupJob[]',\n    },\n    {\n      name: 'backup.schedules.list',\n      method: 'GET',\n      path: '/admin/backups/schedules',\n      responseEnvelope: 'athena',\n      responseType: 'StorageBackupSchedule[]',\n    },\n    {\n      name: 'createStorageUploadUrl',\n      method: 'POST',\n      path: '/storage/files/upload-url',\n      requestType: 'CreateStorageUploadUrlRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageUploadUrlResponse',\n    },\n    {\n      name: 'createStorageUploadUrls',\n      method: 'POST',\n      path: '/storage/files/upload-urls',\n      requestType: 'CreateStorageUploadUrlsRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageBatchUploadUrlResponse',\n    },\n    {\n      name: 'listStorageFiles',\n      method: 'POST',\n      path: '/storage/files/list',\n      requestType: 'ListStorageFilesRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageListFilesResponse',\n    },\n    {\n      name: 'getStorageFile',\n      method: 'GET',\n      path: '/storage/files/{file_id}',\n      pathParams: ['file_id'],\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'getStorageFileUrl',\n      method: 'GET',\n      path: '/storage/files/{file_id}/url',\n      pathParams: ['file_id'],\n      queryParams: ['purpose'],\n      responseEnvelope: 'athena',\n      responseType: 'PresignedFileUrlResponse',\n    },\n    {\n      name: 'getStorageFileProxy',\n      method: 'GET',\n      path: '/storage/files/{file_id}/proxy',\n      pathParams: ['file_id'],\n      queryParams: ['purpose'],\n      responseEnvelope: 'raw',\n      responseType: 'Response',\n      binary: true,\n    },\n    {\n      name: 'updateStorageFile',\n      method: 'PATCH',\n      path: '/storage/files/{file_id}',\n      pathParams: ['file_id'],\n      requestType: 'UpdateStorageFileRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'deleteStorageFile',\n      method: 'DELETE',\n      path: '/storage/files/{file_id}',\n      pathParams: ['file_id'],\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'setStorageFileVisibility',\n      method: 'PATCH',\n      path: '/storage/files/{file_id}/visibility',\n      pathParams: ['file_id'],\n      requestType: 'SetStorageFileVisibilityRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'postStorageFileVisibility',\n      method: 'POST',\n      path: '/storage/files/{file_id}/visibility',\n      pathParams: ['file_id'],\n      requestType: 'SetStorageFileVisibilityRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'setManyStorageFileVisibility',\n      method: 'POST',\n      path: '/storage/files/visibility-many',\n      requestType: 'SetManyStorageFileVisibilityRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationManyResponse',\n    },\n    {\n      name: 'deleteStorageFolder',\n      method: 'POST',\n      path: '/storage/folders/delete',\n      requestType: 'DeleteStorageFolderRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFolderMutationResponse',\n    },\n    {\n      name: 'moveStorageFolder',\n      method: 'POST',\n      path: '/storage/folders/move',\n      requestType: 'MoveStorageFolderRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFolderMutationResponse',\n    },\n    {\n      name: 'searchStorageFiles',\n      method: 'POST',\n      path: '/storage/files/search',\n      requestType: 'SearchStorageFilesRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageListFilesResponse',\n    },\n    {\n      name: 'confirmStorageUpload',\n      method: 'POST',\n      path: '/storage/files/{file_id}/confirm-upload',\n      pathParams: ['file_id'],\n      requestType: 'ConfirmStorageUploadRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'uploadStorageFileBinary',\n      method: 'PUT',\n      path: '/storage/files/{file_id}/upload',\n      pathParams: ['file_id'],\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n      binary: true,\n    },\n    {\n      name: 'copyStorageFile',\n      method: 'POST',\n      path: '/storage/files/{file_id}/copy',\n      pathParams: ['file_id'],\n      requestType: 'CopyStorageFileRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'deleteManyStorageFiles',\n      method: 'POST',\n      path: '/storage/files/delete-many',\n      requestType: 'DeleteManyStorageFilesRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationManyResponse',\n    },\n    {\n      name: 'updateManyStorageFiles',\n      method: 'POST',\n      path: '/storage/files/update-many',\n      requestType: 'UpdateManyStorageFilesRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationManyResponse',\n    },\n    {\n      name: 'restoreStorageFile',\n      method: 'POST',\n      path: '/storage/files/{file_id}/restore',\n      pathParams: ['file_id'],\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'purgeStorageFile',\n      method: 'DELETE',\n      path: '/storage/files/{file_id}/purge',\n      pathParams: ['file_id'],\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'getStorageFilePublicUrl',\n      method: 'GET',\n      path: '/storage/files/{file_id}/public-url',\n      pathParams: ['file_id'],\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'getStorageFileProxyUrl',\n      method: 'GET',\n      path: '/storage/files/{file_id}/proxy-url',\n      pathParams: ['file_id'],\n      queryParams: ['purpose'],\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'listStorageFileVersions',\n      method: 'GET',\n      path: '/storage/files/{file_id}/versions',\n      pathParams: ['file_id'],\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'restoreStorageFileVersion',\n      method: 'POST',\n      path: '/storage/files/{file_id}/versions/{version_id}/restore',\n      pathParams: ['file_id', 'version_id'],\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'deleteStorageFileVersion',\n      method: 'DELETE',\n      path: '/storage/files/{file_id}/versions/{version_id}',\n      pathParams: ['file_id', 'version_id'],\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'getStorageFileRetention',\n      method: 'GET',\n      path: '/storage/files/{file_id}/retention',\n      pathParams: ['file_id'],\n      queryParams: ['version_id'],\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'setStorageFileRetention',\n      method: 'POST',\n      path: '/storage/files/{file_id}/retention',\n      pathParams: ['file_id'],\n      requestType: 'StorageFileRetentionRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'listStorageFolders',\n      method: 'POST',\n      path: '/storage/folders/list',\n      requestType: 'ListStorageFoldersRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'treeStorageFolders',\n      method: 'POST',\n      path: '/storage/folders/tree',\n      requestType: 'TreeStorageFoldersRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'listStoragePermissions',\n      method: 'POST',\n      path: '/storage/permissions/list',\n      requestType: 'StoragePermissionListRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StoragePermissionListResponse',\n    },\n    {\n      name: 'grantStoragePermission',\n      method: 'POST',\n      path: '/storage/permissions/grant',\n      requestType: 'StoragePermissionGrantRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'revokeStoragePermission',\n      method: 'POST',\n      path: '/storage/permissions/revoke',\n      requestType: 'StoragePermissionRevokeRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'checkStoragePermission',\n      method: 'POST',\n      path: '/storage/permissions/check',\n      requestType: 'StoragePermissionCheckRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StoragePermissionCheckResponse',\n    },\n    {\n      name: 'listStorageObjects',\n      method: 'POST',\n      path: '/storage/objects',\n      requestType: 'StorageListObjectsRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'headStorageObject',\n      method: 'POST',\n      path: '/storage/objects/head',\n      requestType: 'StorageObjectRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'existsStorageObject',\n      method: 'POST',\n      path: '/storage/objects/exists',\n      requestType: 'StorageObjectRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'validateStorageObject',\n      method: 'POST',\n      path: '/storage/objects/validate',\n      requestType: 'StorageObjectValidateRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'updateStorageObject',\n      method: 'POST',\n      path: '/storage/objects/update',\n      requestType: 'StorageUpdateObjectRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'copyStorageObject',\n      method: 'POST',\n      path: '/storage/objects/copy',\n      requestType: 'StorageObjectCopyRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'getStorageObjectUrl',\n      method: 'POST',\n      path: '/storage/objects/url',\n      requestType: 'StorageObjectRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'getStorageObjectPublicUrl',\n      method: 'POST',\n      path: '/storage/objects/public-url',\n      requestType: 'StorageObjectPublicUrlRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'deleteStorageObject',\n      method: 'POST',\n      path: '/storage/objects/delete',\n      requestType: 'StorageObjectRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'createStorageObjectUploadUrl',\n      method: 'POST',\n      path: '/storage/objects/upload-url',\n      requestType: 'StoragePresignUploadRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'createStorageObjectPostPolicy',\n      method: 'POST',\n      path: '/storage/objects/post-policy',\n      requestType: 'StorageSignedPostPolicyRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'listStorageObjectVersions',\n      method: 'POST',\n      path: '/storage/objects/versions',\n      requestType: 'StorageObjectVersionListRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'restoreStorageObjectVersion',\n      method: 'POST',\n      path: '/storage/objects/versions/restore',\n      requestType: 'StorageObjectVersionMutationRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'deleteStorageObjectVersion',\n      method: 'POST',\n      path: '/storage/objects/versions/delete',\n      requestType: 'StorageObjectVersionMutationRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'createStorageObjectFolder',\n      method: 'POST',\n      path: '/storage/objects/folder',\n      requestType: 'StorageObjectFolderCreateRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'deleteStorageObjectFolder',\n      method: 'POST',\n      path: '/storage/objects/folder/delete',\n      requestType: 'StorageObjectFolderDeleteRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'renameStorageObjectFolder',\n      method: 'POST',\n      path: '/storage/objects/folder/rename',\n      requestType: 'StorageObjectFolderRenameRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'listStorageBuckets',\n      method: 'POST',\n      path: '/storage/buckets/list',\n      requestType: \"Omit<StorageObjectBaseRequest, 'bucket'>\",\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'createStorageBucket',\n      method: 'POST',\n      path: '/storage/buckets/create',\n      requestType: 'StorageObjectBaseRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'deleteStorageBucket',\n      method: 'POST',\n      path: '/storage/buckets/delete',\n      requestType: 'StorageObjectBaseRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'getStorageBucketLifecycle',\n      method: 'POST',\n      path: '/storage/buckets/lifecycle',\n      requestType: 'StorageBucketLifecycleRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'setStorageBucketLifecycle',\n      method: 'POST',\n      path: '/storage/buckets/lifecycle/set',\n      requestType: 'StorageSetBucketLifecycleRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'deleteStorageBucketLifecycle',\n      method: 'POST',\n      path: '/storage/buckets/lifecycle/delete',\n      requestType: 'StorageBucketLifecycleRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'getStorageBucketPolicy',\n      method: 'POST',\n      path: '/storage/buckets/policy',\n      requestType: 'StorageBucketPolicyRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'setStorageBucketPolicy',\n      method: 'POST',\n      path: '/storage/buckets/policy/set',\n      requestType: 'StorageSetBucketPolicyRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'deleteStorageBucketPolicy',\n      method: 'POST',\n      path: '/storage/buckets/policy/delete',\n      requestType: 'StorageBucketPolicyRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'getStorageBucketPublicAccess',\n      method: 'POST',\n      path: '/storage/buckets/public-access',\n      requestType: 'StoragePublicAccessBlockRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'setStorageBucketPublicAccess',\n      method: 'POST',\n      path: '/storage/buckets/public-access/set',\n      requestType: 'StorageSetPublicAccessBlockRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'deleteStorageBucketPublicAccess',\n      method: 'POST',\n      path: '/storage/buckets/public-access/delete',\n      requestType: 'StoragePublicAccessBlockRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'getStorageBucketCors',\n      method: 'POST',\n      path: '/storage/buckets/cors',\n      requestType: 'StorageBucketCorsRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'setStorageBucketCors',\n      method: 'POST',\n      path: '/storage/buckets/cors/set',\n      requestType: 'StorageSetBucketCorsRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'deleteStorageBucketCors',\n      method: 'POST',\n      path: '/storage/buckets/cors/delete',\n      requestType: 'StorageBucketCorsRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'createStorageMultipartUpload',\n      method: 'POST',\n      path: '/storage/multipart/create',\n      requestType: 'StorageMultipartCreateRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'signStorageMultipartPart',\n      method: 'POST',\n      path: '/storage/multipart/sign-part',\n      requestType: 'StorageMultipartSignPartRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'completeStorageMultipartUpload',\n      method: 'POST',\n      path: '/storage/multipart/complete',\n      requestType: 'StorageMultipartCompleteRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageFileMutationResponse',\n    },\n    {\n      name: 'abortStorageMultipartUpload',\n      method: 'POST',\n      path: '/storage/multipart/abort',\n      requestType: 'StorageMultipartAbortRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'listStorageMultipartParts',\n      method: 'POST',\n      path: '/storage/multipart/list-parts',\n      requestType: 'StorageMultipartListPartsRequest',\n      responseEnvelope: 'athena',\n      responseType: 'Record<string, unknown>',\n    },\n    {\n      name: 'listStorageAuditEvents',\n      method: 'POST',\n      path: '/storage/audit/list',\n      requestType: 'StorageAuditQueryRequest',\n      responseEnvelope: 'athena',\n      responseType: 'StorageAuditListResponse',\n    },\n  ],\n} as const\n\nexport interface S3CatalogItem {\n  id: string\n  name: string\n  endpoint?: string | null\n  region?: string | null\n  bucket: string\n  provider: string\n  force_path_style: boolean\n  default_prefix?: string | null\n  public_base_url?: string | null\n  is_active: boolean\n  metadata: Record<string, unknown>\n  created_at: string\n  updated_at: string\n}\n\nexport interface S3CredentialListItem {\n  id: string\n  s3_id: string\n  name: string\n  endpoint?: string | null\n  region?: string | null\n  bucket: string\n  provider: string\n  access_key: string\n  is_active: boolean\n  created_at: string\n  rotated_at?: string | null\n}\n\nexport interface ManagedFileRecord {\n  id: string\n  name: string\n  original_name?: string | null\n  file_name?: string | null\n  url?: string | null\n  bucket: string\n  s3_id?: string | null\n  prefix_path?: string | null\n  size_bytes?: number | null\n  mime_type?: string | null\n  content_type?: string | null\n  resource_id?: string | null\n  organization_id?: string | null\n  created_by_user_id?: string | null\n  uploaded_by_user_id?: string | null\n  checksum_sha256?: string | null\n  metadata: Record<string, unknown>\n  created_at: string\n  updated_at: string\n  storage_key: string\n  extension?: string | null\n  visibility?: 'private' | 'organization' | 'public'\n  is_public: boolean\n  status: string\n  deleted_at?: string | null\n}\n\nexport interface PresignedFileUrlResponse {\n  file_id: string\n  bucket: string\n  storage_key: string\n  purpose: string\n  url: string\n  headers?: Record<string, string>\n  expires_at: string\n  expires_at_epoch_seconds: number\n  expires_in: number\n  cache_hit: boolean\n  cache_layer: string\n}\n\nexport interface StorageServerSideEncryptionOptions {\n  server_side_encryption?: 'AES256' | 'aws:kms' | 'aws:kms:dsse' | (string & {})\n  sse?: 'AES256' | 'aws:kms' | 'aws:kms:dsse' | (string & {})\n  ssekms_key_id?: string\n  kms_key_id?: string\n  bucket_key_enabled?: boolean\n}\n\nexport interface CreateStorageCatalogRequest {\n  name: string\n  /**\n   * S3-compatible API endpoint.\n   * Optional when `provider` is R2 and `account_id` (or `metadata.account_id`) is set;\n   * the Athena server derives `https://{account_id}.r2.cloudflarestorage.com`.\n   */\n  endpoint?: string\n  /**\n   * Region. Optional for R2 (server defaults to `auto` after normalize).\n   */\n  region?: string\n  bucket: string\n  /** Storage provider: `s3` or `r2`; aliases include `aws`, `aws_s3`, `cloudflare_r2`, and `cloudflare-r2`. */\n  provider?: string\n  /**\n   * Cloudflare account ID for R2 catalogs when endpoint is omitted.\n   * Also accepted under `metadata.account_id`.\n   */\n  account_id?: string\n  force_path_style?: boolean\n  default_prefix?: string\n  public_base_url?: string\n  access_key_id: string\n  secret_key: string\n  session_token?: string\n  metadata?: Record<string, unknown>\n}\n\nexport interface UpdateStorageCatalogRequest {\n  name?: string\n  endpoint?: string\n  region?: string\n  bucket?: string\n  provider?: string\n  /** Cloudflare account ID for R2 (merged into metadata / endpoint derivation). */\n  account_id?: string\n  force_path_style?: boolean\n  default_prefix?: string | null\n  public_base_url?: string | null\n  access_key_id?: string\n  secret_key?: string\n  session_token?: string\n  is_active?: boolean\n  metadata?: Record<string, unknown>\n}\n\nexport interface CreateStorageUploadUrlRequest extends StorageServerSideEncryptionOptions {\n  s3_id: string\n  bucket?: string\n  storage_key: string\n  name?: string\n  original_name?: string\n  resource_id?: string\n  mime_type?: string\n  content_type?: string\n  size_bytes?: number\n  file_id?: string\n  public?: boolean\n  visibility?: 'private' | 'organization' | 'public'\n  metadata?: Record<string, unknown>\n}\n\nexport interface CreateStorageUploadUrlsRequest {\n  files: CreateStorageUploadUrlRequest[]\n}\n\nexport interface StorageUploadUrlResponse {\n  file: ManagedFileRecord\n  upload: PresignedFileUrlResponse\n}\n\nexport interface StorageBatchUploadUrlResponse {\n  files: StorageUploadUrlResponse[]\n}\n\nexport interface ListStorageFilesRequest {\n  s3_id: string\n  prefix?: string\n  limit?: number\n  offset?: number\n  metadata?: Record<string, unknown>\n  name?: string\n  resource_id?: string\n  mime_type?: string\n  content_type?: string\n  status?: string\n  visibility?: 'private' | 'organization' | 'public' | (string & {})\n  bucket?: string\n  key_prefix?: string\n}\n\nexport interface StorageListFilesResponse {\n  files: ManagedFileRecord[]\n  count: number\n  total?: number\n  limit?: number\n  offset?: number\n  next_offset?: number | null\n  has_more?: boolean\n}\n\nexport interface UpdateStorageFileRequest {\n  storage_key?: string\n  bucket?: string\n  name?: string\n  file_name?: string\n  original_name?: string\n  resource_id?: string\n  mime_type?: string\n  content_type?: string\n  size_bytes?: number\n  checksum_sha256?: string\n  visibility?: 'private' | 'organization' | 'public' | (string & {})\n  status?: string\n  metadata?: Record<string, unknown>\n}\n\nexport interface SetStorageFileVisibilityRequest {\n  public?: boolean\n  visibility?: 'private' | 'organization' | 'public'\n}\n\nexport interface DeleteStorageFolderRequest {\n  s3_id: string\n  prefix: string\n}\n\nexport interface MoveStorageFolderRequest {\n  s3_id: string\n  from_prefix: string\n  to_prefix: string\n}\n\nexport interface StorageFileMutationResponse {\n  file: ManagedFileRecord\n}\n\nexport interface StorageFolderMutationResponse {\n  s3_id: string\n  prefix: string\n  processed_files: number\n}\n\nexport interface StorageFileMutationManyResponse {\n  files: ManagedFileRecord[]\n  count: number\n}\n\nexport interface StorageFilePermissionRecord {\n  id: string\n  file_id: string\n  principal_type: 'user' | 'organization' | 'team' | 'role'\n  principal_id: string\n  permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\n  granted_by_user_id?: string | null\n  created_at: string\n  expires_at?: string | null\n  revoked_at?: string | null\n  metadata: Record<string, unknown>\n}\n\nexport interface StoragePermissionListResponse {\n  permissions: StorageFilePermissionRecord[]\n  count: number\n}\n\nexport interface StoragePermissionCheckResponse {\n  allowed: boolean\n  permission: string\n}\n\nexport interface StorageAuditEventRecord {\n  id: string\n  operation: string\n  file_id?: string | null\n  s3_id?: string | null\n  bucket?: string | null\n  storage_key?: string | null\n  actor_user_id?: string | null\n  organization_id?: string | null\n  status: 'success' | 'error'\n  error?: string | null\n  metadata: Record<string, unknown>\n  created_at: string\n}\n\nexport interface StorageAuditListResponse {\n  events: StorageAuditEventRecord[]\n  count: number\n}\n\nexport interface ConfirmStorageUploadRequest {\n  size_bytes?: number\n  content_type?: string\n  checksum_sha256?: string\n  metadata?: Record<string, unknown>\n}\n\nexport interface SearchStorageFilesRequest {\n  query?: string\n  limit?: number\n  offset?: number\n  s3_id?: string\n  prefix?: string\n  metadata?: Record<string, unknown>\n  name?: string\n  resource_id?: string\n  mime_type?: string\n  content_type?: string\n  status?: string\n  visibility?: 'private' | 'organization' | 'public' | (string & {})\n  bucket?: string\n  key_prefix?: string\n}\n\nexport interface DeleteManyStorageFilesRequest {\n  file_ids: string[]\n}\n\nexport interface UpdateManyStorageFilesRequest {\n  file_ids: string[]\n  storage_key?: string\n  bucket?: string\n  name?: string\n  file_name?: string\n  original_name?: string\n  resource_id?: string\n  mime_type?: string\n  content_type?: string\n  size_bytes?: number\n  checksum_sha256?: string\n  visibility?: 'private' | 'organization' | 'public' | (string & {})\n  status?: string\n  metadata?: Record<string, unknown>\n}\n\nexport interface SetManyStorageFileVisibilityRequest {\n  file_ids: string[]\n  public?: boolean\n  visibility?: 'private' | 'organization' | 'public'\n}\n\nexport interface CopyStorageFileRequest extends StorageServerSideEncryptionOptions {\n  storage_key: string\n  bucket?: string\n  file_name?: string\n  visibility?: 'private' | 'organization' | 'public'\n  metadata?: Record<string, unknown>\n}\n\nexport interface ListStorageFoldersRequest {\n  s3_id: string\n  prefix: string\n}\n\nexport interface TreeStorageFoldersRequest {\n  s3_id: string\n  prefix: string\n}\n\nexport interface StoragePermissionListRequest {\n  file_id: string\n}\n\nexport interface StoragePermissionGrantRequest {\n  file_id: string\n  principal_type: 'user' | 'organization' | 'team' | 'role'\n  principal_id: string\n  permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\n  expires_at?: string\n  metadata?: Record<string, unknown>\n}\n\nexport interface StoragePermissionRevokeRequest {\n  file_id: string\n  principal_type: 'user' | 'organization' | 'team' | 'role'\n  principal_id: string\n  permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\n}\n\nexport interface StoragePermissionCheckRequest {\n  file_id: string\n  permission: 'read' | 'write' | 'delete' | 'share' | 'owner'\n}\n\nexport interface StorageMultipartCreateRequest extends StorageServerSideEncryptionOptions {\n  file_id: string\n  content_type?: string\n}\n\nexport interface StorageMultipartSignPartRequest {\n  file_id: string\n  upload_id: string\n  part_number: number\n}\n\nexport interface StorageMultipartCompletePartInput {\n  part_number: number\n  etag: string\n}\n\nexport interface StorageMultipartCompleteRequest {\n  file_id: string\n  upload_id: string\n  parts: StorageMultipartCompletePartInput[]\n}\n\nexport interface StorageMultipartAbortRequest {\n  file_id: string\n  upload_id: string\n}\n\nexport interface StorageMultipartListPartsRequest {\n  file_id: string\n  upload_id: string\n}\n\nexport interface DeprecatedInlineStorageConnectionFields {\n  provider?: string\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  endpoint?: string\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  region?: string\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  access_key_id?: string\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  secret_key?: string\n  /**\n   * @deprecated Prefer `s3_id` / `s3Id` and a managed storage catalog.\n   */\n  session_token?: string\n}\n\nexport type StorageConnectionSelector =\n  | ({\n      s3_id: string\n      s3Id?: string\n    } & DeprecatedInlineStorageConnectionFields)\n  | ({\n      s3_id?: string\n      s3Id: string\n    } & DeprecatedInlineStorageConnectionFields)\n  | ({\n      s3_id?: string\n      s3Id?: string\n      endpoint: string\n      region: string\n      access_key_id: string\n      secret_key: string\n    } & DeprecatedInlineStorageConnectionFields)\n\nexport type StorageObjectFolderCreateRequest = StorageConnectionSelector & {\n  bucket: string\n  prefix: string\n}\n\nexport type StorageObjectFolderDeleteRequest = StorageObjectFolderCreateRequest\n\nexport interface StorageObjectFolderRenameRequest extends Omit<StorageObjectFolderCreateRequest, 'prefix'> {\n  from_prefix: string\n  to_prefix: string\n}\n\nexport type StorageObjectBaseRequest = StorageConnectionSelector & {\n  bucket: string\n}\n\nexport type StorageObjectRequest = StorageObjectBaseRequest & {\n  key: string\n}\n\nexport type StorageObjectValidateRequest = StorageObjectRequest & {\n  checksum_sha256?: string\n  etag?: string\n}\n\nexport type StorageObjectCopyRequest = StorageObjectBaseRequest &\n  StorageServerSideEncryptionOptions & {\n  source_key: string\n  destination_key: string\n  destination_bucket?: string\n}\n\nexport type StorageObjectPublicUrlRequest = StorageObjectRequest & {\n  public_base_url?: string\n  force_path_style?: boolean\n}\n\nexport type StorageListObjectsRequest = StorageObjectBaseRequest & {\n  prefix?: string\n  delimiter?: string\n  continuation_token?: string\n  max_keys?: number\n}\n\nexport type StorageUpdateObjectRequest = StorageObjectRequest & {\n  acl?: string\n  content_type?: string\n  cache_control?: string\n  content_disposition?: string\n  content_encoding?: string\n  content_language?: string\n  metadata?: Record<string, string>\n}\n\nexport type StorageObjectVersionListRequest = StorageObjectBaseRequest & {\n  key?: string\n  max_keys?: number\n  key_marker?: string\n  version_id_marker?: string\n  delimiter?: string\n}\n\nexport type StorageObjectVersionMutationRequest = StorageObjectRequest & {\n  version_id: string\n}\n\nexport type StorageSignedPostPolicyRequest = StorageObjectRequest &\n  StorageServerSideEncryptionOptions & {\n  content_type?: string\n  min_size?: number\n  max_size?: number\n  expires_in?: number\n  public_base_url?: string\n  force_path_style?: boolean\n  success_action_status?: string\n}\n\nexport type StoragePresignUploadRequest = StorageObjectRequest &\n  StorageServerSideEncryptionOptions & {\n  content_type?: string\n}\n\nexport type StorageBucketCorsRequest = StorageObjectBaseRequest\n\nexport interface StorageBucketCorsRuleInput {\n  allowed_origins: string[]\n  allowed_methods: string[]\n  allowed_headers?: string[]\n  expose_headers?: string[]\n  max_age_seconds?: number\n}\n\nexport type StorageSetBucketCorsRequest = StorageBucketCorsRequest & {\n  rules: StorageBucketCorsRuleInput[]\n}\n\nexport type StorageBucketLifecycleRequest = StorageObjectBaseRequest\n\nexport interface StorageBucketLifecycleRuleInput {\n  id?: string\n  prefix?: string\n  status?: 'Enabled' | 'Disabled' | 'enabled' | 'disabled' | (string & {})\n  expiration_days?: number\n  expired_object_delete_marker?: boolean\n  noncurrent_version_expiration_days?: number\n  abort_incomplete_multipart_upload_days?: number\n}\n\nexport type StorageSetBucketLifecycleRequest = StorageBucketLifecycleRequest & {\n  rules: StorageBucketLifecycleRuleInput[]\n}\n\nexport type StorageBucketPolicyRequest = StorageObjectBaseRequest\n\nexport type StorageSetBucketPolicyRequest = StorageBucketPolicyRequest & {\n  policy: Record<string, unknown> | string\n}\n\nexport type StoragePublicAccessBlockRequest = StorageObjectBaseRequest\n\nexport type StorageSetPublicAccessBlockRequest = StoragePublicAccessBlockRequest & {\n  block_public_acls?: boolean\n  ignore_public_acls?: boolean\n  block_public_policy?: boolean\n  restrict_public_buckets?: boolean\n}\n\nexport interface StorageFileVersionPathRequest {\n  file_id: string\n  version_id: string\n}\n\nexport interface StorageFileRetentionRequest {\n  mode?: 'GOVERNANCE' | 'COMPLIANCE' | (string & {})\n  retain_until?: string\n  retain_until_date?: string\n  version_id?: string\n  bypass_governance?: boolean\n}\n\nexport interface StorageAuditQueryRequest {\n  file_id?: string\n  limit?: number\n  offset?: number\n}\n\nexport interface AthenaEnvelope<T> {\n  status: string\n  message: string\n  data: T\n}\n\nexport type StorageFileAccessPurpose = 'read' | 'download' | 'stream'\n\nexport interface GetStorageFileUrlQuery {\n  purpose?: StorageFileAccessPurpose | (string & {})\n}\n\nexport type AthenaStorageErrorHandler = (error: AthenaStorageError) => void | Promise<void>\n\nexport interface AthenaStorageClientConfig extends AthenaStorageFileConfig {\n  onError?: AthenaStorageErrorHandler\n}\n\n/**\n * Credentials for signing the direct upload PUT in the client.\n * The Athena API still creates managed-file metadata so the public upload\n * result remains unchanged; file bytes go directly to this S3-compatible endpoint.\n */\nexport interface AthenaStorageDirectUploadConfig {\n  endpoint: string\n  bucket?: string\n  region?: string\n  accessKeyId: string\n  secretAccessKey: string\n  sessionToken?: string\n  /** R2 uses path-style addressing by default. */\n  forcePathStyle?: boolean\n}\n\nexport interface AthenaStorageCallOptions extends AthenaGatewayCallOptions {\n  signal?: AbortSignal\n  onError?: AthenaStorageErrorHandler\n}\n\nexport type AthenaStorageBinaryCallOptions = AthenaStorageCallOptions\n\nexport type AthenaStorageErrorCode =\n  | 'INVALID_URL'\n  | 'NETWORK_ERROR'\n  | 'HTTP_ERROR'\n  | 'INVALID_JSON'\n  | 'INVALID_ATHENA_ENVELOPE'\n  | 'UNKNOWN_ERROR'\n\nexport const AthenaStorageErrorCode = {\n  InvalidUrl: 'INVALID_URL',\n  NetworkError: 'NETWORK_ERROR',\n  HttpError: 'HTTP_ERROR',\n  InvalidJson: 'INVALID_JSON',\n  InvalidAthenaEnvelope: 'INVALID_ATHENA_ENVELOPE',\n  UnknownError: 'UNKNOWN_ERROR',\n} as const satisfies Record<string, AthenaStorageErrorCode>\n\nexport interface AthenaStorageErrorDetails {\n  code: AthenaStorageErrorCode\n  athenaCode: AthenaErrorCode\n  kind: AthenaErrorKind\n  category: AthenaErrorCategory\n  retryable: boolean\n  message: string\n  status: number\n  endpoint: AthenaGatewayEndpointPath\n  method: AthenaGatewayMethod\n  requestId?: string\n  hint?: string\n  cause?: string\n  raw: unknown\n}\n\nexport interface AthenaStorageErrorInput {\n  code: AthenaStorageErrorCode\n  message: string\n  status: number\n  endpoint: AthenaGatewayEndpointPath\n  method: AthenaGatewayMethod\n  raw?: unknown\n  requestId?: string\n  hint?: string\n  cause?: unknown\n}\n\nexport class AthenaStorageError extends Error {\n  readonly code: AthenaStorageErrorCode\n  readonly athenaCode: AthenaErrorCode\n  readonly kind: AthenaErrorKind\n  readonly category: AthenaErrorCategory\n  readonly retryable: boolean\n  readonly status: number\n  readonly endpoint: AthenaGatewayEndpointPath\n  readonly method: AthenaGatewayMethod\n  readonly requestId?: string\n  readonly hint?: string\n  readonly causeDetail?: string\n  readonly raw: unknown\n  readonly normalized: NormalizedAthenaError\n  readonly __athenaNormalizedError: NormalizedAthenaError\n\n  constructor(input: AthenaStorageErrorInput) {\n    super(input.message, { cause: input.cause })\n    this.name = 'AthenaStorageError'\n    this.code = input.code\n    this.status = input.status\n    this.endpoint = input.endpoint\n    this.method = input.method\n    this.requestId = input.requestId\n    this.hint = input.hint\n    this.causeDetail = causeToString(input.cause)\n    this.raw = input.raw ?? null\n    this.normalized = normalizeStorageErrorInput(input)\n    this.__athenaNormalizedError = this.normalized\n    this.athenaCode = this.normalized.code\n    this.kind = this.normalized.kind\n    this.category = this.normalized.category\n    this.retryable = this.normalized.retryable\n    Object.defineProperty(this, '__athenaNormalizedError', {\n      value: this.normalized,\n      enumerable: false,\n      configurable: false,\n      writable: false,\n    })\n  }\n\n  toDetails(): AthenaStorageErrorDetails {\n    return {\n      code: this.code,\n      athenaCode: this.athenaCode,\n      kind: this.kind,\n      category: this.category,\n      retryable: this.retryable,\n      message: this.message,\n      status: this.status,\n      endpoint: this.endpoint,\n      method: this.method,\n      requestId: this.requestId,\n      hint: this.hint,\n      cause: this.causeDetail,\n      raw: this.raw,\n    }\n  }\n}\n\nexport interface AthenaStorageBaseModule {\n  listStorageCatalogs(options?: AthenaStorageCallOptions): Promise<{ data: S3CatalogItem[] }>\n  createStorageCatalog(\n    input: CreateStorageCatalogRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<S3CatalogItem>\n  updateStorageCatalog(\n    id: string,\n    input: UpdateStorageCatalogRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<S3CatalogItem>\n  deleteStorageCatalog(\n    id: string,\n    options?: AthenaStorageCallOptions,\n  ): Promise<{ id: string; deleted: boolean }>\n  listStorageCredentials(options?: AthenaStorageCallOptions): Promise<{ data: S3CredentialListItem[] }>\n  createStorageUploadUrl(\n    input: CreateStorageUploadUrlRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageUploadUrlResponse>\n  createStorageUploadUrls(\n    input: CreateStorageUploadUrlsRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageBatchUploadUrlResponse>\n  listStorageFiles(\n    input: ListStorageFilesRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageListFilesResponse>\n  getStorageFile(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n  getStorageFileUrl(\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageCallOptions,\n  ): Promise<PresignedFileUrlResponse>\n  getStorageFileProxy(\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions,\n  ): Promise<Response>\n  updateStorageFile(\n    fileId: string,\n    input: UpdateStorageFileRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationResponse>\n  deleteStorageFile(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n  setStorageFileVisibility(\n    fileId: string,\n    input: SetStorageFileVisibilityRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationResponse>\n  deleteStorageFolder(\n    input: DeleteStorageFolderRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFolderMutationResponse>\n  moveStorageFolder(\n    input: MoveStorageFolderRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFolderMutationResponse>\n}\n\nexport type AthenaStoragePutBody =\n  | Blob\n  | ArrayBuffer\n  | Uint8Array\n  | ReadableStream<Uint8Array>\n\nexport interface AthenaStoragePutOptions {\n  headers?: Record<string, string>\n  signal?: AbortSignal\n}\n\nexport interface AthenaStorageManagedUpload extends PresignedFileUrlResponse {\n  method: 'PUT'\n  headers: Record<string, string>\n  expiresAt: string\n  put(body: AthenaStoragePutBody, options?: AthenaStoragePutOptions): Promise<Response>\n}\n\nexport interface StorageUploadUrlResponseWithPut extends Omit<StorageUploadUrlResponse, 'upload'> {\n  upload: AthenaStorageManagedUpload\n}\n\nexport interface StorageBatchUploadUrlResponseWithPut {\n  files: StorageUploadUrlResponseWithPut[]\n}\n\nexport interface AthenaStorageFileUploadRequest extends StorageServerSideEncryptionOptions {\n  s3_id?: string\n  s3Id?: string\n  bucket?: string\n  storage_key?: string\n  storageKey?: string\n  name?: string\n  fileName?: string\n  original_name?: string\n  originalName?: string\n  resource_id?: string\n  resourceId?: string\n  mime_type?: string\n  mimeType?: string\n  content_type?: string\n  contentType?: string\n  size_bytes?: number\n  sizeBytes?: number\n  file_id?: string\n  fileId?: string\n  public?: boolean\n  visibility?: 'private' | 'organization' | 'public'\n  metadata?: Record<string, unknown>\n}\n\nexport interface AthenaStorageFileUploadManyRequest {\n  files: AthenaStorageFileUploadRequest[]\n}\n\nexport interface AthenaStorageFileNamespace extends AthenaStorageFileModule {\n  upload(\n    input: AthenaStorageFileUploadRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageUploadUrlResponseWithPut>\n  upload(\n    input: Parameters<AthenaStorageFileModule['upload']>[0],\n    options?: AthenaStorageCallOptions,\n  ): ReturnType<AthenaStorageFileModule['upload']>\n  uploadMany(\n    input: AthenaStorageFileUploadManyRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageBatchUploadUrlResponseWithPut>\n  confirmUpload(\n    fileId: string,\n    input?: ConfirmStorageUploadRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationResponse>\n  uploadBinary(\n    fileId: string,\n    body: AthenaStoragePutBody,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationResponse>\n  search(\n    input: SearchStorageFilesRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageListFilesResponse>\n  get(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n  update(\n    fileId: string,\n    input: UpdateStorageFileRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationResponse>\n  deleteMany(\n    input: DeleteManyStorageFilesRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationManyResponse>\n  updateMany(\n    input: UpdateManyStorageFilesRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationManyResponse>\n  restore(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n  purge(fileId: string, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n  copy(\n    fileId: string,\n    input: CopyStorageFileRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<StorageFileMutationResponse>\n  url(\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageCallOptions,\n  ): Promise<PresignedFileUrlResponse>\n  publicUrl(fileId: string, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  proxyUrl(\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageCallOptions,\n  ): Promise<Record<string, unknown>>\n  proxy(\n    fileId: string,\n    query?: GetStorageFileUrlQuery,\n    options?: AthenaStorageBinaryCallOptions,\n  ): Promise<Response>\n  versions(fileId: string, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  restoreVersion(\n    fileId: string,\n    versionId: string,\n    options?: AthenaStorageCallOptions,\n  ): Promise<Record<string, unknown>>\n  deleteVersion(\n    fileId: string,\n    versionId: string,\n    options?: AthenaStorageCallOptions,\n  ): Promise<Record<string, unknown>>\n  retention: {\n    get(\n      fileId: string,\n      query?: Pick<StorageFileRetentionRequest, 'version_id'>,\n      options?: AthenaStorageCallOptions,\n    ): Promise<Record<string, unknown>>\n    set(\n      fileId: string,\n      input: StorageFileRetentionRequest,\n      options?: AthenaStorageCallOptions,\n    ): Promise<Record<string, unknown>>\n  }\n  visibility: {\n    update(\n      fileId: string,\n      input: SetStorageFileVisibilityRequest,\n      options?: AthenaStorageCallOptions,\n    ): Promise<StorageFileMutationResponse>\n    set(\n      fileId: string,\n      input: SetStorageFileVisibilityRequest,\n      options?: AthenaStorageCallOptions,\n    ): Promise<StorageFileMutationResponse>\n    setMany(\n      input: SetManyStorageFileVisibilityRequest,\n      options?: AthenaStorageCallOptions,\n    ): Promise<StorageFileMutationManyResponse>\n  }\n}\n\nexport interface AthenaStorageCredentialsNamespace {\n  list(options?: AthenaStorageCallOptions): Promise<{ data: S3CredentialListItem[] }>\n}\n\nexport interface AthenaStorageCatalogNamespace {\n  list(options?: AthenaStorageCallOptions): Promise<{ data: S3CatalogItem[] }>\n  create(input: CreateStorageCatalogRequest, options?: AthenaStorageCallOptions): Promise<S3CatalogItem>\n  update(id: string, input: UpdateStorageCatalogRequest, options?: AthenaStorageCallOptions): Promise<S3CatalogItem>\n  delete(id: string, options?: AthenaStorageCallOptions): Promise<{ id: string; deleted: boolean }>\n}\n\nexport interface AthenaStorageFolderNamespace {\n  list(input: ListStorageFoldersRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  tree(input: TreeStorageFoldersRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  delete(input: DeleteStorageFolderRequest, options?: AthenaStorageCallOptions): Promise<StorageFolderMutationResponse>\n  move(input: MoveStorageFolderRequest, options?: AthenaStorageCallOptions): Promise<StorageFolderMutationResponse>\n}\n\nexport interface AthenaStoragePermissionNamespace {\n  list(input: StoragePermissionListRequest, options?: AthenaStorageCallOptions): Promise<StoragePermissionListResponse>\n  grant(input: StoragePermissionGrantRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  revoke(input: StoragePermissionRevokeRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  check(input: StoragePermissionCheckRequest, options?: AthenaStorageCallOptions): Promise<StoragePermissionCheckResponse>\n}\n\nexport interface AthenaStorageObjectFolderNamespace {\n  create(input: StorageObjectFolderCreateRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  delete(input: StorageObjectFolderDeleteRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  rename(input: StorageObjectFolderRenameRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n}\n\nexport interface AthenaStorageObjectNamespace {\n  list(input: StorageListObjectsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  head(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  exists(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  validate(input: StorageObjectValidateRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  update(input: StorageUpdateObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  copy(input: StorageObjectCopyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  url(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  publicUrl(input: StorageObjectPublicUrlRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  delete(input: StorageObjectRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  uploadUrl(input: StoragePresignUploadRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  versions(input: StorageObjectVersionListRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  restoreVersion(\n    input: StorageObjectVersionMutationRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<Record<string, unknown>>\n  deleteVersion(\n    input: StorageObjectVersionMutationRequest,\n    options?: AthenaStorageCallOptions,\n  ): Promise<Record<string, unknown>>\n  postPolicy(input: StorageSignedPostPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  folder: AthenaStorageObjectFolderNamespace\n}\n\nexport interface AthenaStorageBucketCorsNamespace {\n  get(input: StorageBucketCorsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  set(input: StorageSetBucketCorsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  delete(input: StorageBucketCorsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n}\n\nexport interface AthenaStorageBucketNamespace {\n  list(input: Omit<StorageObjectBaseRequest, 'bucket'>, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  create(input: StorageObjectBaseRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  delete(input: StorageObjectBaseRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  lifecycle: {\n    get(input: StorageBucketLifecycleRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n    set(input: StorageSetBucketLifecycleRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n    delete(input: StorageBucketLifecycleRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  }\n  policy: {\n    get(input: StorageBucketPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n    set(input: StorageSetBucketPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n    delete(input: StorageBucketPolicyRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  }\n  publicAccess: {\n    get(input: StoragePublicAccessBlockRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n    set(input: StorageSetPublicAccessBlockRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n    delete(input: StoragePublicAccessBlockRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  }\n  cors: AthenaStorageBucketCorsNamespace\n}\n\nexport interface AthenaStorageMultipartNamespace {\n  create(input: StorageMultipartCreateRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  signPart(input: StorageMultipartSignPartRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  complete(input: StorageMultipartCompleteRequest, options?: AthenaStorageCallOptions): Promise<StorageFileMutationResponse>\n  abort(input: StorageMultipartAbortRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n  listParts(input: StorageMultipartListPartsRequest, options?: AthenaStorageCallOptions): Promise<Record<string, unknown>>\n}\n\nexport interface AthenaStorageAuditNamespace {\n  list(input: StorageAuditQueryRequest, options?: AthenaStorageCallOptions): Promise<StorageAuditListResponse>\n}\n\nexport interface AthenaStorageModule extends AthenaStorageBaseModule {\n  credentials: AthenaStorageCredentialsNamespace\n  catalog: AthenaStorageCatalogNamespace\n  file: AthenaStorageFileNamespace\n  folder: AthenaStorageFolderNamespace\n  permission: AthenaStoragePermissionNamespace\n  object: AthenaStorageObjectNamespace\n  bucket: AthenaStorageBucketNamespace\n  multipart: AthenaStorageMultipartNamespace\n  audit: AthenaStorageAuditNamespace\n  /**\n   * Database backup / restore admin API (`/admin/backups*`).\n   * Archives are stored in the server S3 or R2 profile (`ATHENA_BACKUP_S3_*`).\n   */\n  backup: AthenaStorageBackupNamespace\n  delete: AthenaStorageFileModule['delete']\n}\n\ntype StorageEnvelopeKind = 'raw' | 'athena'\n\ninterface StorageModuleRuntimeOptions {\n  baseUrl?: string\n  onError?: AthenaStorageErrorHandler\n  stripBasePath?: boolean\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction causeToString(cause: unknown): string | undefined {\n  if (cause === undefined || cause === null) return undefined\n  if (typeof cause === 'string') return cause\n  if (cause instanceof Error && cause.message.trim()) return cause.message.trim()\n  try {\n    return JSON.stringify(cause)\n  } catch {\n    return String(cause)\n  }\n}\n\nfunction storageGatewayCode(code: AthenaStorageErrorCode): AthenaGatewayErrorCode {\n  if (code === 'INVALID_URL') return 'INVALID_URL'\n  if (code === 'NETWORK_ERROR') return 'NETWORK_ERROR'\n  if (code === 'INVALID_JSON' || code === 'INVALID_ATHENA_ENVELOPE') return 'INVALID_JSON'\n  if (code === 'HTTP_ERROR') return 'HTTP_ERROR'\n  return 'UNKNOWN_ERROR'\n}\n\nfunction headerValue(headers: Headers, names: readonly string[]): string | undefined {\n  for (const name of names) {\n    const value = headers.get(name)\n    if (value?.trim()) return value.trim()\n  }\n  return undefined\n}\n\nfunction storageOperationFromEndpoint(\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod,\n): string {\n  const endpointPath = String(endpoint).split('?')[0]\n  for (const candidate of storageSdkManifest.methods) {\n    if (candidate.method !== method) continue\n    const pattern = `^${candidate.path.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\\\\\{[^/]+\\\\\\}/g, '[^/]+')}$`\n    if (new RegExp(pattern).test(endpointPath)) {\n      return candidate.name\n    }\n  }\n  return `storage:${method.toLowerCase()}`\n}\n\nfunction normalizeStorageErrorInput(input: AthenaStorageErrorInput): NormalizedAthenaError {\n  return normalizeAthenaError(\n    {\n      data: null,\n      error: {\n        message: input.message,\n        gatewayCode: storageGatewayCode(input.code),\n        status: input.status,\n        raw: input.raw ?? input.cause ?? null,\n      },\n      errorDetails: {\n        code: storageGatewayCode(input.code),\n        message: input.message,\n        status: input.status,\n        endpoint: input.endpoint,\n        method: input.method,\n        requestId: input.requestId,\n        hint: input.hint,\n        cause: causeToString(input.cause),\n      },\n      raw: input.raw ?? input.cause ?? null,\n      status: input.status,\n    },\n    { operation: storageOperationFromEndpoint(input.endpoint, input.method) },\n  )\n}\n\nexport function createAthenaStorageError(input: AthenaStorageErrorInput): AthenaStorageError {\n  return new AthenaStorageError(input)\n}\n\nasync function notifyStorageError(\n  error: AthenaStorageError,\n  options: AthenaStorageCallOptions | undefined,\n  runtimeOptions: StorageModuleRuntimeOptions | undefined,\n): Promise<void> {\n  const handlers = [runtimeOptions?.onError, options?.onError].filter(\n    (handler): handler is AthenaStorageErrorHandler => typeof handler === 'function',\n  )\n  for (const handler of handlers) {\n    try {\n      await handler(error)\n    } catch {\n      // Error observers must not mask the original storage failure.\n    }\n  }\n}\n\nasync function rejectStorageError(\n  input: AthenaStorageErrorInput,\n  options: AthenaStorageCallOptions | undefined,\n  runtimeOptions: StorageModuleRuntimeOptions | undefined,\n): Promise<never> {\n  const error = createAthenaStorageError(input)\n  await notifyStorageError(error, options, runtimeOptions)\n  throw error\n}\n\nfunction parseResponseBody(rawText: string, contentType: string | null) {\n  if (!rawText) {\n    return { parsed: null as unknown, parseFailed: false }\n  }\n\n  const contentTypeSuggestsJson =\n    contentType?.toLowerCase().includes('application/json') ?? false\n  const looksJson =\n    contentTypeSuggestsJson || rawText.startsWith('{') || rawText.startsWith('[')\n\n  if (!looksJson) {\n    return { parsed: rawText as unknown, parseFailed: false }\n  }\n\n  try {\n    return { parsed: JSON.parse(rawText) as unknown, parseFailed: false }\n  } catch {\n    return { parsed: rawText as unknown, parseFailed: true }\n  }\n}\n\nfunction appendQuery(path: string, query?: object): string {\n  if (!query) return path\n  const params = new URLSearchParams()\n  for (const [key, value] of Object.entries(query)) {\n    if (value === undefined || value === null) continue\n    params.set(key, String(value))\n  }\n  const queryText = params.toString()\n  return queryText ? `${path}?${queryText}` : path\n}\n\nfunction storagePath(path: string): AthenaGatewayEndpointPath {\n  return path as AthenaGatewayEndpointPath\n}\n\nfunction resolveStorageEndpointPath(\n  endpoint: AthenaGatewayEndpointPath,\n  runtimeOptions?: StorageModuleRuntimeOptions,\n): AthenaGatewayEndpointPath {\n  if (!runtimeOptions?.stripBasePath) {\n    return endpoint\n  }\n\n  const [pathname, queryText] = String(endpoint).split('?', 2)\n  const trimmedPathname = pathname.startsWith('/storage/')\n    ? pathname.slice('/storage'.length)\n    : pathname === '/storage'\n      ? '/'\n      : pathname\n  const resolvedPath = trimmedPathname.startsWith('/') ? trimmedPathname : `/${trimmedPathname}`\n  return storagePath(queryText ? `${resolvedPath}?${queryText}` : resolvedPath)\n}\n\nfunction withPathParam(path: string, name: string, value: string): string {\n  return path.replace(`{${name}}`, encodeURIComponent(value))\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string): string {\n  if (isRecord(payload)) {\n    const message = payload.message ?? payload.error ?? payload.details\n    if (typeof message === 'string' && message.trim()) {\n      return message.trim()\n    }\n  }\n  if (typeof payload === 'string' && payload.trim()) {\n    return payload.trim()\n  }\n  return fallback\n}\n\nfunction resolveErrorHint(payload: unknown): string | undefined {\n  if (!isRecord(payload)) return undefined\n  const hint = payload.hint ?? payload.suggestion\n  return typeof hint === 'string' && hint.trim() ? hint.trim() : undefined\n}\n\nfunction resolveErrorCause(payload: unknown): string | undefined {\n  if (!isRecord(payload)) return undefined\n  const cause = payload.cause ?? payload.reason\n  return typeof cause === 'string' && cause.trim() ? cause.trim() : undefined\n}\n\nfunction storageCodeFromUnknown(error: unknown): AthenaStorageErrorCode {\n  if (isAthenaGatewayError(error)) {\n    if (error.code === 'INVALID_URL') return 'INVALID_URL'\n    if (error.code === 'NETWORK_ERROR') return 'NETWORK_ERROR'\n    if (error.code === 'INVALID_JSON') return 'INVALID_JSON'\n    if (error.code === 'HTTP_ERROR') return 'HTTP_ERROR'\n  }\n  return 'UNKNOWN_ERROR'\n}\n\nasync function callStorageEndpoint<T>(\n  gateway: AthenaGatewayClient,\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod,\n  envelope: StorageEnvelopeKind,\n  payload?: unknown,\n  options?: AthenaStorageCallOptions,\n  runtimeOptions?: StorageModuleRuntimeOptions,\n): Promise<T> {\n  const resolvedOptions = await gateway.resolveCallOptions(options)\n  let url: string\n  let headers: Record<string, string>\n  try {\n    const baseUrl = resolvedOptions?.baseUrl\n      ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n      : runtimeOptions?.baseUrl\n        ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\n        : gateway.baseUrl\n    url = buildAthenaGatewayUrl(baseUrl, resolveStorageEndpointPath(endpoint, runtimeOptions))\n    headers = gateway.buildHeaders(resolvedOptions)\n  } catch (error) {\n    return rejectStorageError(\n      {\n        code: storageCodeFromUnknown(error),\n        message: error instanceof Error\n          ? error.message\n          : `Athena storage ${method} ${endpoint} failed before sending the request`,\n        status: isAthenaGatewayError(error) ? error.status : 0,\n        endpoint,\n        method,\n        raw: error,\n        requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\n        hint: isAthenaGatewayError(error) ? error.hint : undefined,\n        cause: error,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n  const requestInit: RequestInit = {\n    method,\n    headers,\n    signal: resolvedOptions?.signal,\n  }\n  if (payload !== undefined && method !== 'GET') {\n    requestInit.body = JSON.stringify(payload)\n  }\n\n  let response: Response\n  try {\n    response = await fetch(url, requestInit)\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error)\n    return rejectStorageError(\n      {\n        code: 'NETWORK_ERROR',\n        message: `Network error while calling Athena storage ${method} ${endpoint}: ${message}`,\n        status: 0,\n        endpoint,\n        method,\n        cause: error,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n\n  let rawText: string\n  try {\n    rawText = await response.text()\n  } catch (error) {\n    return rejectStorageError(\n      {\n        code: 'NETWORK_ERROR',\n        message: `Athena storage ${method} ${endpoint} response body could not be read`,\n        status: response.status,\n        endpoint,\n        method,\n        requestId: headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id']),\n        cause: error,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n  const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\n  const requestId = headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id'])\n  if (parsedBody.parseFailed) {\n    return rejectStorageError(\n      {\n        code: 'INVALID_JSON',\n        message: `Athena storage ${method} ${endpoint} returned malformed JSON`,\n        status: response.status,\n        endpoint,\n        method,\n        requestId,\n        raw: parsedBody.parsed,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n\n  if (!response.ok) {\n    return rejectStorageError(\n      {\n        code: 'HTTP_ERROR',\n        message: resolveErrorMessage(\n          parsedBody.parsed,\n          `Athena storage ${method} ${endpoint} failed with status ${response.status}`,\n        ),\n        status: response.status,\n        endpoint,\n        method,\n        requestId,\n        hint: resolveErrorHint(parsedBody.parsed),\n        cause: resolveErrorCause(parsedBody.parsed),\n        raw: parsedBody.parsed,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n\n  if (envelope === 'athena') {\n    if (!isRecord(parsedBody.parsed) || !('data' in parsedBody.parsed)) {\n      return rejectStorageError(\n        {\n          code: 'INVALID_ATHENA_ENVELOPE',\n          message: `Athena storage ${method} ${endpoint} returned an invalid Athena envelope`,\n          status: response.status,\n          endpoint,\n          method,\n          requestId,\n          raw: parsedBody.parsed,\n        },\n        resolvedOptions,\n        runtimeOptions,\n      )\n    }\n    return parsedBody.parsed.data as T\n  }\n\n  return parsedBody.parsed as T\n}\n\nasync function callStorageBinaryEndpoint(\n  gateway: AthenaGatewayClient,\n  endpoint: AthenaGatewayEndpointPath,\n  method: AthenaGatewayMethod,\n  options?: AthenaStorageBinaryCallOptions,\n  runtimeOptions?: StorageModuleRuntimeOptions,\n): Promise<Response> {\n  const resolvedOptions = await gateway.resolveCallOptions(options)\n  let url: string\n  let headers: Record<string, string>\n  try {\n    const baseUrl = resolvedOptions?.baseUrl\n      ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n      : runtimeOptions?.baseUrl\n        ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\n        : gateway.baseUrl\n    url = buildAthenaGatewayUrl(baseUrl, resolveStorageEndpointPath(endpoint, runtimeOptions))\n    headers = gateway.buildHeaders(resolvedOptions)\n  } catch (error) {\n    return rejectStorageError(\n      {\n        code: storageCodeFromUnknown(error),\n        message: error instanceof Error\n          ? error.message\n          : `Athena storage ${method} ${endpoint} failed before sending the request`,\n        status: isAthenaGatewayError(error) ? error.status : 0,\n        endpoint,\n        method,\n        raw: error,\n        requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\n        hint: isAthenaGatewayError(error) ? error.hint : undefined,\n        cause: error,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n\n  let response: Response\n  try {\n    response = await fetch(url, {\n      method,\n      headers,\n      signal: resolvedOptions?.signal,\n    })\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error)\n    return rejectStorageError(\n      {\n        code: 'NETWORK_ERROR',\n        message: `Network error while calling Athena storage ${method} ${endpoint}: ${message}`,\n        status: 0,\n        endpoint,\n        method,\n        cause: error,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n\n  if (response.ok) {\n    return response\n  }\n\n  const requestId = headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id'])\n  let rawErrorBody: unknown = null\n  try {\n    const rawText = await response.text()\n    const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\n    rawErrorBody = parsedBody.parsed\n  } catch (error) {\n    return rejectStorageError(\n      {\n        code: 'NETWORK_ERROR',\n        message: `Athena storage ${method} ${endpoint} error response body could not be read`,\n        status: response.status,\n        endpoint,\n        method,\n        requestId,\n        cause: error,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n\n  return rejectStorageError(\n    {\n      code: 'HTTP_ERROR',\n      message: resolveErrorMessage(\n        rawErrorBody,\n        `Athena storage ${method} ${endpoint} failed with status ${response.status}`,\n      ),\n      status: response.status,\n      endpoint,\n      method,\n      requestId,\n      hint: resolveErrorHint(rawErrorBody),\n      cause: resolveErrorCause(rawErrorBody),\n      raw: rawErrorBody,\n    },\n    resolvedOptions,\n    runtimeOptions,\n  )\n}\n\nfunction isBlobBody(body: AthenaStoragePutBody): body is Blob {\n  return typeof Blob !== 'undefined' && body instanceof Blob\n}\n\nfunction isReadableStreamBody(body: AthenaStoragePutBody): body is ReadableStream<Uint8Array> {\n  return typeof ReadableStream !== 'undefined' && body instanceof ReadableStream\n}\n\nasync function putPresignedUploadBody(\n  uploadUrl: string,\n  uploadHeaders: Record<string, string>,\n  body: AthenaStoragePutBody,\n  options?: AthenaStoragePutOptions,\n): Promise<Response> {\n  const headers = new Headers(uploadHeaders)\n  Object.entries(options?.headers ?? {}).forEach(([key, value]) => headers.set(key, value))\n  if (!headers.has('Content-Type') && isBlobBody(body) && body.type) {\n    headers.set('Content-Type', body.type)\n  }\n\n  const init: RequestInit & { duplex?: 'half' } = {\n    method: 'PUT',\n    headers,\n    body: body as RequestInit['body'],\n    signal: options?.signal,\n  }\n  if (isReadableStreamBody(body)) {\n    init.duplex = 'half'\n  }\n  return fetch(uploadUrl, init)\n}\n\nfunction attachManagedUpload(upload: PresignedFileUrlResponse): AthenaStorageManagedUpload {\n  const headers: Record<string, string> = { ...(upload.headers ?? {}) }\n  return {\n    ...upload,\n    method: 'PUT',\n    headers,\n    expiresAt: upload.expires_at,\n    put(body, options) {\n      return putPresignedUploadBody(upload.url, headers, body, options)\n    },\n  }\n}\n\nfunction attachUploadHelper(response: StorageUploadUrlResponse): StorageUploadUrlResponseWithPut {\n  return {\n    ...response,\n    upload: attachManagedUpload(response.upload),\n  }\n}\n\nfunction attachUploadHelpers(\n  response: StorageBatchUploadUrlResponse,\n): StorageBatchUploadUrlResponseWithPut {\n  return {\n    files: response.files.map(attachUploadHelper),\n  }\n}\n\nfunction normalizeUploadUrlRequest(input: AthenaStorageFileUploadRequest): CreateStorageUploadUrlRequest {\n  const s3_id = input.s3_id ?? input.s3Id\n  const storage_key = input.storage_key ?? input.storageKey\n  if (!s3_id?.trim()) {\n    throw new Error('athena.storage.file.upload requires s3_id or s3Id')\n  }\n  if (!storage_key?.trim()) {\n    throw new Error('athena.storage.file.upload requires storage_key or storageKey')\n  }\n  const fileName = input.fileName?.trim()\n  const originalName = input.originalName?.trim()\n  return {\n    s3_id,\n    bucket: input.bucket,\n    storage_key,\n    name: input.name ?? fileName,\n    original_name: input.original_name ?? originalName ?? fileName,\n    resource_id: input.resource_id ?? input.resourceId,\n    mime_type: input.mime_type ?? input.mimeType,\n    content_type: input.content_type ?? input.contentType,\n    size_bytes: input.size_bytes ?? input.sizeBytes,\n    file_id: input.file_id ?? input.fileId,\n    public: input.public,\n    visibility: input.visibility,\n    metadata: input.metadata,\n    server_side_encryption: input.server_side_encryption,\n    sse: input.sse,\n    ssekms_key_id: input.ssekms_key_id,\n    kms_key_id: input.kms_key_id,\n    bucket_key_enabled: input.bucket_key_enabled,\n  }\n}\n\nasync function callStorageUploadBinaryEndpoint<T>(\n  gateway: AthenaGatewayClient,\n  endpoint: AthenaGatewayEndpointPath,\n  body: AthenaStoragePutBody,\n  options?: AthenaStorageCallOptions,\n  runtimeOptions?: StorageModuleRuntimeOptions,\n): Promise<T> {\n  const resolvedOptions = await gateway.resolveCallOptions(options)\n  let url: string\n  let headers: Record<string, string>\n  try {\n    const baseUrl = resolvedOptions?.baseUrl\n      ? normalizeAthenaGatewayBaseUrl(resolvedOptions.baseUrl)\n      : runtimeOptions?.baseUrl\n        ? normalizeAthenaGatewayBaseUrl(runtimeOptions.baseUrl)\n        : gateway.baseUrl\n    url = buildAthenaGatewayUrl(baseUrl, resolveStorageEndpointPath(endpoint, runtimeOptions))\n    headers = gateway.buildHeaders(resolvedOptions)\n  } catch (error) {\n    return rejectStorageError(\n      {\n        code: storageCodeFromUnknown(error),\n        message: error instanceof Error\n          ? error.message\n          : `Athena storage PUT ${endpoint} failed before sending the request`,\n        status: isAthenaGatewayError(error) ? error.status : 0,\n        endpoint,\n        method: 'PUT',\n        raw: error,\n        requestId: isAthenaGatewayError(error) ? error.requestId : undefined,\n        hint: isAthenaGatewayError(error) ? error.hint : undefined,\n        cause: error,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n\n  delete headers['Content-Type']\n  delete headers['content-type']\n  if (isBlobBody(body) && body.type) {\n    headers['Content-Type'] = body.type\n  }\n\n  const requestInit: RequestInit & { duplex?: 'half' } = {\n    method: 'PUT',\n    headers,\n    body: body as RequestInit['body'],\n    signal: resolvedOptions?.signal,\n  }\n  if (isReadableStreamBody(body)) {\n    requestInit.duplex = 'half'\n  }\n\n  let response: Response\n  try {\n    response = await fetch(url, requestInit)\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error)\n    return rejectStorageError(\n      {\n        code: 'NETWORK_ERROR',\n        message: `Network error while calling Athena storage PUT ${endpoint}: ${message}`,\n        status: 0,\n        endpoint,\n        method: 'PUT',\n        cause: error,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n\n  let rawText: string\n  try {\n    rawText = await response.text()\n  } catch (error) {\n    return rejectStorageError(\n      {\n        code: 'NETWORK_ERROR',\n        message: `Athena storage PUT ${endpoint} response body could not be read`,\n        status: response.status,\n        endpoint,\n        method: 'PUT',\n        requestId: headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id']),\n        cause: error,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n\n  const parsedBody = parseResponseBody(rawText ?? '', response.headers.get('content-type'))\n  const requestId = headerValue(response.headers, ['x-athena-request-id', 'x-request-id', 'request-id'])\n  if (parsedBody.parseFailed) {\n    return rejectStorageError(\n      {\n        code: 'INVALID_JSON',\n        message: `Athena storage PUT ${endpoint} returned malformed JSON`,\n        status: response.status,\n        endpoint,\n        method: 'PUT',\n        requestId,\n        raw: parsedBody.parsed,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n  if (!response.ok) {\n    return rejectStorageError(\n      {\n        code: 'HTTP_ERROR',\n        message: resolveErrorMessage(\n          parsedBody.parsed,\n          `Athena storage PUT ${endpoint} failed with status ${response.status}`,\n        ),\n        status: response.status,\n        endpoint,\n        method: 'PUT',\n        requestId,\n        hint: resolveErrorHint(parsedBody.parsed),\n        cause: resolveErrorCause(parsedBody.parsed),\n        raw: parsedBody.parsed,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n  if (!isRecord(parsedBody.parsed) || !('data' in parsedBody.parsed)) {\n    return rejectStorageError(\n      {\n        code: 'INVALID_ATHENA_ENVELOPE',\n        message: `Athena storage PUT ${endpoint} returned an invalid Athena envelope`,\n        status: response.status,\n        endpoint,\n        method: 'PUT',\n        requestId,\n        raw: parsedBody.parsed,\n      },\n      resolvedOptions,\n      runtimeOptions,\n    )\n  }\n  return parsedBody.parsed.data as T\n}\n\nexport function createStorageModule(\n  gateway: AthenaGatewayClient,\n  runtimeOptions?: AthenaStorageClientConfig,\n): AthenaStorageModule {\n  const resolvedRuntimeOptions = runtimeOptions as StorageModuleRuntimeOptions | undefined\n  const callRaw = <T>(\n    path: string,\n    method: AthenaGatewayMethod,\n    payload?: unknown,\n    options?: AthenaStorageCallOptions,\n  ) => callStorageEndpoint<T>(\n    gateway,\n    storagePath(path),\n    method,\n    'raw',\n    payload,\n    options,\n    resolvedRuntimeOptions,\n  )\n  const callAthena = <T>(\n    path: string,\n    method: AthenaGatewayMethod,\n    payload?: unknown,\n    options?: AthenaStorageCallOptions,\n  ) => callStorageEndpoint<T>(\n    gateway,\n    storagePath(path),\n    method,\n    'athena',\n    payload,\n      options,\n      resolvedRuntimeOptions,\n  )\n  const callStorageFileVisibility = (\n    fileId: string,\n    method: Extract<AthenaGatewayMethod, 'PATCH' | 'POST'>,\n    input: SetStorageFileVisibilityRequest,\n    options?: AthenaStorageCallOptions,\n  ) => callAthena<StorageFileMutationResponse>(\n    withPathParam('/storage/files/{file_id}/visibility', 'file_id', fileId),\n    method,\n    input,\n    options,\n  )\n  const base: AthenaStorageBaseModule = {\n    listStorageCatalogs(options) {\n      return callRaw('/storage/catalogs', 'GET', undefined, options)\n    },\n    createStorageCatalog(input, options) {\n      return callRaw('/storage/catalogs', 'POST', input, options)\n    },\n    updateStorageCatalog(id, input, options) {\n      return callRaw(withPathParam('/storage/catalogs/{id}', 'id', id), 'PATCH', input, options)\n    },\n    deleteStorageCatalog(id, options) {\n      return callRaw(withPathParam('/storage/catalogs/{id}', 'id', id), 'DELETE', undefined, options)\n    },\n    listStorageCredentials(options) {\n      return callRaw('/storage/credentials', 'GET', undefined, options)\n    },\n    createStorageUploadUrl(input, options) {\n      return callAthena('/storage/files/upload-url', 'POST', input, options)\n    },\n    createStorageUploadUrls(input, options) {\n      return callAthena('/storage/files/upload-urls', 'POST', input, options)\n    },\n    listStorageFiles(input, options) {\n      return callAthena('/storage/files/list', 'POST', input, options)\n    },\n    getStorageFile(fileId, options) {\n      return callAthena(withPathParam('/storage/files/{file_id}', 'file_id', fileId), 'GET', undefined, options)\n    },\n    getStorageFileUrl(fileId, query, options) {\n      const path = appendQuery(\n        withPathParam('/storage/files/{file_id}/url', 'file_id', fileId),\n        query,\n      )\n      return callAthena(path, 'GET', undefined, options)\n    },\n    getStorageFileProxy(fileId, query, options) {\n      const path = appendQuery(\n        withPathParam('/storage/files/{file_id}/proxy', 'file_id', fileId),\n        query,\n      )\n      return callStorageBinaryEndpoint(gateway, storagePath(path), 'GET', options, resolvedRuntimeOptions)\n    },\n    updateStorageFile(fileId, input, options) {\n      return callAthena(withPathParam('/storage/files/{file_id}', 'file_id', fileId), 'PATCH', input, options)\n    },\n    deleteStorageFile(fileId, options) {\n      return callAthena(withPathParam('/storage/files/{file_id}', 'file_id', fileId), 'DELETE', undefined, options)\n    },\n    setStorageFileVisibility(fileId, input, options) {\n      return callStorageFileVisibility(fileId, 'PATCH', input, options)\n    },\n    deleteStorageFolder(input, options) {\n      return callAthena('/storage/folders/delete', 'POST', input, options)\n    },\n    moveStorageFolder(input, options) {\n      return callAthena('/storage/folders/move', 'POST', input, options)\n    },\n  }\n  const multipart: AthenaStorageMultipartNamespace = {\n    create(input, options) {\n      return callAthena('/storage/multipart/create', 'POST', input, options)\n    },\n    signPart(input, options) {\n      return callAthena('/storage/multipart/sign-part', 'POST', input, options)\n    },\n    complete(input, options) {\n      return callAthena('/storage/multipart/complete', 'POST', input, options)\n    },\n    abort(input, options) {\n      return callAthena('/storage/multipart/abort', 'POST', input, options)\n    },\n    listParts(input, options) {\n      return callAthena('/storage/multipart/list-parts', 'POST', input, options)\n    },\n  }\n  const fileFacade = createStorageFileModule(base, runtimeOptions, multipart)\n  const fileUpload = ((\n    input: AthenaStorageFileUploadRequest | Parameters<AthenaStorageFileModule['upload']>[0],\n    options?: AthenaStorageCallOptions,\n  ) => {\n    if (isRecord(input) && 'files' in input) {\n      return fileFacade.upload(input as unknown as Parameters<AthenaStorageFileModule['upload']>[0], options)\n    }\n    return base.createStorageUploadUrl(\n      normalizeUploadUrlRequest(input as AthenaStorageFileUploadRequest),\n      options,\n    ).then(attachUploadHelper)\n  }) as AthenaStorageFileNamespace['upload']\n  const fileDelete = ((input: string | readonly string[], options?: AthenaStorageCallOptions) =>\n    fileFacade.delete(input as unknown as Parameters<AthenaStorageFileModule['delete']>[0], options)\n  ) as AthenaStorageFileNamespace['delete']\n\n  const file: AthenaStorageFileNamespace = {\n    ...fileFacade,\n    upload: fileUpload,\n    uploadMany(input, options) {\n      return base.createStorageUploadUrls(\n        { files: input.files.map(normalizeUploadUrlRequest) },\n        options,\n      ).then(attachUploadHelpers)\n    },\n    confirmUpload(fileId, input, options) {\n      return callAthena(withPathParam('/storage/files/{file_id}/confirm-upload', 'file_id', fileId), 'POST', input ?? {}, options)\n    },\n    uploadBinary(fileId, body, options) {\n      return callStorageUploadBinaryEndpoint(\n        gateway,\n        storagePath(withPathParam('/storage/files/{file_id}/upload', 'file_id', fileId)),\n        body,\n        options,\n        resolvedRuntimeOptions,\n      )\n    },\n    search(input, options) {\n      return callAthena('/storage/files/search', 'POST', input, options)\n    },\n    get(fileId, options) {\n      return base.getStorageFile(fileId, options)\n    },\n    update(fileId, input, options) {\n      return base.updateStorageFile(fileId, input, options)\n    },\n    delete: fileDelete,\n    deleteMany(input, options) {\n      return callAthena('/storage/files/delete-many', 'POST', input, options)\n    },\n    updateMany(input, options) {\n      return callAthena('/storage/files/update-many', 'POST', input, options)\n    },\n    restore(fileId, options) {\n      return callAthena(withPathParam('/storage/files/{file_id}/restore', 'file_id', fileId), 'POST', {}, options)\n    },\n    purge(fileId, options) {\n      return callAthena(withPathParam('/storage/files/{file_id}/purge', 'file_id', fileId), 'DELETE', undefined, options)\n    },\n    copy(fileId, input, options) {\n      return callAthena(withPathParam('/storage/files/{file_id}/copy', 'file_id', fileId), 'POST', input, options)\n    },\n    url(fileId, query, options) {\n      return base.getStorageFileUrl(fileId, query, options)\n    },\n    publicUrl(fileId, options) {\n      return callAthena(withPathParam('/storage/files/{file_id}/public-url', 'file_id', fileId), 'GET', undefined, options)\n    },\n    proxyUrl(fileId, query, options) {\n      const path = appendQuery(\n        withPathParam('/storage/files/{file_id}/proxy-url', 'file_id', fileId),\n        query,\n      )\n      return callAthena(path, 'GET', undefined, options)\n    },\n    proxy(fileId, query, options) {\n      return base.getStorageFileProxy(fileId, query, options)\n    },\n    versions(fileId, options) {\n      return callAthena(withPathParam('/storage/files/{file_id}/versions', 'file_id', fileId), 'GET', undefined, options)\n    },\n    restoreVersion(fileId, versionId, options) {\n      return callAthena(\n        withPathParam(\n          withPathParam('/storage/files/{file_id}/versions/{version_id}/restore', 'file_id', fileId),\n          'version_id',\n          versionId,\n        ),\n        'POST',\n        {},\n        options,\n      )\n    },\n    deleteVersion(fileId, versionId, options) {\n      return callAthena(\n        withPathParam(\n          withPathParam('/storage/files/{file_id}/versions/{version_id}', 'file_id', fileId),\n          'version_id',\n          versionId,\n        ),\n        'DELETE',\n        undefined,\n        options,\n      )\n    },\n    retention: {\n      get(fileId, query, options) {\n        const path = appendQuery(\n          withPathParam('/storage/files/{file_id}/retention', 'file_id', fileId),\n          query,\n        )\n        return callAthena(path, 'GET', undefined, options)\n      },\n      set(fileId, input, options) {\n        return callAthena(withPathParam('/storage/files/{file_id}/retention', 'file_id', fileId), 'POST', input, options)\n      },\n    },\n    visibility: {\n      update(fileId, input, options) {\n        return base.setStorageFileVisibility(fileId, input, options)\n      },\n      set(fileId, input, options) {\n        return callStorageFileVisibility(fileId, 'POST', input, options)\n      },\n      setMany(input, options) {\n        return callAthena('/storage/files/visibility-many', 'POST', input, options)\n      },\n    },\n  }\n  const credentials: AthenaStorageCredentialsNamespace = {\n    list(options) {\n      return base.listStorageCredentials(options)\n    },\n  }\n  const catalog: AthenaStorageCatalogNamespace = {\n    list(options) {\n      return base.listStorageCatalogs(options)\n    },\n    create(input, options) {\n      return base.createStorageCatalog(input, options)\n    },\n    update(id, input, options) {\n      return base.updateStorageCatalog(id, input, options)\n    },\n    delete(id, options) {\n      return base.deleteStorageCatalog(id, options)\n    },\n  }\n  const folder: AthenaStorageFolderNamespace = {\n    list(input, options) {\n      return callAthena('/storage/folders/list', 'POST', input, options)\n    },\n    tree(input, options) {\n      return callAthena('/storage/folders/tree', 'POST', input, options)\n    },\n    delete(input, options) {\n      return base.deleteStorageFolder(input, options)\n    },\n    move(input, options) {\n      return base.moveStorageFolder(input, options)\n    },\n  }\n  const permission: AthenaStoragePermissionNamespace = {\n    list(input, options) {\n      return callAthena('/storage/permissions/list', 'POST', input, options)\n    },\n    grant(input, options) {\n      return callAthena('/storage/permissions/grant', 'POST', input, options)\n    },\n    revoke(input, options) {\n      return callAthena('/storage/permissions/revoke', 'POST', input, options)\n    },\n    check(input, options) {\n      return callAthena('/storage/permissions/check', 'POST', input, options)\n    },\n  }\n  const objectFolder: AthenaStorageObjectFolderNamespace = {\n    create(input, options) {\n      return callAthena('/storage/objects/folder', 'POST', input, options)\n    },\n    delete(input, options) {\n      return callAthena('/storage/objects/folder/delete', 'POST', input, options)\n    },\n    rename(input, options) {\n      return callAthena('/storage/objects/folder/rename', 'POST', input, options)\n    },\n  }\n  const object: AthenaStorageObjectNamespace = {\n    list(input, options) {\n      return callAthena('/storage/objects', 'POST', input, options)\n    },\n    head(input, options) {\n      return callAthena('/storage/objects/head', 'POST', input, options)\n    },\n    exists(input, options) {\n      return callAthena('/storage/objects/exists', 'POST', input, options)\n    },\n    validate(input, options) {\n      return callAthena('/storage/objects/validate', 'POST', input, options)\n    },\n    update(input, options) {\n      return callAthena('/storage/objects/update', 'POST', input, options)\n    },\n    copy(input, options) {\n      return callAthena('/storage/objects/copy', 'POST', input, options)\n    },\n    url(input, options) {\n      return callAthena('/storage/objects/url', 'POST', input, options)\n    },\n    publicUrl(input, options) {\n      return callAthena('/storage/objects/public-url', 'POST', input, options)\n    },\n    delete(input, options) {\n      return callAthena('/storage/objects/delete', 'POST', input, options)\n    },\n    uploadUrl(input, options) {\n      return callAthena('/storage/objects/upload-url', 'POST', input, options)\n    },\n    versions(input, options) {\n      return callAthena('/storage/objects/versions', 'POST', input, options)\n    },\n    restoreVersion(input, options) {\n      return callAthena('/storage/objects/versions/restore', 'POST', input, options)\n    },\n    deleteVersion(input, options) {\n      return callAthena('/storage/objects/versions/delete', 'POST', input, options)\n    },\n    postPolicy(input, options) {\n      return callAthena('/storage/objects/post-policy', 'POST', input, options)\n    },\n    folder: objectFolder,\n  }\n  const bucket: AthenaStorageBucketNamespace = {\n    list(input, options) {\n      return callAthena('/storage/buckets/list', 'POST', input, options)\n    },\n    create(input, options) {\n      return callAthena('/storage/buckets/create', 'POST', input, options)\n    },\n    delete(input, options) {\n      return callAthena('/storage/buckets/delete', 'POST', input, options)\n    },\n    lifecycle: {\n      get(input, options) {\n        return callAthena('/storage/buckets/lifecycle', 'POST', input, options)\n      },\n      set(input, options) {\n        return callAthena('/storage/buckets/lifecycle/set', 'POST', input, options)\n      },\n      delete(input, options) {\n        return callAthena('/storage/buckets/lifecycle/delete', 'POST', input, options)\n      },\n    },\n    policy: {\n      get(input, options) {\n        return callAthena('/storage/buckets/policy', 'POST', input, options)\n      },\n      set(input, options) {\n        return callAthena('/storage/buckets/policy/set', 'POST', input, options)\n      },\n      delete(input, options) {\n        return callAthena('/storage/buckets/policy/delete', 'POST', input, options)\n      },\n    },\n    publicAccess: {\n      get(input, options) {\n        return callAthena('/storage/buckets/public-access', 'POST', input, options)\n      },\n      set(input, options) {\n        return callAthena('/storage/buckets/public-access/set', 'POST', input, options)\n      },\n      delete(input, options) {\n        return callAthena('/storage/buckets/public-access/delete', 'POST', input, options)\n      },\n    },\n    cors: {\n      get(input, options) {\n        return callAthena('/storage/buckets/cors', 'POST', input, options)\n      },\n      set(input, options) {\n        return callAthena('/storage/buckets/cors/set', 'POST', input, options)\n      },\n      delete(input, options) {\n        return callAthena('/storage/buckets/cors/delete', 'POST', input, options)\n      },\n    },\n  }\n  const audit: AthenaStorageAuditNamespace = {\n    list(input, options) {\n      return callAthena('/storage/audit/list', 'POST', input, options)\n    },\n  }\n  const backup = createStorageBackupModule(gateway, resolvedRuntimeOptions)\n  return {\n    ...base,\n    credentials,\n    catalog,\n    file,\n    folder,\n    permission,\n    object,\n    bucket,\n    multipart,\n    audit,\n    backup,\n    delete: file.delete,\n  }\n}\n","import { buildSdkHeaderValue } from '../sdk-version.ts'\nimport { buildServiceRequestHeaders } from '../utils/athena-request-headers.ts'\nimport type {\n  AthenaChatAddMembersRequest,\n  AthenaChatAddReactionRequest,\n  AthenaChatCallOptions,\n  AthenaChatConnectOptions,\n  AthenaChatCreateRoomRequest,\n  AthenaChatDeleteResult,\n  AthenaChatEditMessageRequest,\n  AthenaChatMarkReadUpToRequest,\n  AthenaChatMember,\n  AthenaChatMessage,\n  AthenaChatMessageCreatedResponse,\n  AthenaChatMessagePage,\n  AthenaChatModule,\n  AthenaChatReactionSummary,\n  AthenaChatReadCursor,\n  AthenaChatRealtimeConnection,\n  AthenaChatRealtimeInfoResponse,\n  AthenaChatRealtimeModule,\n  AthenaChatRemoveResult,\n  AthenaChatResumeRoomCursor,\n  AthenaChatRoom,\n  AthenaChatRoomCreatedResponse,\n  AthenaChatRoomPage,\n  AthenaChatSearchMessagesRequest,\n  AthenaChatSearchPage,\n  AthenaChatSendMessageRequest,\n  AthenaChatUpdateRoomRequest,\n  AthenaChatWebSocketFactory,\n  AthenaChatWebSocketLike,\n  AthenaChatWsClientCommand,\n  AthenaChatWsServerEvent,\n  AthenaChatListMessagesQuery,\n  AthenaChatListRoomsQuery,\n} from './types.ts'\n\nconst SDK_NAME = 'xylex-group/athena-chat'\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME)\nexport class AthenaChatError extends Error {\n  status: number\n  endpoint: string\n  method: string\n  requestId?: string\n  body: unknown\n\n  constructor(input: {\n    message: string\n    status: number\n    endpoint: string\n    method: string\n    requestId?: string\n    body: unknown\n  }) {\n    super(input.message)\n    this.name = 'AthenaChatError'\n    this.status = input.status\n    this.endpoint = input.endpoint\n    this.method = input.method\n    this.requestId = input.requestId\n    this.body = input.body\n  }\n}\n\nexport interface AthenaChatClientConfig {\n  baseUrl?: string\n  realtimeInfoUrl?: string\n  apiKey: string\n  client?: string\n  headers?: Record<string, string>\n  bearerToken?: string\n  cookie?: string\n  sessionToken?: string\n  forceNoCache?: boolean\n  wsUrl?: string\n  webSocketFactory?: AthenaChatWebSocketFactory\n}\n\nexport interface InternalChatModuleRuntimeOptions {\n  resolveCallOptions?: () =>\n    | AthenaChatCallOptions\n    | undefined\n    | Promise<AthenaChatCallOptions | undefined>\n}\n\nfunction deriveRealtimeInfoUrl(wsUrl?: string): string | undefined {\n  if (!wsUrl) {\n    return undefined\n  }\n\n  const parsed = new URL(normalizeWsUrl(wsUrl, 'Athena chat WebSocket URL'))\n  parsed.protocol = parsed.protocol === 'wss:' ? 'https:' : 'http:'\n  parsed.pathname = parsed.pathname.replace(/\\/wss\\/gateway$/, '/wss/info')\n  return parsed.toString()\n}\n\nfunction normalizeWsUrl(value: string, label: string): string {\n  const normalized = value.trim()\n  if (!normalized) {\n    throw new Error(`${label} is required.`)\n  }\n\n  let parsed: URL\n  try {\n    parsed = new URL(normalized)\n  } catch {\n    throw new Error(`${label} must be a valid absolute ws(s) URL.`)\n  }\n\n  if (parsed.protocol !== 'ws:' && parsed.protocol !== 'wss:') {\n    throw new Error(`${label} must use ws or wss.`)\n  }\n\n  parsed.pathname = parsed.pathname.replace(/\\/+$/, '')\n  return parsed.toString().replace(/\\/$/, '')\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction parseResponseBody(rawText: string, contentType: string | null) {\n  if (!rawText) {\n    return { parsed: null as unknown, parseFailed: false }\n  }\n\n  const contentTypeSuggestsJson =\n    contentType?.toLowerCase().includes('application/json') ?? false\n  const looksJson =\n    contentTypeSuggestsJson || rawText.startsWith('{') || rawText.startsWith('[')\n\n  if (!looksJson) {\n    return { parsed: rawText as unknown, parseFailed: false }\n  }\n\n  try {\n    return { parsed: JSON.parse(rawText) as unknown, parseFailed: false }\n  } catch {\n    return { parsed: rawText as unknown, parseFailed: true }\n  }\n}\n\nfunction resolveRequestId(headers: Headers): string | undefined {\n  return (\n    headers.get('x-request-id') ??\n    headers.get('x-correlation-id') ??\n    headers.get('x-athena-request-id') ??\n    undefined\n  )\n}\n\nfunction resolveErrorMessage(payload: unknown, fallback: string): string {\n  if (isRecord(payload)) {\n    for (const candidate of [payload.error, payload.message, payload.details]) {\n      if (typeof candidate === 'string' && candidate.trim().length > 0) {\n        return candidate.trim()\n      }\n    }\n  }\n\n  if (typeof payload === 'string' && payload.trim().length > 0) {\n    return payload.trim()\n  }\n\n  return fallback\n}\n\nfunction encodePathSegment(value: string, label: string): string {\n  const normalized = value.trim()\n  if (!normalized) {\n    throw new Error(`${label} is required.`)\n  }\n  return encodeURIComponent(normalized)\n}\n\nfunction encodeQuery(query?: Record<string, unknown>): string {\n  if (!query) {\n    return ''\n  }\n\n  const params = new URLSearchParams()\n  for (const [key, value] of Object.entries(query)) {\n    if (value === undefined || value === null) {\n      continue\n    }\n    if (Array.isArray(value)) {\n      for (const item of value) {\n        if (item !== undefined && item !== null) {\n          params.append(key, String(item))\n        }\n      }\n      continue\n    }\n    params.set(key, String(value))\n  }\n\n  const encoded = params.toString()\n  return encoded ? `?${encoded}` : ''\n}\n\nfunction createSocket(\n  factory: AthenaChatWebSocketFactory,\n  url: string,\n  protocols?: string | string[],\n): AthenaChatWebSocketLike {\n  try {\n    return new (factory as new (\n      socketUrl: string,\n      socketProtocols?: string | string[],\n    ) => AthenaChatWebSocketLike)(url, protocols)\n  } catch (error) {\n    if (error instanceof TypeError) {\n      return (factory as (\n        socketUrl: string,\n        socketProtocols?: string | string[],\n      ) => AthenaChatWebSocketLike)(url, protocols)\n    }\n    throw error\n  }\n}\n\nfunction buildHeaders(\n  config: AthenaChatClientConfig,\n  options?: AthenaChatCallOptions,\n): Record<string, string> {\n  return buildServiceRequestHeaders('chat', SDK_HEADER_VALUE, config, options)\n}\n\nfunction withJsonBody(init: RequestInit, body: unknown): RequestInit {\n  return {\n    ...init,\n    body: body === undefined ? undefined : JSON.stringify(body),\n    headers: {\n      'Content-Type': 'application/json',\n      ...(init.headers as Record<string, string>),\n    },\n  }\n}\n\nasync function request<T>(\n  config: AthenaChatClientConfig,\n  runtimeOptions: InternalChatModuleRuntimeOptions,\n  method: string,\n  endpoint: string,\n  options?: AthenaChatCallOptions,\n  body?: unknown,\n): Promise<T> {\n  if (!config.baseUrl) {\n    throw new Error(\n      'Athena chat base URL is not configured. Pass createClient({ url }) for unified routing or set chat.url explicitly.',\n    )\n  }\n  const url = `${config.baseUrl}${endpoint}`\n  const contextOptions = await runtimeOptions.resolveCallOptions?.()\n  const resolvedOptions = {\n    ...contextOptions,\n    ...options,\n    headers:\n      contextOptions?.headers || options?.headers\n        ? { ...(contextOptions?.headers ?? {}), ...(options?.headers ?? {}) }\n        : undefined,\n  }\n  const init: RequestInit = {\n    method,\n    headers: buildHeaders(config, resolvedOptions),\n    signal: resolvedOptions.signal,\n  }\n  const finalInit =\n    body === undefined || method === 'GET'\n      ? init\n      : withJsonBody(init, body)\n\n  const response = await fetch(url, finalInit)\n  const rawText = await response.text()\n  const { parsed } = parseResponseBody(rawText, response.headers.get('content-type'))\n\n  if (!response.ok) {\n    throw new AthenaChatError({\n      message: resolveErrorMessage(parsed, `Athena chat ${method} ${endpoint} failed with ${response.status}`),\n      status: response.status,\n      endpoint,\n      method,\n      requestId: resolveRequestId(response.headers),\n      body: parsed,\n    })\n  }\n\n  return parsed as T\n}\n\nfunction unwrapEnvelopeData<T extends { data: unknown }>(payload: T): T['data'] {\n  return payload.data\n}\n\nfunction createRealtimeConnection(\n  config: AthenaChatClientConfig,\n  options?: AthenaChatConnectOptions,\n): AthenaChatRealtimeConnection {\n  if (!config.wsUrl) {\n    throw new Error(\n      'Athena chat WebSocket URL is not configured. Pass createClient({ url }) for unified routing or set chat.wsUrl explicitly.',\n    )\n  }\n\n  const wsFactory =\n    config.webSocketFactory ??\n    ((globalThis as unknown as { WebSocket?: AthenaChatWebSocketFactory }).WebSocket)\n\n  if (!wsFactory) {\n    throw new Error(\n      'No WebSocket implementation is available. Provide chat.webSocketFactory in createClient(...) or run in a runtime with global WebSocket support.',\n    )\n  }\n\n  const socket = createSocket(wsFactory, config.wsUrl, options?.protocols)\n\n  const send = (command: AthenaChatWsClientCommand) => {\n    socket.send(JSON.stringify(command))\n  }\n\n  if (options?.onMessage) {\n    const listener = (event: unknown) => {\n      const messageEvent = event as { data?: unknown }\n      const raw = messageEvent?.data\n      if (typeof raw !== 'string') {\n        return\n      }\n      try {\n        options.onMessage?.(JSON.parse(raw) as AthenaChatWsServerEvent | Record<string, unknown>)\n      } catch {\n        options.onMessage?.({ type: 'error', error: 'Invalid JSON message from Athena chat realtime gateway.' })\n      }\n    }\n\n    if (typeof socket.addEventListener === 'function') {\n      socket.addEventListener('message', listener)\n    } else {\n      socket.onmessage = listener as AthenaChatWebSocketLike['onmessage']\n    }\n  }\n\n  const hello = (command?: { token?: string | null; room_subscriptions?: string[] | null }) => {\n    send({\n      type: 'auth.hello',\n      token: command?.token,\n      room_subscriptions: command?.room_subscriptions,\n    })\n  }\n\n  if (options?.hello) {\n    const onOpen = () => hello({\n      token: options.hello?.token ?? undefined,\n      room_subscriptions: options.hello?.room_subscriptions ?? undefined,\n    })\n    if (typeof socket.addEventListener === 'function') {\n      socket.addEventListener('open', onOpen)\n    } else {\n      socket.onopen = onOpen\n    }\n  }\n\n  return {\n    socket,\n    send,\n    hello,\n    subscribe(roomId, fromSeq) {\n      send({\n        type: 'chat.subscribe',\n        room_id: roomId,\n        from_seq: fromSeq ?? undefined,\n      })\n    },\n    unsubscribe(roomId) {\n      send({\n        type: 'chat.unsubscribe',\n        room_id: roomId,\n      })\n    },\n    resume(rooms: AthenaChatResumeRoomCursor[]) {\n      send({\n        type: 'chat.resume',\n        rooms,\n      })\n    },\n    typingStart(roomId) {\n      send({\n        type: 'chat.typing.start',\n        room_id: roomId,\n      })\n    },\n    typingStop(roomId) {\n      send({\n        type: 'chat.typing.stop',\n        room_id: roomId,\n      })\n    },\n    presenceHeartbeat(activeRoomId) {\n      send({\n        type: 'chat.presence.heartbeat',\n        active_room_id: activeRoomId ?? undefined,\n      })\n    },\n    readUpTo(roomId, input) {\n      send({\n        type: 'chat.read.up_to',\n        room_id: roomId,\n        message_id: input?.message_id ?? undefined,\n        seq: input?.seq ?? undefined,\n      })\n    },\n    ping(at = new Date().toISOString()) {\n      send({\n        type: 'ping',\n        at,\n      })\n    },\n    close(code, reason) {\n      socket.close(code, reason)\n    },\n  }\n}\n\nexport function createChatModule(\n  config: AthenaChatClientConfig,\n  runtimeOptions: InternalChatModuleRuntimeOptions = {},\n): AthenaChatModule {\n  const call = <T>(\n    method: string,\n    endpoint: string,\n    options?: AthenaChatCallOptions,\n    body?: unknown,\n  ): Promise<T> => request<T>(config, runtimeOptions, method, endpoint, options, body)\n\n  const realtime: AthenaChatRealtimeModule = {\n    info(options) {\n      const realtimeInfoUrl = config.realtimeInfoUrl ?? deriveRealtimeInfoUrl(config.wsUrl)\n      if (!realtimeInfoUrl) {\n        throw new Error(\n          'Athena chat realtime info URL is not configured. Pass createClient({ url }) for unified routing or set chat.wsUrl explicitly.',\n        )\n      }\n\n      return request<AthenaChatRealtimeInfoResponse>(\n        {\n          ...config,\n          baseUrl: realtimeInfoUrl,\n        },\n        runtimeOptions,\n        'GET',\n        '',\n        options,\n      )\n    },\n    connect(options) {\n      return createRealtimeConnection(config, options)\n    },\n  }\n\n  return {\n    room: {\n      list(query?: AthenaChatListRoomsQuery, options?: AthenaChatCallOptions) {\n        return call<AthenaChatRoomPage>(\n          'GET',\n          `/rooms${encodeQuery(query as Record<string, unknown> | undefined)}`,\n          options,\n        )\n      },\n      create(input: AthenaChatCreateRoomRequest, options?: AthenaChatCallOptions) {\n        return call<AthenaChatRoomCreatedResponse>('POST', '/rooms', options, input)\n      },\n      get(roomId: string, options?: AthenaChatCallOptions) {\n        return call<AthenaChatRoom>(\n          'GET',\n          `/rooms/${encodePathSegment(roomId, 'chat room ID')}`,\n          options,\n        )\n      },\n      update(roomId: string, input: AthenaChatUpdateRoomRequest, options?: AthenaChatCallOptions) {\n        return call<AthenaChatRoom>(\n          'PATCH',\n          `/rooms/${encodePathSegment(roomId, 'chat room ID')}`,\n          options,\n          input,\n        )\n      },\n      archive(roomId: string, options?: AthenaChatCallOptions) {\n        return call<AthenaChatRoom>(\n          'POST',\n          `/rooms/${encodePathSegment(roomId, 'chat room ID')}/archive`,\n          options,\n        )\n      },\n      readCursor: {\n        upTo(roomId: string, input?: AthenaChatMarkReadUpToRequest, options?: AthenaChatCallOptions) {\n          return call<AthenaChatReadCursor>(\n            'POST',\n            `/rooms/${encodePathSegment(roomId, 'chat room ID')}/read-cursor`,\n            options,\n            input ?? {},\n          )\n        },\n      },\n      member: {\n        list(roomId: string, options?: AthenaChatCallOptions) {\n          return call<AthenaChatMember[]>(\n            'GET',\n            `/rooms/${encodePathSegment(roomId, 'chat room ID')}/members`,\n            options,\n          )\n        },\n        add(roomId: string, input: AthenaChatAddMembersRequest, options?: AthenaChatCallOptions) {\n          return call<AthenaChatMember[]>(\n            'POST',\n            `/rooms/${encodePathSegment(roomId, 'chat room ID')}/members`,\n            options,\n            input,\n          )\n        },\n        remove(roomId: string, userId: string, options?: AthenaChatCallOptions) {\n          return call<AthenaChatRemoveResult>(\n            'DELETE',\n            `/rooms/${encodePathSegment(roomId, 'chat room ID')}/members/${encodePathSegment(userId, 'chat user ID')}`,\n            options,\n          )\n        },\n      },\n      message: {\n        list(roomId: string, query?: AthenaChatListMessagesQuery, options?: AthenaChatCallOptions) {\n          return call<AthenaChatMessagePage>(\n            'GET',\n            `/rooms/${encodePathSegment(roomId, 'chat room ID')}/messages${encodeQuery(query as Record<string, unknown> | undefined)}`,\n            options,\n          )\n        },\n        send(roomId: string, input: AthenaChatSendMessageRequest, options?: AthenaChatCallOptions) {\n          return call<AthenaChatMessageCreatedResponse>(\n            'POST',\n            `/rooms/${encodePathSegment(roomId, 'chat room ID')}/messages`,\n            options,\n            input,\n          )\n        },\n        update(roomId: string, messageId: string, input: AthenaChatEditMessageRequest, options?: AthenaChatCallOptions) {\n          return call<AthenaChatMessage>(\n            'PATCH',\n            `/rooms/${encodePathSegment(roomId, 'chat room ID')}/messages/${encodePathSegment(messageId, 'chat message ID')}`,\n            options,\n            input,\n          )\n        },\n        delete(roomId: string, messageId: string, options?: AthenaChatCallOptions) {\n          return call<AthenaChatDeleteResult>(\n            'DELETE',\n            `/rooms/${encodePathSegment(roomId, 'chat room ID')}/messages/${encodePathSegment(messageId, 'chat message ID')}`,\n            options,\n          )\n        },\n      },\n    },\n    message: {\n      reaction: {\n        add(messageId: string, input: AthenaChatAddReactionRequest, options?: AthenaChatCallOptions) {\n          return call<AthenaChatReactionSummary>(\n            'POST',\n            `/messages/${encodePathSegment(messageId, 'chat message ID')}/reactions`,\n            options,\n            input,\n          )\n        },\n        remove(messageId: string, emoji: string, options?: AthenaChatCallOptions) {\n          return call<AthenaChatReactionSummary>(\n            'DELETE',\n            `/messages/${encodePathSegment(messageId, 'chat message ID')}/reactions/${encodePathSegment(emoji, 'reaction emoji')}`,\n            options,\n          )\n        },\n      },\n      search(input: AthenaChatSearchMessagesRequest, options?: AthenaChatCallOptions) {\n        return call<AthenaChatSearchPage>(\n          'POST',\n          '/messages/search',\n          options,\n          input,\n        )\n      },\n    },\n    realtime,\n  }\n}\n\nexport const chatSdkManifest = {\n  namespace: 'chat',\n  basePath: '/chat',\n  methods: [\n    { name: 'listRooms', method: 'GET', path: '/chat/rooms' },\n    { name: 'createRoom', method: 'POST', path: '/chat/rooms' },\n    { name: 'getRoom', method: 'GET', path: '/chat/rooms/{room_id}' },\n    { name: 'updateRoom', method: 'PATCH', path: '/chat/rooms/{room_id}' },\n    { name: 'archiveRoom', method: 'POST', path: '/chat/rooms/{room_id}/archive' },\n    { name: 'listRoomMessages', method: 'GET', path: '/chat/rooms/{room_id}/messages' },\n    { name: 'sendRoomMessage', method: 'POST', path: '/chat/rooms/{room_id}/messages' },\n    { name: 'updateRoomMessage', method: 'PATCH', path: '/chat/rooms/{room_id}/messages/{message_id}' },\n    { name: 'deleteRoomMessage', method: 'DELETE', path: '/chat/rooms/{room_id}/messages/{message_id}' },\n    { name: 'advanceReadCursor', method: 'POST', path: '/chat/rooms/{room_id}/read-cursor' },\n    { name: 'listRoomMembers', method: 'GET', path: '/chat/rooms/{room_id}/members' },\n    { name: 'addRoomMembers', method: 'POST', path: '/chat/rooms/{room_id}/members' },\n    { name: 'removeRoomMember', method: 'DELETE', path: '/chat/rooms/{room_id}/members/{user_id}' },\n    { name: 'addReaction', method: 'POST', path: '/chat/messages/{message_id}/reactions' },\n    { name: 'removeReaction', method: 'DELETE', path: '/chat/messages/{message_id}/reactions/{emoji}' },\n    { name: 'searchMessages', method: 'POST', path: '/chat/messages/search' },\n    { name: 'getRealtimeInfo', method: 'GET', path: '/wss/info' },\n    { name: 'connectRealtime', method: 'GET', path: '/wss/gateway' },\n  ],\n} as const\n\nexport function unwrapChatRoom(payload: AthenaChatRoomCreatedResponse): AthenaChatRoom {\n  return unwrapEnvelopeData(payload) as AthenaChatRoom\n}\n\nexport function unwrapChatMessage(payload: AthenaChatMessageCreatedResponse): AthenaChatMessage {\n  return unwrapEnvelopeData(payload) as AthenaChatMessage\n}\n","import type {\n  AthenaDeletePayload,\n  AthenaFetchPayload,\n  AthenaGatewayCondition,\n  AthenaInsertPayload,\n  AthenaJsonObject,\n  AthenaRpcFilter,\n  AthenaRpcPayload,\n  AthenaSortBy,\n  AthenaUpdatePayload,\n} from './gateway/types.ts'\nimport type {\n  AthenaFindManyOptions,\n  AthenaOrderBy,\n  AthenaSelectShape,\n  AthenaWhere,\n} from './query-ast.ts'\nimport type { AthenaFindManyAstPayload, AthenaSelectTransportPlan } from './query-transport.ts'\n\nconst ATHENA_DEBUG_AST_KEY = '__athenaDebugAst' as const\n\nexport interface AthenaTableBuilderStateAst {\n  conditions: AthenaGatewayCondition[]\n  limit?: number\n  offset?: number\n  order?: AthenaSortBy\n  currentPage?: number\n  pageSize?: number\n  totalPages?: number\n}\n\nexport interface AthenaRpcBuilderStateAst {\n  filters: AthenaRpcFilter[]\n  limit?: number\n  offset?: number\n  order?: {\n    column: string\n    ascending?: boolean\n  }\n}\n\nexport type AthenaDebugQueryEndpoint =\n  | '/gateway/fetch'\n  | '/gateway/insert'\n  | '/gateway/update'\n  | '/gateway/delete'\n  | '/gateway/rpc'\n  | '/gateway/query'\n  | `/rpc/${string}`\n\ninterface AthenaDebugAstBase<TKind extends string> {\n  version: 1\n  kind: TKind\n}\n\nexport type AthenaSelectDebugTransport =\n  | {\n      mode: 'compiled-fetch' | 'structured-fetch'\n      endpoint: '/gateway/fetch'\n      payload: AthenaFetchPayload\n    }\n  | {\n      mode: 'typed-query'\n      endpoint: '/gateway/query'\n      payload: {\n        query: string\n      }\n    }\n\nexport interface AthenaSelectDebugAst extends AthenaDebugAstBase<'select'> {\n  tableName: string\n  input: {\n    columns: string | string[]\n    state: AthenaTableBuilderStateAst\n  }\n  transport: AthenaSelectDebugTransport\n}\n\nexport type AthenaFindManyDebugTransport<\n  Row = Record<string, unknown>,\n  TSelect extends AthenaSelectShape = AthenaSelectShape,\n> =\n  | {\n      mode: 'direct-ast-fetch'\n      endpoint: '/gateway/fetch'\n      payload: AthenaFindManyAstPayload<Row, TSelect>\n    }\n  | {\n      mode: 'compiled-fetch' | 'structured-fetch'\n      endpoint: '/gateway/fetch'\n      payload: AthenaFetchPayload\n    }\n  | {\n      mode: 'compiled-query'\n      endpoint: '/gateway/query'\n      payload: {\n        query: string\n      }\n    }\n\nexport interface AthenaFindManyDebugAst<\n  Row = Record<string, unknown>,\n  TSelect extends AthenaSelectShape = AthenaSelectShape,\n> extends AthenaDebugAstBase<'findMany'> {\n  tableName: string\n  input: {\n    select: TSelect\n    where?: AthenaWhere<Row>\n    orderBy?: AthenaOrderBy<Row>\n    limit?: number\n  }\n  compiled: {\n    columns: string\n    baseState: AthenaTableBuilderStateAst\n    executionState: AthenaTableBuilderStateAst\n  }\n  transport: AthenaFindManyDebugTransport<Row, TSelect>\n}\n\nexport interface AthenaInsertDebugAst extends AthenaDebugAstBase<'insert'> {\n  tableName: string\n  input: {\n    values: AthenaInsertPayload['insert_body']\n    returning?: AthenaInsertPayload['columns']\n    count?: AthenaInsertPayload['count']\n    head?: boolean\n    defaultToNull?: boolean\n  }\n  transport: {\n    mode: 'insert'\n    endpoint: '/gateway/insert'\n    payload: AthenaInsertPayload\n  }\n}\n\nexport interface AthenaUpsertDebugAst extends AthenaDebugAstBase<'upsert'> {\n  tableName: string\n  input: {\n    values: AthenaInsertPayload['insert_body']\n    updateBody?: AthenaInsertPayload['update_body']\n    onConflict?: AthenaInsertPayload['on_conflict']\n    returning?: AthenaInsertPayload['columns']\n    count?: AthenaInsertPayload['count']\n    head?: boolean\n    defaultToNull?: boolean\n  }\n  transport: {\n    mode: 'upsert'\n    endpoint: '/gateway/insert'\n    payload: AthenaInsertPayload\n  }\n}\n\nexport interface AthenaUpdateDebugAst extends AthenaDebugAstBase<'update'> {\n  tableName: string\n  input: {\n    values: AthenaUpdatePayload['update_body']\n    state: AthenaTableBuilderStateAst\n    returning?: AthenaUpdatePayload['columns']\n  }\n  transport: {\n    mode: 'update'\n    endpoint: '/gateway/update'\n    payload: AthenaUpdatePayload\n  }\n}\n\nexport interface AthenaDeleteDebugAst extends AthenaDebugAstBase<'delete'> {\n  tableName: string\n  input: {\n    resourceId?: AthenaDeletePayload['resource_id']\n    state: AthenaTableBuilderStateAst\n    returning?: AthenaDeletePayload['columns']\n  }\n  transport: {\n    mode: 'delete'\n    endpoint: '/gateway/delete'\n    payload: AthenaDeletePayload\n  }\n}\n\nexport interface AthenaRpcDebugAst extends AthenaDebugAstBase<'rpc'> {\n  functionName: string\n  input: {\n    args?: AthenaJsonObject\n    select?: string | string[]\n    state: AthenaRpcBuilderStateAst\n  }\n  transport: {\n    mode: 'rpc-post' | 'rpc-get'\n    endpoint: '/gateway/rpc' | `/rpc/${string}`\n    payload: AthenaRpcPayload\n  }\n}\n\nexport interface AthenaRawQueryDebugAst extends AthenaDebugAstBase<'query'> {\n  input: {\n    query: string\n  }\n  transport: {\n    mode: 'raw-query'\n    endpoint: '/gateway/query'\n    payload: {\n      query: string\n    }\n  }\n}\n\nexport type AthenaQueryDebugAst =\n  | AthenaSelectDebugAst\n  | AthenaFindManyDebugAst\n  | AthenaInsertDebugAst\n  | AthenaUpsertDebugAst\n  | AthenaUpdateDebugAst\n  | AthenaDeleteDebugAst\n  | AthenaRpcDebugAst\n  | AthenaRawQueryDebugAst\n\nfunction cloneConditions(conditions: AthenaGatewayCondition[]): AthenaGatewayCondition[] {\n  return conditions.map(condition => ({ ...condition }))\n}\n\nexport function cloneTableBuilderStateAst(\n  state: AthenaTableBuilderStateAst,\n): AthenaTableBuilderStateAst {\n  return {\n    conditions: cloneConditions(state.conditions),\n    limit: state.limit,\n    offset: state.offset,\n    order: state.order ? { ...state.order } : undefined,\n    currentPage: state.currentPage,\n    pageSize: state.pageSize,\n    totalPages: state.totalPages,\n  }\n}\n\nexport function cloneRpcBuilderStateAst(\n  state: AthenaRpcBuilderStateAst,\n): AthenaRpcBuilderStateAst {\n  return {\n    filters: state.filters.map(filter => ({ ...filter })),\n    limit: state.limit,\n    offset: state.offset,\n    order: state.order ? { ...state.order } : undefined,\n  }\n}\n\nfunction toSelectTransportAst(plan: AthenaSelectTransportPlan): AthenaSelectDebugTransport {\n  if (plan.kind === 'query') {\n    return {\n      mode: 'typed-query',\n      endpoint: '/gateway/query',\n      payload: plan.payload,\n    }\n  }\n\n  return {\n    mode: plan.payload.select !== undefined ? 'structured-fetch' : 'compiled-fetch',\n    endpoint: '/gateway/fetch',\n    payload: plan.payload,\n  }\n}\n\nfunction resolveDebugTableName(tableName: string | undefined): string {\n  return tableName ?? '__unknown_table__'\n}\n\nexport function buildSelectDebugAst(input: {\n  tableName: string\n  columns: string | string[]\n  state: AthenaTableBuilderStateAst\n  plan: AthenaSelectTransportPlan\n}): AthenaSelectDebugAst {\n  return {\n    version: 1,\n    kind: 'select',\n    tableName: input.tableName,\n    input: {\n      columns: input.columns,\n      state: cloneTableBuilderStateAst(input.state),\n    },\n    transport: toSelectTransportAst(input.plan),\n  }\n}\n\nexport function buildFindManyCompiledDebugAst<\n  Row,\n  TSelect extends AthenaSelectShape,\n>(input: {\n  tableName: string\n  /** Already validated at the public `findMany` callsite. */\n  options: AthenaFindManyOptions<Row, TSelect>\n  compiledColumns: string\n  baseState: AthenaTableBuilderStateAst\n  executionState: AthenaTableBuilderStateAst\n  plan: AthenaSelectTransportPlan\n}): AthenaFindManyDebugAst<Row, TSelect> {\n  return {\n    version: 1,\n    kind: 'findMany',\n    tableName: input.tableName,\n    input: {\n      select: input.options.select,\n      where: input.options.where,\n      orderBy: input.options.orderBy,\n      limit: input.options.limit,\n    },\n    compiled: {\n      columns: input.compiledColumns,\n      baseState: cloneTableBuilderStateAst(input.baseState),\n      executionState: cloneTableBuilderStateAst(input.executionState),\n    },\n    transport: planToFindManyTransport<Row, TSelect>(input.plan),\n  }\n}\n\nexport function buildFindManyDirectDebugAst<\n  Row,\n  TSelect extends AthenaSelectShape,\n>(input: {\n  tableName: string\n  /** Already validated at the public `findMany` callsite. */\n  options: AthenaFindManyOptions<Row, TSelect>\n  compiledColumns: string\n  baseState: AthenaTableBuilderStateAst\n  executionState: AthenaTableBuilderStateAst\n  payload: AthenaFindManyAstPayload<Row, TSelect>\n}): AthenaFindManyDebugAst<Row, TSelect> {\n  return {\n    version: 1,\n    kind: 'findMany',\n    tableName: input.tableName,\n    input: {\n      select: input.options.select,\n      where: input.options.where,\n      orderBy: input.options.orderBy,\n      limit: input.options.limit,\n    },\n    compiled: {\n      columns: input.compiledColumns,\n      baseState: cloneTableBuilderStateAst(input.baseState),\n      executionState: cloneTableBuilderStateAst(input.executionState),\n    },\n    transport: {\n      mode: 'direct-ast-fetch',\n      endpoint: '/gateway/fetch',\n      payload: input.payload,\n    },\n  }\n}\n\nfunction planToFindManyTransport<\n  Row,\n  TSelect extends AthenaSelectShape,\n>(\n  plan: AthenaSelectTransportPlan,\n): AthenaFindManyDebugTransport<Row, TSelect> {\n  if (plan.kind === 'query') {\n    return {\n      mode: 'compiled-query',\n      endpoint: '/gateway/query',\n      payload: plan.payload,\n    }\n  }\n\n  return {\n    mode: plan.payload.select !== undefined ? 'structured-fetch' : 'compiled-fetch',\n    endpoint: '/gateway/fetch',\n    payload: plan.payload,\n  }\n}\n\nexport function buildInsertDebugAst(payload: AthenaInsertPayload): AthenaInsertDebugAst {\n  return {\n    version: 1,\n    kind: 'insert',\n    tableName: payload.table_name,\n    input: {\n      values: payload.insert_body,\n      returning: payload.columns,\n      count: payload.count,\n      head: payload.head,\n      defaultToNull: payload.default_to_null,\n    },\n    transport: {\n      mode: 'insert',\n      endpoint: '/gateway/insert',\n      payload,\n    },\n  }\n}\n\nexport function buildUpsertDebugAst(payload: AthenaInsertPayload): AthenaUpsertDebugAst {\n  return {\n    version: 1,\n    kind: 'upsert',\n    tableName: payload.table_name,\n    input: {\n      values: payload.insert_body,\n      updateBody: payload.update_body,\n      onConflict: payload.on_conflict,\n      returning: payload.columns,\n      count: payload.count,\n      head: payload.head,\n      defaultToNull: payload.default_to_null,\n    },\n    transport: {\n      mode: 'upsert',\n      endpoint: '/gateway/insert',\n      payload,\n    },\n  }\n}\n\nexport function buildUpdateDebugAst(input: {\n  state: AthenaTableBuilderStateAst\n  payload: AthenaUpdatePayload\n}): AthenaUpdateDebugAst {\n  return {\n    version: 1,\n    kind: 'update',\n    tableName: resolveDebugTableName(input.payload.table_name),\n    input: {\n      values: input.payload.update_body,\n      state: cloneTableBuilderStateAst(input.state),\n      returning: input.payload.columns,\n    },\n    transport: {\n      mode: 'update',\n      endpoint: '/gateway/update',\n      payload: input.payload,\n    },\n  }\n}\n\nexport function buildDeleteDebugAst(input: {\n  state: AthenaTableBuilderStateAst\n  payload: AthenaDeletePayload\n}): AthenaDeleteDebugAst {\n  return {\n    version: 1,\n    kind: 'delete',\n    tableName: input.payload.table_name,\n    input: {\n      resourceId: input.payload.resource_id,\n      state: cloneTableBuilderStateAst(input.state),\n      returning: input.payload.columns,\n    },\n    transport: {\n      mode: 'delete',\n      endpoint: '/gateway/delete',\n      payload: input.payload,\n    },\n  }\n}\n\nexport function buildRpcDebugAst(input: {\n  functionName: string\n  args?: AthenaJsonObject\n  selectedColumns?: string | string[]\n  state: AthenaRpcBuilderStateAst\n  payload: AthenaRpcPayload\n  endpoint: '/gateway/rpc' | `/rpc/${string}`\n}): AthenaRpcDebugAst {\n  return {\n    version: 1,\n    kind: 'rpc',\n    functionName: input.functionName,\n    input: {\n      args: input.args,\n      select: input.selectedColumns,\n      state: cloneRpcBuilderStateAst(input.state),\n    },\n    transport: {\n      mode: input.endpoint === '/gateway/rpc' ? 'rpc-post' : 'rpc-get',\n      endpoint: input.endpoint,\n      payload: input.payload,\n    },\n  }\n}\n\nexport function buildRawQueryDebugAst(query: string): AthenaRawQueryDebugAst {\n  return {\n    version: 1,\n    kind: 'query',\n    input: {\n      query,\n    },\n    transport: {\n      mode: 'raw-query',\n      endpoint: '/gateway/query',\n      payload: {\n        query,\n      },\n    },\n  }\n}\n\nexport function attachAthenaDebugAst(\n  target: unknown,\n  ast: AthenaQueryDebugAst | undefined,\n): void {\n  if (!ast) {\n    return\n  }\n  if (!target || (typeof target !== 'object' && typeof target !== 'function')) {\n    return\n  }\n  Object.defineProperty(target, ATHENA_DEBUG_AST_KEY, {\n    value: ast,\n    enumerable: false,\n    configurable: true,\n    writable: false,\n  })\n}\n\nexport function getAthenaDebugAst(\n  value: unknown,\n): AthenaQueryDebugAst | null {\n  if (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n    return null\n  }\n  return ((value as Record<string, unknown>)[ATHENA_DEBUG_AST_KEY] as AthenaQueryDebugAst | undefined) ?? null\n}\n","import { attachAthenaDebugAst } from './query-debug-ast.ts'\nimport type {\n  InternalClientBehaviorOptions,\n  AthenaQueryTraceCallsite,\n  AthenaQueryTraceEvent,\n  AthenaResult,\n} from './client.ts'\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaRpcCallOptions,\n} from './gateway/types.ts'\nimport type { AthenaQueryDebugAst } from './query-debug-ast.ts'\n\nconst QUERY_TRACE_STACK_SKIP_PATTERNS = [\n  'src\\\\client.ts',\n  'src/client.ts',\n  'src\\\\query-tracing.ts',\n  'src/query-tracing.ts',\n  'src\\\\v3-client.ts',\n  'src/v3-client.ts',\n  'dist\\\\client.',\n  'dist/client.',\n  'dist\\\\query-tracing.',\n  'dist/query-tracing.',\n  'dist\\\\v3-client.',\n  'dist/v3-client.',\n  'node_modules\\\\@xylex-group\\\\athena',\n  'node_modules/@xylex-group/athena',\n  'node:internal',\n  'internal/process',\n] as const\n\ntype AthenaTraceOperation = AthenaQueryTraceEvent['operation']\ntype AthenaTraceEndpoint = AthenaQueryTraceEvent['endpoint']\n\nexport interface AthenaTraceContext {\n  operation: AthenaTraceOperation\n  endpoint: AthenaTraceEndpoint\n  table?: string\n  functionName?: string\n  sql: string\n  payload: unknown\n  ast?: AthenaQueryDebugAst\n  options?: AthenaGatewayCallOptions | AthenaRpcCallOptions\n}\n\nexport type AthenaQueryTracer = {\n  captureCallsite: () => AthenaQueryTraceCallsite | null\n  publishSuccess: <T>(\n    context: AthenaTraceContext,\n    result: AthenaResult<T>,\n    durationMs: number,\n    callsite: AthenaQueryTraceCallsite | null,\n  ) => void\n  publishFailure: (\n    context: AthenaTraceContext,\n    error: unknown,\n    durationMs: number,\n    callsite: AthenaQueryTraceCallsite | null,\n  ) => void\n}\n\nexport type AthenaTraceCallsiteStore = {\n  resolve: (callsite?: AthenaQueryTraceCallsite | null) => AthenaQueryTraceCallsite | null\n}\n\nfunction parseQueryTraceCallsiteFrame(frame: string): AthenaQueryTraceCallsite | null {\n  const trimmed = frame.trim()\n  if (!trimmed) {\n    return null\n  }\n\n  let body = trimmed.replace(/^at\\s+/, '')\n  if (body.startsWith('async ')) {\n    body = body.slice(6)\n  }\n\n  let functionName: string | undefined\n  let location = body\n  const wrappedMatch = body.match(/^(.*?)\\s+\\((.*)\\)$/)\n  if (wrappedMatch) {\n    functionName = wrappedMatch[1].trim() || undefined\n    location = wrappedMatch[2].trim()\n  }\n\n  const locationMatch = location.match(/^(.*):(\\d+):(\\d+)$/)\n  if (!locationMatch) {\n    return null\n  }\n\n  const filePath = locationMatch[1].replace(/^file:\\/\\//, '')\n  const line = Number(locationMatch[2])\n  const column = Number(locationMatch[3])\n  if (!Number.isFinite(line) || !Number.isFinite(column)) {\n    return null\n  }\n\n  const normalizedPath = filePath.replace(/\\\\/g, '/')\n  const fileName = normalizedPath.split('/').at(-1) ?? filePath\n  return {\n    filePath,\n    fileName,\n    line,\n    column,\n    frame: trimmed,\n    functionName,\n  }\n}\n\nfunction captureQueryTraceCallsite(): AthenaQueryTraceCallsite | null {\n  const stack = new Error().stack\n  if (!stack) return null\n  const frames = stack\n    .split('\\n')\n    .slice(2)\n    .map(frame => frame.trim())\n    .filter(Boolean)\n\n  for (const frame of frames) {\n    if (QUERY_TRACE_STACK_SKIP_PATTERNS.some(pattern => frame.includes(pattern))) {\n      continue\n    }\n    const callsite = parseQueryTraceCallsiteFrame(frame)\n    if (callsite) return callsite\n  }\n\n  const fallback = frames.find(frame => !frame.includes('captureQueryTraceCallsite'))\n  return fallback ? parseQueryTraceCallsiteFrame(fallback) : null\n}\n\nfunction defaultQueryTraceLogger(event: AthenaQueryTraceEvent): void {\n  const target = event.table ?? event.functionName ?? 'gateway'\n  const outcomeState = event.outcome?.error ? 'error' : 'ok'\n  const banner = `[athena-js][trace] ${event.operation.toUpperCase()} ${event.endpoint} ${target} ${event.durationMs}ms ${outcomeState}`\n  console.info(banner, event)\n}\n\nexport function captureTraceCallsite(tracer?: AthenaQueryTracer): AthenaQueryTraceCallsite | null {\n  return tracer?.captureCallsite() ?? null\n}\n\nexport function createTraceCallsiteStore(\n  tracer?: AthenaQueryTracer,\n  initialCallsite?: AthenaQueryTraceCallsite | null,\n): AthenaTraceCallsiteStore {\n  let storedCallsite = initialCallsite ?? undefined\n\n  return {\n    resolve(callsite) {\n      if (callsite) {\n        storedCallsite = callsite\n        return callsite\n      }\n      if (storedCallsite !== undefined) {\n        return storedCallsite\n      }\n      const capturedCallsite = captureTraceCallsite(tracer)\n      if (capturedCallsite) {\n        storedCallsite = capturedCallsite\n      }\n      return capturedCallsite\n    },\n  }\n}\n\nexport function createQueryTracer(\n  behavior?: InternalClientBehaviorOptions,\n): AthenaQueryTracer | undefined {\n  const traceOption = behavior?.traceQueries\n  if (!traceOption) {\n    return undefined\n  }\n\n  const logger =\n    typeof traceOption === 'object' && traceOption.logger ? traceOption.logger : defaultQueryTraceLogger\n\n  const emit = (event: AthenaQueryTraceEvent) => {\n    try {\n      logger(event)\n    } catch (error) {\n      console.warn('[athena-js][trace] logger failed', error)\n    }\n  }\n\n  return {\n    captureCallsite: captureQueryTraceCallsite,\n    publishSuccess<T>(\n      context: AthenaTraceContext,\n      result: AthenaResult<T>,\n      durationMs: number,\n      callsite: AthenaQueryTraceCallsite | null,\n    ) {\n      emit({\n        timestamp: new Date().toISOString(),\n        durationMs,\n        operation: context.operation,\n        endpoint: context.endpoint,\n        table: context.table,\n        functionName: context.functionName,\n        sql: context.sql,\n        payload: context.payload,\n        ast: context.ast,\n        options: context.options,\n        callsite,\n        outcome: {\n          status: result.status,\n          error: result.error,\n          errorDetails: result.errorDetails ?? null,\n          count: result.count ?? null,\n          data: result.data,\n          raw: result.raw,\n        },\n      })\n    },\n    publishFailure(\n      context: AthenaTraceContext,\n      error: unknown,\n      durationMs: number,\n      callsite: AthenaQueryTraceCallsite | null,\n    ) {\n      emit({\n        timestamp: new Date().toISOString(),\n        durationMs,\n        operation: context.operation,\n        endpoint: context.endpoint,\n        table: context.table,\n        functionName: context.functionName,\n        sql: context.sql,\n        payload: context.payload,\n        ast: context.ast,\n        options: context.options,\n        callsite,\n        thrownError: error,\n      })\n    },\n  }\n}\n\nexport async function executeWithQueryTrace<T>(\n  tracer: AthenaQueryTracer | undefined,\n  context: AthenaTraceContext,\n  runner: () => Promise<AthenaResult<T>>,\n  callsiteOverride?: AthenaQueryTraceCallsite | null,\n): Promise<AthenaResult<T>> {\n  const callsite = tracer ? (callsiteOverride ?? tracer.captureCallsite()) : null\n  const startedAt = tracer ? Date.now() : 0\n  try {\n    const result = await runner()\n    attachAthenaDebugAst(result, context.ast)\n    if (tracer) {\n      tracer.publishSuccess(context, result, Date.now() - startedAt, callsite)\n    }\n    return result\n  } catch (error) {\n    attachAthenaDebugAst(error, context.ast)\n    if (tracer) {\n      tracer.publishFailure(context, error, Date.now() - startedAt, callsite)\n    }\n    throw error\n  }\n}\n","import type { AthenaModelTarget } from './types.ts'\n\ninterface ResolveAthenaModelTargetTableNameOptions {\n  fallbackSchema?: string\n  fallbackModel?: string\n}\n\nfunction normalizeOptionalName(value: string | undefined): string | undefined {\n  const normalized = value?.trim()\n  return normalized ? normalized : undefined\n}\n\nexport function isAthenaModelTarget(value: unknown): value is AthenaModelTarget {\n  if (!value || typeof value !== 'object') {\n    return false\n  }\n\n  const candidate = value as { meta?: { primaryKey?: unknown } }\n  return Boolean(candidate.meta && Array.isArray(candidate.meta.primaryKey))\n}\n\nexport function resolveAthenaModelTargetTableName(\n  target: AthenaModelTarget,\n  options: ResolveAthenaModelTargetTableNameOptions = {},\n): string {\n  const explicitTableName = normalizeOptionalName(target.meta.tableName)\n  if (explicitTableName) {\n    return explicitTableName\n  }\n\n  const schemaName = normalizeOptionalName(target.meta.schema ?? options.fallbackSchema)\n  const modelName = normalizeOptionalName(target.meta.model ?? options.fallbackModel)\n\n  if (!modelName) {\n    throw new Error(\n      'Athena model target is missing meta.model or meta.tableName. Provide one of those before calling from(model).',\n    )\n  }\n\n  return schemaName ? `${schemaName}.${modelName}` : modelName\n}\n","import type {\n  AthenaConditionArrayValue,\n  AthenaConditionCastType,\n  AthenaConditionOperator,\n  AthenaConditionValue,\n  AthenaDeletePayload,\n  AthenaGatewayCallOptions,\n  AthenaGatewayConnectionOptions,\n  AthenaGatewayConnectionResult,\n  AthenaGatewayCondition,\n  AthenaGatewayErrorDetails,\n  AthenaInsertPayload,\n  AthenaJsonObject,\n  AthenaJsonValue,\n  AthenaRpcCallOptions,\n  AthenaRpcFilter,\n  AthenaRpcFilterOperator,\n  AthenaRpcPayload,\n  AthenaSortBy,\n  AthenaUpdatePayload,\n} from './gateway/types.ts'\nimport type { BackendConfig } from './gateway/types.ts'\nimport {\n  createResultFormatter,\n  executeRead,\n  toSingleResult,\n} from './client-result.ts'\nimport type {\n  AthenaResult,\n  AthenaResultError,\n  AthenaResultFormatter,\n} from './client-result.ts'\nimport {\n  buildDebugSelectQuery,\n  buildDeleteDebugSql,\n  buildInsertDebugSql,\n  buildRpcDebugSql,\n  buildTypedSelectQuery,\n  buildUpdateDebugSql,\n  resolveTableNameForCall,\n} from './client-sql.ts'\nexport type { AthenaResult, AthenaResultError } from './client-result.ts'\nimport { createAthenaRequest } from './client-request.ts'\nimport type {\n  AthenaRequestOptions,\n  AthenaRequestResponse,\n} from './client-request.ts'\nexport type {\n  AthenaRequestMethod,\n  AthenaRequestOptions,\n  AthenaRequestQueryValueMap,\n  AthenaRequestResponse,\n  AthenaRequestService,\n} from './client-request.ts'\nimport { normalizeAthenaGatewayBaseUrl } from './gateway/url.ts'\nimport {\n  createAthenaGatewayClient,\n  createAthenaGatewayClientView,\n  type AthenaGatewayClient,\n} from './gateway/client.ts'\nimport { createAuthModule } from './auth/client.ts'\nimport type { AthenaAuthBindings, AthenaAuthClientConfig } from './auth/types.ts'\nimport type { AthenaDbModule } from './db/module.ts'\nimport { createStorageModule } from './storage/module.ts'\nimport type { AthenaStorageClientConfig, AthenaStorageModule } from './storage/module.ts'\nimport { createChatModule } from './chat/module.ts'\nimport type { AthenaChatModule, AthenaChatWebSocketFactory } from './chat/types.ts'\nimport {\n  compileOrderBy,\n  compileSelectShape,\n  compileWhere,\n  selectShapeUsesRelationSchema,\n  shouldUseUuidTextComparison,\n} from './query-ast.ts'\nimport type {\n  AthenaFindManyOptions,\n  AthenaFindManyResult,\n  AthenaSelectShape,\n  AthenaValidatedSelectShape,\n} from './query-ast.ts'\nimport {\n  canUseFindManyAstTransport,\n  createSelectTransportPlan,\n  findManyAstWhereRequiresLegacyTransport,\n  normalizeFindManyAstWhere,\n  toFindManyAstOrder,\n} from './query-transport.ts'\nimport type { AthenaFindManyAstPayload } from './query-transport.ts'\nimport {\n  buildDeleteDebugAst,\n  buildFindManyCompiledDebugAst,\n  buildFindManyDirectDebugAst,\n  buildInsertDebugAst,\n  buildRawQueryDebugAst,\n  buildRpcDebugAst,\n  buildSelectDebugAst,\n  buildUpdateDebugAst,\n  buildUpsertDebugAst,\n} from './query-debug-ast.ts'\nimport type { AthenaQueryDebugAst } from './query-debug-ast.ts'\nimport {\n  captureTraceCallsite,\n  createQueryTracer,\n  createTraceCallsiteStore,\n  executeWithQueryTrace,\n} from './query-tracing.ts'\nimport type {\n  AthenaQueryTracer,\n} from './query-tracing.ts'\nimport {\n  isAthenaModelTarget,\n  resolveAthenaModelTargetTableName,\n} from './schema/model-target.ts'\nimport type {\n  AthenaSelectInput,\n  AthenaTypecheckedColumnKey,\n  AthenaValidatedSelectInput,\n} from './select-column-types.ts'\n\nexport type {\n  AthenaColumnKey,\n  AthenaColumnKeyWithAutocomplete,\n  AthenaResolvedColumnKey,\n  AthenaSelectArrayElement,\n  AthenaSelectColumnsFor,\n  AthenaSelectInput,\n  AthenaSelectInputHints,\n  AthenaTypecheckedColumnKey,\n  AthenaValidatedSelectInput,\n  HasKnownSelectColumns,\n} from './select-column-types.ts'\nimport type {\n  AthenaClientModelsInput,\n  AthenaClientModelForTableName,\n  AthenaClientTableName,\n  AthenaModelTarget,\n  InsertOf,\n  RowOf,\n  UpdateOf,\n} from './schema/types.ts'\n\nexport interface InternalClientBehaviorOptions {\n  /**\n   * Retry retryable read failures (`select`, `findMany`, `query`) with a fixed internal policy.\n   *\n   * Applies two additional attempts with exponential backoff and jitter.\n   */\n  retryReads?: boolean\n  /**\n   * Emit execution diagnostics for every query/mutation/RPC invocation.\n   * Includes payload, synthesized SQL, full outcome, and best-effort callsite metadata.\n   */\n  traceQueries?: boolean | AthenaQueryTraceOptions\n  /**\n   * Build and attach a normalized operation AST for runtime debugging.\n   *\n   * When enabled, successful Athena results expose a non-enumerable debug AST\n   * that can be read with `getAthenaDebugAst(...)`. If tracing is also enabled,\n   * the same AST is included on emitted trace events.\n   */\n  debugAst?: boolean\n  /**\n   * Send the original `findMany(...)` AST body for clean object-select reads.\n   * This requires gateway support and falls back to legacy compiled transport\n   * when a chain carries filter/pagination state that the AST payload cannot\n   * represent losslessly yet.\n   */\n  findManyAst?: boolean\n}\n\nexport interface AthenaQueryTraceOptions {\n  /**\n   * Custom sink for trace events. Defaults to console.info.\n   */\n  logger?: (event: AthenaQueryTraceEvent) => void\n}\n\nexport interface AthenaQueryTraceCallsite {\n  filePath: string\n  fileName: string\n  line: number\n  column: number\n  frame?: string\n  functionName?: string\n}\n\nexport interface AthenaQueryTraceEvent {\n  timestamp: string\n  durationMs: number\n  operation: 'select' | 'insert' | 'upsert' | 'update' | 'delete' | 'rpc' | 'query'\n  endpoint: '/gateway/fetch' | '/gateway/insert' | '/gateway/update' | '/gateway/delete' | '/gateway/rpc' | '/gateway/query' | `/rpc/${string}`\n  table?: string\n  functionName?: string\n  sql: string\n  payload: unknown\n  ast?: AthenaQueryDebugAst\n  options?: AthenaGatewayCallOptions | AthenaRpcCallOptions\n  callsite: AthenaQueryTraceCallsite | null\n  outcome?: {\n    status: number\n    error: AthenaResultError | null\n    errorDetails?: AthenaGatewayErrorDetails | null\n    count?: number | null\n    data: unknown\n    raw: unknown\n  }\n  thrownError?: unknown\n}\n\ntype TableBuilderState = {\n  conditions: AthenaGatewayCondition[]\n  limit?: number\n  offset?: number\n  order?: AthenaSortBy\n  currentPage?: number\n  pageSize?: number\n  totalPages?: number\n}\n\ntype ConditionCastHints = {\n  valueCast?: AthenaConditionCastType\n  columnCast?: AthenaConditionCastType\n}\n\ntype MutationSingleResult<Result> = Result extends Array<infer Item> ? Item | null : Result | null\ntype MutationResultRow<Result> = Result extends Array<infer Item> ? Item : Result\ntype AthenaRowShape = Record<string, AthenaJsonValue | undefined>\ntype FilterColumnKey<Row> = Extract<keyof NonNullable<Row>, string>\n/** Known keys when the row shape is concrete; `string` when untyped / index signature. */\ntype ResolvedFilterColumnKey<Row> = [FilterColumnKey<Row>] extends [never]\n  ? string\n  : string extends FilterColumnKey<Row>\n    ? string\n    : FilterColumnKey<Row>\n/**\n * Table-name argument for free-form `from<Row>(table)`.\n * - No client `models` → `string` (nothing to complete).\n * - With `models` → known bare/qualified names (IntelliSense + reject unknowns).\n *   Prefer `.from(\"users\")` without a row generic so the row type is inferred from the model.\n */\ntype UntypedTableName<TModels> = [TModels] extends [never]\n  ? string\n  : [AthenaClientTableName<TModels>] extends [never]\n    ? string\n    : AthenaClientTableName<TModels>\ntype ResolvedClientTableModel<TModels, TTableName extends string> = Extract<\n  AthenaClientModelForTableName<TModels, TTableName>,\n  AthenaModelTarget\n>\ntype ClientTableQueryBuilder<\n  TModels,\n  TTableName extends string,\n> = TableQueryBuilder<\n  RowOf<ResolvedClientTableModel<TModels, TTableName>>,\n  InsertOf<ResolvedClientTableModel<TModels, TTableName>>,\n  UpdateOf<ResolvedClientTableModel<TModels, TTableName>>\n>\n/**\n * Select/returning/single column input.\n *\n * - Typed row: validates string lists; arrays use the model-key union.\n * - Untyped row: plain `TValue` (`string | string[]`).\n */\ntype SelectColumnsFor<\n  Row,\n  TValue extends AthenaSelectInput,\n> = AthenaValidatedSelectInput<Row, TValue>\nconst DEFAULT_COLUMNS = '*'\n\ntype SelectDebugAstFactory = (input: {\n  tableName: string\n  columns: string | string[]\n  executionState: TableBuilderState\n  plan: ReturnType<typeof createSelectTransportPlan>\n}) => AthenaQueryDebugAst\n\nexport interface MutationQuery<\n  Result,\n  Row = MutationResultRow<Result>,\n> extends PromiseLike<AthenaResult<Result>> {\n  select<const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<Result>>\n  returning<const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<Result>>\n  single<const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<MutationSingleResult<Result>>>\n  maybeSingle<const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<MutationSingleResult<Result>>>\n  then<TResult1 = AthenaResult<Result>, TResult2 = never>(\n    onfulfilled?: ((value: AthenaResult<Result>) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n    onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n  ): Promise<TResult1 | TResult2>\n  catch<TResult = never>(\n    onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | undefined | null,\n  ): Promise<AthenaResult<Result> | TResult>\n  finally(onfinally?: (() => void) | undefined | null): Promise<AthenaResult<Result>>\n}\n\nfunction mergeOptions<T extends { headers?: Record<string, string> }>(\n  ...options: Array<T | undefined>\n): T | undefined {\n  return options.reduce<T | undefined>((acc, next) => {\n    if (!next) return acc\n    const merged = { ...(acc ?? {}), ...next } as T\n    if (acc?.headers || next.headers) {\n      merged.headers = {\n        ...(acc?.headers ?? {}),\n        ...(next.headers ?? {}),\n      }\n    }\n    return merged\n  }, undefined)\n}\n\nfunction asAthenaJsonObject(value: unknown): AthenaJsonObject {\n  return value as unknown as AthenaJsonObject\n}\n\nfunction asAthenaJsonObjectArray(values: unknown[]): AthenaJsonObject[] {\n  return values as unknown as AthenaJsonObject[]\n}\n\nfunction normalizeSelectColumnsInput(columns?: AthenaSelectInput): string | string[] | undefined {\n  if (columns === undefined) {\n    return undefined\n  }\n  if (typeof columns === 'string') {\n    return columns\n  }\n  return [...columns]\n}\n\nfunction createMutationQuery<\n  Result,\n  Row = MutationResultRow<Result>,\n>(\n  executor: (\n    columns?: string | string[],\n    options?: AthenaGatewayCallOptions,\n    callsite?: AthenaQueryTraceCallsite | null,\n  ) => Promise<AthenaResult<Result>>,\n  defaultColumns: AthenaSelectInput | null = DEFAULT_COLUMNS,\n  tracer?: AthenaQueryTracer,\n  initialCallsite?: AthenaQueryTraceCallsite | null,\n): MutationQuery<Result, Row> {\n  let selectedColumns: AthenaSelectInput | undefined = defaultColumns === null ? undefined : defaultColumns\n  let selectedOptions: AthenaGatewayCallOptions | undefined\n  let promise: Promise<AthenaResult<Result>> | null = null\n  const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite)\n\n  const run = (\n    columns?: AthenaSelectInput,\n    options?: AthenaGatewayCallOptions,\n    callsite?: AthenaQueryTraceCallsite | null,\n  ) => {\n    const payloadColumns = columns ?? selectedColumns\n    const payloadOptions = options ?? selectedOptions\n    if (!promise) {\n      promise = executor(\n        normalizeSelectColumnsInput(payloadColumns),\n        payloadOptions,\n        callsiteStore.resolve(callsite),\n      )\n    }\n    return promise\n  }\n\n  const mutationQuery: MutationQuery<Result, Row> = {\n    select(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n      selectedColumns = columns\n      selectedOptions = options ?? selectedOptions\n      return run(columns, options, captureTraceCallsite(tracer))\n    },\n    returning(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n      return mutationQuery.select(columns, options)\n    },\n    single(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n      selectedColumns = columns\n      selectedOptions = options ?? selectedOptions\n      return run(columns, options, captureTraceCallsite(tracer)).then(toSingleResult)\n    },\n    maybeSingle(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n      return mutationQuery.single(columns, options)\n    },\n    then(onfulfilled, onrejected) {\n      return run(selectedColumns, selectedOptions).then(onfulfilled, onrejected)\n    },\n    catch(onrejected) {\n      return run(selectedColumns, selectedOptions).catch(onrejected)\n    },\n    finally(onfinally) {\n      return run(selectedColumns, selectedOptions).finally(onfinally)\n    },\n  }\n\n  return mutationQuery\n}\n\nexport interface OrderOptions {\n  ascending?: boolean\n}\n\n/** Shared filter chain - supports eq, limit, etc. in any order relative to select/update */\ninterface FilterChain<Self, Row> {\n  eq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n  eqCast(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue, cast: AthenaConditionCastType): Self\n  eqUuid(column: ResolvedFilterColumnKey<Row>, value: string): Self\n  match(filters: Partial<Record<ResolvedFilterColumnKey<Row>, AthenaConditionValue>>): Self\n  range(from: number, to: number): Self\n  limit(count: number): Self\n  offset(count: number): Self\n  currentPage(value: number): Self\n  pageSize(value: number): Self\n  totalPages(value: number): Self\n  order(column: ResolvedFilterColumnKey<Row>, options?: OrderOptions): Self\n  gt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n  gte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n  lt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n  lte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n  neq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n  like(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n  ilike(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n  is(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue): Self\n  in(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\n  contains(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\n  containedBy(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue): Self\n  not(\n    columnOrExpression: ResolvedFilterColumnKey<Row> | string,\n    operator?: AthenaConditionOperator,\n    value?: AthenaConditionValue,\n  ): Self\n  or(expression: string): Self\n}\n\n/** Chain returned by select() - supports filters and single/maybeSingle before execution */\nexport interface SelectChain<Row, SelectedRow = Row>\n  extends FilterChain<SelectChain<Row, SelectedRow>, Row>, PromiseLike<AthenaResult<SelectedRow[]>> {\n  single<\n    T = SelectedRow,\n    const TColumns extends AthenaSelectInput = string,\n  >(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<T | null>>\n  maybeSingle<\n    T = SelectedRow,\n    const TColumns extends AthenaSelectInput = string,\n  >(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<T | null>>\n}\n\n/** Chain returned by update() - supports filters before execution, plus select/returning */\nexport interface UpdateChain<Row>\n  extends FilterChain<UpdateChain<Row>, Row>, MutationQuery<Row[], Row> {}\n\ninterface RpcFilterChain<Self, Row> {\n  eq(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n  neq(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n  gt(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n  gte(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n  lt(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n  lte(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n  like(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n  ilike(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n  is(column: AthenaTypecheckedColumnKey<Row>, value: AthenaConditionValue): Self\n  in(column: AthenaTypecheckedColumnKey<Row>, values: AthenaConditionArrayValue): Self\n}\n\nexport interface RpcOrderOptions {\n  ascending?: boolean\n}\n\nexport interface RpcQueryBuilder<Row>\n  extends RpcFilterChain<RpcQueryBuilder<Row>, Row>, PromiseLike<AthenaResult<Row[]>> {\n  select<const TColumns extends AthenaSelectInput = string>(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaRpcCallOptions,\n  ): Promise<AthenaResult<Row[]>>\n  single<\n    T = Row,\n    const TColumns extends AthenaSelectInput = string,\n  >(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaRpcCallOptions,\n  ): Promise<AthenaResult<T | null>>\n  maybeSingle<\n    T = Row,\n    const TColumns extends AthenaSelectInput = string,\n  >(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaRpcCallOptions,\n  ): Promise<AthenaResult<T | null>>\n  order(column: AthenaTypecheckedColumnKey<Row>, options?: RpcOrderOptions): RpcQueryBuilder<Row>\n  limit(count: number): RpcQueryBuilder<Row>\n  offset(count: number): RpcQueryBuilder<Row>\n  range(from: number, to: number): RpcQueryBuilder<Row>\n}\n\nexport interface AthenaFromOptions {\n  schema?: string\n}\n\nexport interface TableQueryBuilder<\n  Row,\n  Insert = Partial<Row>,\n  Update = Partial<Insert>,\n  TContext = unknown,\n> extends FilterChain<TableQueryBuilder<Row, Insert, Update, TContext>, Row> {\n  select<\n    T = Row,\n    const TColumns extends AthenaSelectInput = string,\n  >(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions,\n  ): SelectChain<Row, T>\n  findMany<const TSelect extends AthenaSelectShape>(\n    options: AthenaFindManyOptions<Row, TSelect> & {\n      select: AthenaValidatedSelectShape<Row, TSelect>\n    },\n  ): Promise<AthenaResult<Array<AthenaFindManyResult<Row, TSelect, TContext>>>>\n  insert(values: Insert, options?: AthenaGatewayCallOptions): MutationQuery<Row, Row>\n  insert(values: Insert[], options?: AthenaGatewayCallOptions): MutationQuery<Row[], Row>\n  upsert(\n    values: Insert,\n    options?: AthenaGatewayCallOptions & {\n      updateBody?: Update\n      onConflict?: ResolvedFilterColumnKey<Row> | Array<ResolvedFilterColumnKey<Row>> | (string & {}) | Array<string & {}>\n    },\n  ): MutationQuery<Row, Row>\n  upsert(\n    values: Insert[],\n    options?: AthenaGatewayCallOptions & {\n      updateBody?: Update\n      onConflict?: ResolvedFilterColumnKey<Row> | Array<ResolvedFilterColumnKey<Row>> | (string & {}) | Array<string & {}>\n    },\n  ): MutationQuery<Row[], Row>\n  update(values: Update, options?: AthenaGatewayCallOptions): UpdateChain<Row>\n  delete(options?: AthenaGatewayCallOptions & { resourceId?: string }): MutationQuery<Row | null, Row>\n  single<\n    T = Row,\n    const TColumns extends AthenaSelectInput = string,\n  >(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<T | null>>\n  maybeSingle<\n    T = Row,\n    const TColumns extends AthenaSelectInput = string,\n  >(\n    columns?: SelectColumnsFor<Row, TColumns>,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<T | null>>\n  reset(): TableQueryBuilder<Row, Insert, Update, TContext>\n}\n\nfunction getResourceId(state: TableBuilderState): string | undefined {\n  const candidate = state.conditions.find(\n    condition =>\n      condition.operator === 'eq' &&\n      (condition.column === 'resource_id' || condition.column === 'id'),\n  )\n  return candidate?.value?.toString()\n}\n\nfunction stringifyFilterValue(value: AthenaConditionValue | AthenaConditionArrayValue | string): string {\n  if (Array.isArray(value)) {\n    return value.join(',')\n  }\n  return String(value)\n}\n\nfunction createFilterMethods<Self, Row>(\n  state: TableBuilderState,\n  addCondition: (\n    operator: AthenaConditionOperator,\n    column?: string,\n    value?: AthenaConditionValue | AthenaConditionArrayValue | string,\n    hints?: ConditionCastHints,\n  ) => void,\n  self: Self,\n): FilterChain<Self, Row> {\n  return {\n    eq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      const columnName = String(column)\n      if (shouldUseUuidTextComparison(columnName, value)) {\n        addCondition('eq', columnName, value, { columnCast: 'text' })\n      } else {\n        addCondition('eq', columnName, value)\n      }\n      return self\n    },\n    eqCast(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue, cast: AthenaConditionCastType) {\n      addCondition('eq', String(column), value, { valueCast: cast })\n      return self\n    },\n    eqUuid(column: ResolvedFilterColumnKey<Row>, value: string) {\n      addCondition('eq', String(column), value, { valueCast: 'uuid' })\n      return self\n    },\n    match(filters: Partial<Record<ResolvedFilterColumnKey<Row>, AthenaConditionValue>>) {\n      Object.entries(filters as Record<string, AthenaConditionValue | undefined>).forEach(([column, value]) => {\n        if (value === undefined) {\n          return\n        }\n        if (shouldUseUuidTextComparison(column, value)) {\n          addCondition('eq', column, value, { columnCast: 'text' })\n        } else {\n          addCondition('eq', column, value)\n        }\n      })\n      return self\n    },\n    range(from: number, to: number) {\n      state.offset = from\n      state.limit = to - from + 1\n      return self\n    },\n    limit(count: number) {\n      state.limit = count\n      return self\n    },\n    offset(count: number) {\n      state.offset = count\n      return self\n    },\n    currentPage(value: number) {\n      state.currentPage = value\n      return self\n    },\n    pageSize(value: number) {\n      state.pageSize = value\n      return self\n    },\n    totalPages(value: number) {\n      state.totalPages = value\n      return self\n    },\n    order(column: ResolvedFilterColumnKey<Row>, options?: OrderOptions) {\n      state.order = {\n        field: String(column),\n        direction: options?.ascending === false ? 'descending' : 'ascending',\n      }\n      return self\n    },\n    gt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition('gt', String(column), value)\n      return self\n    },\n    gte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition('gte', String(column), value)\n      return self\n    },\n    lt(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition('lt', String(column), value)\n      return self\n    },\n    lte(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition('lte', String(column), value)\n      return self\n    },\n    neq(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition('neq', String(column), value)\n      return self\n    },\n    like(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition('like', String(column), value)\n      return self\n    },\n    ilike(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition('ilike', String(column), value)\n      return self\n    },\n    is(column: ResolvedFilterColumnKey<Row>, value: AthenaConditionValue) {\n      addCondition('is', String(column), value)\n      return self\n    },\n    in(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\n      addCondition('in', String(column), values)\n      return self\n    },\n    contains(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\n      addCondition('contains', String(column), values)\n      return self\n    },\n    containedBy(column: ResolvedFilterColumnKey<Row>, values: AthenaConditionArrayValue) {\n      addCondition('containedBy', String(column), values)\n      return self\n    },\n    not(\n      columnOrExpression: ResolvedFilterColumnKey<Row> | string,\n      operator?: AthenaConditionOperator,\n      value?: AthenaConditionValue,\n    ) {\n      const expression = String(columnOrExpression)\n      if (operator != null && value !== undefined) {\n        addCondition('not', undefined, `${expression}.${operator}.${stringifyFilterValue(value)}`)\n      } else {\n        addCondition('not', undefined, expression)\n      }\n      return self\n    },\n    or(expression: string) {\n      addCondition('or', undefined, expression)\n      return self\n    },\n  }\n}\n\nfunction toRpcSelect(columns?: AthenaSelectInput) {\n  if (!columns) return undefined\n  if (typeof columns === 'string') {\n    return columns\n  }\n  return columns.join(',')\n}\n\nfunction createRpcFilterMethods<Self>(\n  filters: AthenaRpcFilter[],\n  self: Self,\n) {\n  const addFilter = (\n    operator: AthenaRpcFilterOperator,\n    column: string,\n    value: AthenaConditionValue | AthenaConditionArrayValue | string,\n  ) => {\n    filters.push({ column, operator, value })\n  }\n\n  return {\n    eq(column: string, value: AthenaConditionValue) {\n      addFilter('eq', column, value)\n      return self\n    },\n    neq(column: string, value: AthenaConditionValue) {\n      addFilter('neq', column, value)\n      return self\n    },\n    gt(column: string, value: AthenaConditionValue) {\n      addFilter('gt', column, value)\n      return self\n    },\n    gte(column: string, value: AthenaConditionValue) {\n      addFilter('gte', column, value)\n      return self\n    },\n    lt(column: string, value: AthenaConditionValue) {\n      addFilter('lt', column, value)\n      return self\n    },\n    lte(column: string, value: AthenaConditionValue) {\n      addFilter('lte', column, value)\n      return self\n    },\n    like(column: string, value: AthenaConditionValue) {\n      addFilter('like', column, value)\n      return self\n    },\n    ilike(column: string, value: AthenaConditionValue) {\n      addFilter('ilike', column, value)\n      return self\n    },\n    is(column: string, value: AthenaConditionValue) {\n      addFilter('is', column, value)\n      return self\n    },\n    in(column: string, values: AthenaConditionArrayValue) {\n      addFilter('in', column, values)\n      return self\n    },\n  }\n}\n\nfunction createRpcBuilder<Row>(\n  functionName: string,\n  args: AthenaJsonObject | undefined,\n  baseOptions: AthenaRpcCallOptions | undefined,\n  client: ReturnType<typeof createAthenaGatewayClient>,\n  formatGatewayResult: AthenaResultFormatter,\n  tracer?: AthenaQueryTracer,\n  initialCallsite?: AthenaQueryTraceCallsite | null,\n  debugAstEnabled = false,\n): RpcQueryBuilder<Row> {\n  const state: {\n    filters: AthenaRpcFilter[]\n    limit?: number\n    offset?: number\n    order?: { column: string; ascending?: boolean }\n  } = {\n    filters: [],\n  }\n\n  let selectedColumns: AthenaSelectInput | undefined\n  let selectedOptions: AthenaRpcCallOptions | undefined\n  let promise: Promise<AthenaResult<Row[]>> | null = null\n  const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite)\n\n  const executeRpc = async <SelectedRow = Row>(\n    columns?: AthenaSelectInput,\n    options?: AthenaRpcCallOptions,\n    callsite?: AthenaQueryTraceCallsite | null,\n  ): Promise<AthenaResult<SelectedRow[]>> => {\n    const mergedOptions = mergeOptions(baseOptions, options)\n    const normalizedSelectedColumns = normalizeSelectColumnsInput(columns)\n    const payload: AthenaRpcPayload = {\n      function: functionName,\n      args,\n      schema: mergedOptions?.schema,\n      select: toRpcSelect(columns),\n      filters: state.filters.length ? [...state.filters] : undefined,\n      count: mergedOptions?.count,\n      head: mergedOptions?.head,\n      limit: state.limit,\n      offset: state.offset,\n      order: state.order,\n    }\n    const endpoint: AthenaQueryTraceEvent['endpoint'] = mergedOptions?.get\n      ? `/rpc/${functionName}`\n      : '/gateway/rpc'\n    const sql = buildRpcDebugSql(payload)\n    const debugAst = debugAstEnabled\n      ? buildRpcDebugAst({\n          functionName,\n          args,\n          selectedColumns: normalizedSelectedColumns,\n          state,\n          payload,\n          endpoint,\n        })\n      : undefined\n    return executeWithQueryTrace(\n      tracer,\n      {\n        operation: 'rpc',\n        endpoint,\n        functionName,\n        sql,\n        payload,\n        ast: debugAst,\n        options: mergedOptions,\n      },\n      async () => {\n        const response = await client.rpcGateway<SelectedRow[]>(payload, mergedOptions)\n        return formatGatewayResult(response, { operation: 'rpc' })\n      },\n      callsite,\n    )\n  }\n\n  const run = (\n    columns?: AthenaSelectInput,\n    options?: AthenaRpcCallOptions,\n    callsite?: AthenaQueryTraceCallsite | null,\n  ) => {\n    const payloadColumns = columns ?? selectedColumns\n    const payloadOptions = options ?? selectedOptions\n    if (!promise) {\n      promise = executeRpc<Row>(payloadColumns, payloadOptions, callsiteStore.resolve(callsite))\n    }\n    return promise\n  }\n\n  const builder = {} as RpcQueryBuilder<Row>\n  const filterMethods = createRpcFilterMethods(state.filters, builder)\n\n  Object.assign(builder, filterMethods, {\n    select(columns?: AthenaSelectInput, options?: AthenaRpcCallOptions) {\n      selectedColumns = columns\n      selectedOptions = options ?? selectedOptions\n      return run(columns, options, captureTraceCallsite(tracer))\n    },\n    async single<T = Row>(columns?: AthenaSelectInput, options?: AthenaRpcCallOptions) {\n      const result = await run(columns, options, captureTraceCallsite(tracer))\n      return toSingleResult(result) as AthenaResult<T | null>\n    },\n    maybeSingle<T = Row>(columns?: AthenaSelectInput, options?: AthenaRpcCallOptions) {\n      return builder.single<T, AthenaSelectInput>(columns, options)\n    },\n    order(column: string, options?: RpcOrderOptions) {\n      state.order = { column, ascending: options?.ascending ?? true }\n      return builder\n    },\n    limit(count: number) {\n      state.limit = count\n      return builder\n    },\n    offset(count: number) {\n      state.offset = count\n      return builder\n    },\n    range(from: number, to: number) {\n      state.offset = from\n      state.limit = to - from + 1\n      return builder\n    },\n    then<T1 = AthenaResult<Row[]>, T2 = never>(\n      onfulfilled?: (v: AthenaResult<Row[]>) => T1 | PromiseLike<T1>,\n      onrejected?: (reason: unknown) => T2 | PromiseLike<T2>,\n    ) {\n      return run(selectedColumns, selectedOptions).then(onfulfilled, onrejected)\n    },\n    catch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\n      return run(selectedColumns, selectedOptions).catch(onrejected)\n    },\n    finally(onfinally?: () => void) {\n      return run(selectedColumns, selectedOptions).finally(onfinally)\n    },\n  })\n\n  return builder\n}\n\nfunction createTableBuilder<\n  Row,\n  Insert = Partial<Row>,\n  Update = Partial<Insert>,\n  TContext = unknown,\n>(\n  tableName: string,\n  client: ReturnType<typeof createAthenaGatewayClient>,\n  formatGatewayResult: AthenaResultFormatter,\n  tracer?: AthenaQueryTracer,\n  behavior?: InternalClientBehaviorOptions,\n): TableQueryBuilder<Row, Insert, Update, TContext> {\n  const state: TableBuilderState = {\n    conditions: [],\n  }\n  const debugAstEnabled = Boolean(behavior?.debugAst)\n\n  const addCondition = (\n    operator: AthenaConditionOperator,\n    column?: string,\n    value?: AthenaConditionValue | AthenaConditionArrayValue | string,\n    hints?: ConditionCastHints,\n  ) => {\n    const condition: AthenaGatewayCondition = { operator }\n    if (column) {\n      condition.column = column\n      if (operator === 'eq') {\n        // include legacy gateway shape for compatibility\n        condition.eq_column = column\n      }\n    }\n    if (value !== undefined) {\n      condition.value = value\n      if (operator === 'eq') {\n        condition.eq_value = value\n      }\n    }\n    if (hints?.valueCast) {\n      condition.value_cast = hints.valueCast\n      if (operator === 'eq') {\n        condition.eq_value_cast = hints.valueCast\n      }\n    }\n    if (hints?.columnCast) {\n      condition.column_cast = hints.columnCast\n      if (operator === 'eq') {\n        condition.eq_column_cast = hints.columnCast\n      }\n    }\n    state.conditions.push(condition)\n  }\n\n  const snapshotState = (): TableBuilderState => ({\n    conditions: state.conditions.map(condition => ({ ...condition })),\n    limit: state.limit,\n    offset: state.offset,\n    order: state.order ? { ...state.order } : undefined,\n    currentPage: state.currentPage,\n    pageSize: state.pageSize,\n    totalPages: state.totalPages,\n  })\n\n  const builder = {} as TableQueryBuilder<Row, Insert, Update, TContext>\n\n  const filterMethods = createFilterMethods<TableQueryBuilder<Row, Insert, Update, TContext>, Row>(\n    state,\n    addCondition,\n    builder,\n  )\n\n  const runSelect = async <T = Row>(\n    columns: AthenaSelectInput = DEFAULT_COLUMNS,\n    options?: AthenaGatewayCallOptions,\n    executionState: TableBuilderState = snapshotState(),\n    callsite?: AthenaQueryTraceCallsite | null,\n    debugAstFactory?: SelectDebugAstFactory,\n  ) => {\n    const runtimeColumns = normalizeSelectColumnsInput(columns) ?? DEFAULT_COLUMNS\n    const resolvedTableName = resolveTableNameForCall(tableName, options?.schema)\n    const plan = createSelectTransportPlan({\n      tableName: resolvedTableName,\n      columns: runtimeColumns,\n      state: executionState,\n      options,\n      buildTypedSelectQuery,\n    })\n    const debugAst = debugAstEnabled\n      ? (debugAstFactory?.({\n          tableName: resolvedTableName,\n          columns: runtimeColumns,\n          executionState,\n          plan,\n        }) ?? buildSelectDebugAst({\n          tableName: resolvedTableName,\n          columns: runtimeColumns,\n          state: executionState,\n          plan,\n        }))\n      : undefined\n\n    if (plan.kind === 'query') {\n      return executeRead(behavior, () =>\n        executeWithQueryTrace(\n          tracer,\n          {\n            operation: 'select',\n            endpoint: '/gateway/query',\n            table: resolvedTableName,\n            sql: plan.query,\n            payload: plan.payload,\n            ast: debugAst,\n            options,\n          },\n          async () => {\n            const queryResponse = await client.queryGateway<T>(plan.payload, options)\n            return formatGatewayResult(queryResponse, { table: resolvedTableName, operation: 'select' })\n          },\n          callsite,\n        ),\n      )\n    }\n\n    const sql = buildDebugSelectQuery({\n      tableName: resolvedTableName,\n      ...plan.debug,\n    })\n    return executeRead(behavior, () =>\n      executeWithQueryTrace(\n        tracer,\n        {\n          operation: 'select',\n          endpoint: '/gateway/fetch',\n          table: resolvedTableName,\n          sql,\n          payload: plan.payload,\n          ast: debugAst,\n          options,\n        },\n        async () => {\n          const response = await client.fetchGateway<T>(plan.payload, options)\n          return formatGatewayResult(response, { table: resolvedTableName, operation: 'select' })\n        },\n        callsite,\n      ),\n    )\n  }\n\n  const createSelectChain = <SelectedRow>(\n    columns: AthenaSelectInput,\n    options?: AthenaGatewayCallOptions,\n    initialCallsite?: AthenaQueryTraceCallsite | null,\n  ): SelectChain<Row, SelectedRow> => {\n    const chain = {} as SelectChain<Row, SelectedRow>\n    const callsiteStore = createTraceCallsiteStore(tracer, initialCallsite)\n    const filterMethods = createFilterMethods<SelectChain<Row, SelectedRow>, Row>(\n      state,\n      addCondition,\n      chain,\n    )\n    Object.assign(chain, filterMethods, {\n      async single<T = SelectedRow>(cols?: AthenaSelectInput, opts?: AthenaGatewayCallOptions) {\n        const r = await runSelect<T[]>(\n          cols ?? columns,\n          opts ?? options,\n          snapshotState(),\n          callsiteStore.resolve(captureTraceCallsite(tracer)),\n        )\n        return toSingleResult(r)\n      },\n      maybeSingle<T = SelectedRow>(cols?: AthenaSelectInput, opts?: AthenaGatewayCallOptions) {\n        return chain.single<T, AthenaSelectInput>(cols, opts)\n      },\n      then<T1 = AthenaResult<SelectedRow[]>, T2 = never>(\n        onfulfilled?: (v: AthenaResult<SelectedRow[]>) => T1 | PromiseLike<T1>,\n        onrejected?: (reason: unknown) => T2 | PromiseLike<T2>,\n      ) {\n        return runSelect<SelectedRow[]>(\n          columns,\n          options,\n          snapshotState(),\n          callsiteStore.resolve(),\n        ).then(onfulfilled, onrejected)\n      },\n      catch<T = never>(onrejected?: (reason: unknown) => T | PromiseLike<T>) {\n        return runSelect<SelectedRow[]>(columns, options, snapshotState(), callsiteStore.resolve()).catch(\n          onrejected,\n        )\n      },\n      finally(onfinally?: () => void) {\n        return runSelect<SelectedRow[]>(columns, options, snapshotState(), callsiteStore.resolve()).finally(\n          onfinally,\n        )\n      },\n    })\n    return chain\n  }\n\n  Object.assign(builder, filterMethods, {\n    reset() {\n      state.conditions = []\n      state.limit = undefined\n      state.offset = undefined\n      state.order = undefined\n      state.currentPage = undefined\n      state.pageSize = undefined\n      state.totalPages = undefined\n      return builder\n    },\n    select<T = Row>(columns: AthenaSelectInput = DEFAULT_COLUMNS, options?: AthenaGatewayCallOptions) {\n      return createSelectChain<T>(columns, options, captureTraceCallsite(tracer))\n    },\n    async findMany<const TSelect extends AthenaSelectShape>(\n      options: AthenaFindManyOptions<Row, TSelect> & {\n        select: AthenaValidatedSelectShape<Row, TSelect>\n      },\n    ) {\n      const columns = compileSelectShape(options.select)\n      const baseState = snapshotState()\n      const executionState = snapshotState()\n      const callsite = captureTraceCallsite(tracer)\n      const compiledWhere = compileWhere(options.where)\n      if (compiledWhere?.length) {\n        executionState.conditions.push(...compiledWhere)\n      }\n      if (options.orderBy !== undefined) {\n        executionState.order = compileOrderBy<Row>(options.orderBy)\n      }\n      if (options.limit !== undefined) {\n        executionState.limit = options.limit\n      }\n      if (\n        behavior?.findManyAst &&\n        canUseFindManyAstTransport(baseState) &&\n        !selectShapeUsesRelationSchema(options.select) &&\n        !findManyAstWhereRequiresLegacyTransport(options.where)\n      ) {\n        const resolvedTableName = resolveTableNameForCall(tableName, undefined)\n        const payload: AthenaFindManyAstPayload<Row, TSelect> = {\n          table_name: resolvedTableName,\n          select: options.select,\n        }\n        if (options.where !== undefined) {\n          payload.where = normalizeFindManyAstWhere(options.where)\n        }\n        const astOrder = toFindManyAstOrder<Row>(executionState.order)\n        if (astOrder !== undefined) {\n          payload.orderBy = astOrder\n        }\n        if (executionState.limit !== undefined) {\n          payload.limit = executionState.limit\n        }\n        const sql = buildDebugSelectQuery({\n          tableName: resolvedTableName,\n          columns,\n          conditions: executionState.conditions,\n          limit: executionState.limit,\n          order: executionState.order,\n        })\n        const debugAst = debugAstEnabled\n          ? buildFindManyDirectDebugAst({\n              tableName: resolvedTableName,\n              options,\n              compiledColumns: columns,\n              baseState,\n              executionState,\n              payload,\n            })\n          : undefined\n        return executeRead(behavior, () =>\n          executeWithQueryTrace(\n            tracer,\n            {\n              operation: 'select',\n              endpoint: '/gateway/fetch',\n              table: resolvedTableName,\n              sql,\n              payload,\n              ast: debugAst,\n            },\n            async () => {\n              const response = await client.fetchGateway<Array<AthenaFindManyResult<Row, TSelect, TContext>>>(\n                payload,\n              )\n              return formatGatewayResult(response, { table: resolvedTableName, operation: 'select' })\n            },\n            callsite,\n          ),\n        )\n      }\n      return runSelect<Array<AthenaFindManyResult<Row, TSelect, TContext>>>(\n        columns,\n        undefined,\n        executionState,\n        callsite,\n        debugAstEnabled\n          ? ({ tableName: resolvedTableName, executionState: tracedState, plan }) =>\n              buildFindManyCompiledDebugAst({\n                tableName: resolvedTableName,\n                options,\n                compiledColumns: columns,\n                baseState,\n                executionState: tracedState,\n                plan,\n              })\n          : undefined,\n      )\n    },\n    insert(values: Insert | Insert[], options?: AthenaGatewayCallOptions) {\n      const mutationCallsite = captureTraceCallsite(tracer)\n      if (Array.isArray(values)) {\n        const executeInsertMany = async (\n          columns?: string | string[],\n          selectOptions?: AthenaGatewayCallOptions,\n          callsite?: AthenaQueryTraceCallsite | null,\n        ) => {\n          const mergedOptions = mergeOptions(options, selectOptions)\n          const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\n          const payload: AthenaInsertPayload = {\n            table_name: resolvedTableName,\n            insert_body: asAthenaJsonObjectArray(values),\n          }\n          if (columns) payload.columns = columns\n          if (mergedOptions?.count) payload.count = mergedOptions.count\n          if (mergedOptions?.head) payload.head = mergedOptions.head\n          if (mergedOptions?.defaultToNull !== undefined) {\n            payload.default_to_null = mergedOptions.defaultToNull\n          }\n          const sql = buildInsertDebugSql(payload)\n          const debugAst = debugAstEnabled ? buildInsertDebugAst(payload) : undefined\n          return executeWithQueryTrace(\n            tracer,\n            {\n              operation: 'insert',\n              endpoint: '/gateway/insert',\n              table: resolvedTableName,\n              sql,\n              payload,\n              ast: debugAst,\n              options: mergedOptions,\n            },\n            async () => {\n              const response = await client.insertGateway<Row[]>(payload, mergedOptions)\n              return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\n            },\n            callsite,\n          )\n        }\n        return createMutationQuery<Row[]>(executeInsertMany, DEFAULT_COLUMNS, tracer, mutationCallsite)\n      }\n      const executeInsertOne = async (\n        columns?: string | string[],\n        selectOptions?: AthenaGatewayCallOptions,\n        callsite?: AthenaQueryTraceCallsite | null,\n      ) => {\n        const mergedOptions = mergeOptions(options, selectOptions)\n        const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\n        const payload: AthenaInsertPayload = {\n          table_name: resolvedTableName,\n          insert_body: asAthenaJsonObject(values),\n        }\n        if (columns) payload.columns = columns\n        if (mergedOptions?.count) payload.count = mergedOptions.count\n        if (mergedOptions?.head) payload.head = mergedOptions.head\n        if (mergedOptions?.defaultToNull !== undefined) {\n          payload.default_to_null = mergedOptions.defaultToNull\n        }\n        const sql = buildInsertDebugSql(payload)\n        const debugAst = debugAstEnabled ? buildInsertDebugAst(payload) : undefined\n        return executeWithQueryTrace(\n          tracer,\n          {\n            operation: 'insert',\n            endpoint: '/gateway/insert',\n            table: resolvedTableName,\n            sql,\n            payload,\n            ast: debugAst,\n            options: mergedOptions,\n          },\n          async () => {\n            const response = await client.insertGateway<Row>(payload, mergedOptions)\n            return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\n          },\n          callsite,\n        )\n      }\n      return createMutationQuery<Row>(executeInsertOne, DEFAULT_COLUMNS, tracer, mutationCallsite)\n    },\n    upsert(\n      values: Insert | Insert[],\n      options?: AthenaGatewayCallOptions & { updateBody?: Update; onConflict?: string | string[] },\n    ) {\n      const mutationCallsite = captureTraceCallsite(tracer)\n      if (Array.isArray(values)) {\n        const executeUpsertMany = async (\n          columns?: string | string[],\n          selectOptions?: AthenaGatewayCallOptions,\n          callsite?: AthenaQueryTraceCallsite | null,\n        ) => {\n          const mergedOptions = mergeOptions(options, selectOptions)\n          const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\n          const payload: AthenaInsertPayload = {\n            table_name: resolvedTableName,\n            insert_body: asAthenaJsonObjectArray(values),\n            update_body: options?.updateBody ? asAthenaJsonObject(options.updateBody) : undefined,\n          }\n          if (columns) payload.columns = columns\n          if (options?.onConflict) payload.on_conflict = options.onConflict\n          if (mergedOptions?.count) payload.count = mergedOptions.count\n          if (mergedOptions?.head) payload.head = mergedOptions.head\n          if (mergedOptions?.defaultToNull !== undefined) {\n            payload.default_to_null = mergedOptions.defaultToNull\n          }\n          const sql = buildInsertDebugSql(payload)\n          const debugAst = debugAstEnabled ? buildUpsertDebugAst(payload) : undefined\n          return executeWithQueryTrace(\n            tracer,\n            {\n              operation: 'upsert',\n              endpoint: '/gateway/insert',\n              table: resolvedTableName,\n              sql,\n              payload,\n              ast: debugAst,\n              options: mergedOptions,\n            },\n            async () => {\n              const response = await client.insertGateway<Row[]>(payload, mergedOptions)\n              return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\n            },\n            callsite,\n          )\n        }\n        return createMutationQuery<Row[]>(executeUpsertMany, DEFAULT_COLUMNS, tracer, mutationCallsite)\n      }\n      const executeUpsertOne = async (\n        columns?: string | string[],\n        selectOptions?: AthenaGatewayCallOptions,\n        callsite?: AthenaQueryTraceCallsite | null,\n      ) => {\n        const mergedOptions = mergeOptions(options, selectOptions)\n        const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\n        const payload: AthenaInsertPayload = {\n          table_name: resolvedTableName,\n          insert_body: asAthenaJsonObject(values),\n          update_body: options?.updateBody ? asAthenaJsonObject(options.updateBody) : undefined,\n        }\n        if (columns) payload.columns = columns\n        if (options?.onConflict) payload.on_conflict = options.onConflict\n        if (mergedOptions?.count) payload.count = mergedOptions.count\n        if (mergedOptions?.head) payload.head = mergedOptions.head\n        if (mergedOptions?.defaultToNull !== undefined) {\n          payload.default_to_null = mergedOptions.defaultToNull\n        }\n        const sql = buildInsertDebugSql(payload)\n        const debugAst = debugAstEnabled ? buildUpsertDebugAst(payload) : undefined\n        return executeWithQueryTrace(\n          tracer,\n          {\n            operation: 'upsert',\n            endpoint: '/gateway/insert',\n            table: resolvedTableName,\n            sql,\n            payload,\n            ast: debugAst,\n            options: mergedOptions,\n          },\n          async () => {\n            const response = await client.insertGateway<Row>(payload, mergedOptions)\n            return formatGatewayResult(response, { table: resolvedTableName, operation: 'insert' })\n          },\n          callsite,\n        )\n      }\n      return createMutationQuery<Row>(executeUpsertOne, DEFAULT_COLUMNS, tracer, mutationCallsite)\n    },\n    update(values: Update, options?: AthenaGatewayCallOptions) {\n      const mutationCallsite = captureTraceCallsite(tracer)\n      const executeUpdate = async (\n        columns?: string | string[],\n        selectOptions?: AthenaGatewayCallOptions,\n        callsite?: AthenaQueryTraceCallsite | null,\n      ) => {\n        const executionState = snapshotState()\n        const filters = executionState.conditions.length ? [...executionState.conditions] : undefined\n        const mergedOptions = mergeOptions(options, selectOptions)\n        const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\n        const payload: AthenaUpdatePayload = {\n          table_name: resolvedTableName,\n          update_body: asAthenaJsonObject(values),\n          conditions: filters,\n          strip_nulls: mergedOptions?.stripNulls ?? true,\n        }\n        if (executionState.order) payload.sort_by = executionState.order\n        if (executionState.currentPage !== undefined) payload.current_page = executionState.currentPage\n        if (executionState.pageSize !== undefined) payload.page_size = executionState.pageSize\n        if (executionState.totalPages !== undefined) payload.total_pages = executionState.totalPages\n        if (columns) payload.columns = columns\n        const sql = buildUpdateDebugSql(payload)\n        const debugAst = debugAstEnabled\n          ? buildUpdateDebugAst({\n              state: executionState,\n              payload,\n            })\n          : undefined\n        return executeWithQueryTrace(\n          tracer,\n          {\n            operation: 'update',\n            endpoint: '/gateway/update',\n            table: resolvedTableName,\n            sql,\n            payload,\n            ast: debugAst,\n            options: mergedOptions,\n          },\n          async () => {\n            const response = await client.updateGateway<Row[]>(payload, mergedOptions)\n            return formatGatewayResult(response, { table: resolvedTableName, operation: 'update' })\n          },\n          callsite,\n        )\n      }\n      const mutation = createMutationQuery<Row[]>(executeUpdate, null, tracer, mutationCallsite)\n      const updateChain = {} as UpdateChain<Row>\n      const filterMethods = createFilterMethods<UpdateChain<Row>, Row>(state, addCondition, updateChain)\n      Object.assign(updateChain, filterMethods, mutation)\n      return updateChain\n    },\n    delete(options?: AthenaGatewayCallOptions & { resourceId?: string }) {\n      const filters = state.conditions.length ? [...state.conditions] : undefined\n      const resourceId = options?.resourceId ?? getResourceId(state)\n      if (!resourceId && !filters?.length) {\n        throw new Error('delete requires a resource_id either via eq(\"resource_id\", ...) or options.resourceId')\n      }\n      const mutationCallsite = captureTraceCallsite(tracer)\n      const executeDelete = async (\n        columns?: string | string[],\n        selectOptions?: AthenaGatewayCallOptions,\n        callsite?: AthenaQueryTraceCallsite | null,\n      ) => {\n        const executionState = snapshotState()\n        const debugState: TableBuilderState = {\n          ...executionState,\n          conditions: filters ? filters.map(condition => ({ ...condition })) : [],\n        }\n        const mergedOptions = mergeOptions(options, selectOptions)\n        const resolvedTableName = resolveTableNameForCall(tableName, mergedOptions?.schema)\n        const payload: AthenaDeletePayload = {\n          table_name: resolvedTableName,\n          resource_id: resourceId,\n          conditions: filters,\n        }\n        if (executionState.order) payload.sort_by = executionState.order\n        if (executionState.currentPage !== undefined) payload.current_page = executionState.currentPage\n        if (executionState.pageSize !== undefined) payload.page_size = executionState.pageSize\n        if (executionState.totalPages !== undefined) payload.total_pages = executionState.totalPages\n        if (columns) payload.columns = columns\n        const sql = buildDeleteDebugSql(payload)\n        const debugAst = debugAstEnabled\n          ? buildDeleteDebugAst({\n              state: debugState,\n              payload,\n            })\n          : undefined\n        return executeWithQueryTrace(\n          tracer,\n          {\n            operation: 'delete',\n            endpoint: '/gateway/delete',\n            table: resolvedTableName,\n            sql,\n            payload,\n            ast: debugAst,\n            options: mergedOptions,\n          },\n          async () => {\n            const response = await client.deleteGateway<Row | null>(payload, mergedOptions)\n            return formatGatewayResult(response, { table: resolvedTableName, operation: 'delete' })\n          },\n          callsite,\n        )\n      }\n      return createMutationQuery<Row | null>(executeDelete, null, tracer, mutationCallsite)\n    },\n    async single<T = Row>(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n      const response = await runSelect<T[]>(\n        columns ?? DEFAULT_COLUMNS,\n        options,\n        snapshotState(),\n        captureTraceCallsite(tracer),\n      )\n      return toSingleResult(response)\n    },\n    async maybeSingle<T = Row>(columns?: AthenaSelectInput, options?: AthenaGatewayCallOptions) {\n      return builder.single<T, AthenaSelectInput>(columns, options)\n    },\n  })\n\n  return builder\n}\n\nfunction createQueryBuilder(\n  client: ReturnType<typeof createAthenaGatewayClient>,\n  formatGatewayResult: AthenaResultFormatter,\n  behavior?: InternalClientBehaviorOptions,\n  tracer?: AthenaQueryTracer,\n) {\n  const debugAstEnabled = Boolean(behavior?.debugAst)\n  return async function query<Row = unknown>(\n    query: string,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<Row[]>> {\n    const normalizedQuery = query.trim()\n    if (!normalizedQuery) {\n      throw new Error('query requires a non-empty string')\n    }\n    const payload = { query: normalizedQuery }\n    const callsite = captureTraceCallsite(tracer)\n    return executeRead(behavior, () =>\n      executeWithQueryTrace(\n        tracer,\n        {\n          operation: 'query',\n          endpoint: '/gateway/query',\n          sql: normalizedQuery,\n          payload,\n          ast: debugAstEnabled ? buildRawQueryDebugAst(normalizedQuery) : undefined,\n          options,\n        },\n        async () => {\n          const response = await client.queryGateway<Row[]>(payload, options)\n          return formatGatewayResult(response, { operation: 'query' })\n        },\n        callsite,\n      ),\n    )\n  }\n}\n\nexport interface InternalAthenaClient<TModels = never> {\n  from<TModel extends AthenaModelTarget>(\n    model: TModel,\n  ): TableQueryBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>>\n  from<TTableName extends AthenaClientTableName<TModels>>(\n    table: TTableName,\n    options?: AthenaFromOptions,\n  ): ClientTableQueryBuilder<TModels, TTableName>\n  from<\n    Row = AthenaRowShape,\n    Insert = Partial<Row>,\n    Update = Partial<Insert>,\n  >(\n    table: UntypedTableName<TModels>,\n    options?: AthenaFromOptions,\n  ): TableQueryBuilder<Row, Insert, Update>\n  db: AthenaDbModule<TModels>\n  auth: AthenaAuthBindings\n  chat: AthenaChatModule\n  storage: AthenaStorageModule\n  rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\n    fn: string,\n    args?: Args,\n    options?: AthenaRpcCallOptions,\n  ): RpcQueryBuilder<Row>\n  query<Row = unknown>(query: string, options?: AthenaGatewayCallOptions): Promise<AthenaResult<Row[]>>\n  request<T = unknown>(options: AthenaRequestOptions): Promise<AthenaRequestResponse<T>>\n  verifyConnection(options?: AthenaGatewayConnectionOptions): Promise<AthenaGatewayConnectionResult>\n}\n\nexport interface InternalClientChatOptions {\n  wsUrl?: string | null | undefined\n  webSocketFactory?: AthenaChatWebSocketFactory | null | undefined\n}\n\nexport type InternalClientAuthOptions = Omit<\n  AthenaAuthClientConfig,\n  'baseUrl' | 'apiKey' | 'bearerToken' | 'cookie' | 'sessionToken'\n>\n\nexport interface InternalClientConfig<TModels extends AthenaClientModelsInput | never = never> {\n  baseUrl: string\n  apiKey: string\n  client?: string | null | undefined\n  /** Direct PostgreSQL URI forwarded as `x-pg-uri` on gateway requests. */\n  pgUri?: string | null | undefined\n  jdbcUrl?: string | null | undefined\n  backend?: BackendConfig\n  headers?: Record<string, string>\n  auth?: InternalClientAuthOptions\n  authUrl?: string\n  chat?: InternalClientChatOptions\n  chatUrl?: string\n  chatWsUrl?: string\n  storageUrl?: string\n  storage?: AthenaStorageClientConfig\n  behavior?: InternalClientBehaviorOptions\n  models?: TModels\n}\n\nexport interface InternalClientRequestContext {\n  headers?: Record<string, string>\n  userId?: string | null\n  organizationId?: string | null\n  bearerToken?: string | null\n  cookie?: string | null\n  sessionToken?: string | null\n  forceNoCache?: boolean\n}\n\nexport type InternalClientContextResolver = () =>\n  | InternalClientRequestContext\n  | undefined\n  | Promise<InternalClientRequestContext | undefined>\n\nexport interface InternalAthenaClientCore<\n  TModels extends AthenaClientModelsInput | never = never,\n> {\n  readonly config: InternalClientConfig<TModels>\n  readonly gatewayTransport: AthenaGatewayClient\n  readonly formatGatewayResult: AthenaResultFormatter\n  readonly queryTracer: AthenaQueryTracer | undefined\n  readonly normalizedAuthConfig: AthenaAuthClientConfig | undefined\n}\n\nfunction buildContextHeaders(\n  context: InternalClientRequestContext,\n): Record<string, string> | undefined {\n  const headers: Record<string, string> = {}\n  if (context.userId != null) {\n    headers['X-User-Id'] = context.userId\n  }\n  if (context.organizationId != null) {\n    headers['X-Organization-Id'] = context.organizationId\n  }\n  Object.assign(headers, context.headers)\n  return Object.keys(headers).length > 0 ? headers : undefined\n}\n\nfunction normalizeAuthClientConfig(\n  auth: InternalClientAuthOptions | undefined,\n  defaultBaseUrl?: string,\n): AthenaAuthClientConfig | undefined {\n  if (!auth && defaultBaseUrl === undefined) {\n    return undefined\n  }\n\n  const normalized: AthenaAuthClientConfig = {\n    ...(auth ?? {}),\n  }\n  const resolvedBaseUrl = defaultBaseUrl\n    ? normalizeAthenaGatewayBaseUrl(defaultBaseUrl, { label: 'Athena auth base URL' })\n    : undefined\n\n  if (resolvedBaseUrl !== undefined) {\n    normalized.baseUrl = resolvedBaseUrl\n  }\n  return normalized\n}\n\nexport function createInternalClientCore<\n  TModels extends AthenaClientModelsInput | never = never,\n>(\n  config: InternalClientConfig<TModels>,\n): InternalAthenaClientCore<TModels> {\n  const normalizedAuthConfig = normalizeAuthClientConfig(config.auth, config.authUrl)\n  const gatewayTransport = createAthenaGatewayClient({\n    baseUrl: config.baseUrl,\n    apiKey: config.apiKey,\n    client: config.client ?? undefined,\n    pgUri: config.pgUri,\n    jdbcUrl: config.jdbcUrl,\n    backend: config.backend,\n    headers: config.headers,\n  })\n  return Object.freeze({\n    config,\n    gatewayTransport,\n    formatGatewayResult: createResultFormatter(),\n    queryTracer: createQueryTracer(config.behavior),\n    normalizedAuthConfig,\n  })\n}\n\nexport function createInternalClientView<\n  TModels extends AthenaClientModelsInput | never = never,\n>(\n  core: InternalAthenaClientCore<TModels>,\n  resolveContext: InternalClientContextResolver,\n): InternalAthenaClient<TModels> {\n  const { config, formatGatewayResult, normalizedAuthConfig, queryTracer } = core\n  const gateway = createAthenaGatewayClientView(core.gatewayTransport, async () => {\n    const context = await resolveContext()\n    return context\n      ? {\n          headers: context.headers,\n          userId: context.userId,\n          organizationId: context.organizationId,\n          bearerToken: context.bearerToken,\n          cookie: context.cookie,\n          sessionToken: context.sessionToken,\n          forceNoCache: context.forceNoCache,\n        }\n      : undefined\n  })\n  const auth = createAuthModule({\n    ...(normalizedAuthConfig ?? {}),\n  }, {\n    async resolveCallOptions() {\n      const context = await resolveContext()\n      return context\n        ? {\n            headers: buildContextHeaders(context),\n            bearerToken: context.bearerToken ?? undefined,\n            cookie: context.cookie ?? undefined,\n            sessionToken: context.sessionToken ?? undefined,\n            forceNoCache: context.forceNoCache,\n          }\n        : undefined\n    },\n  })\n  function from<TModel extends AthenaModelTarget>(\n    model: TModel,\n  ): TableQueryBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>>\n  function from<TTableName extends AthenaClientTableName<TModels>>(\n    table: TTableName,\n    options?: AthenaFromOptions,\n  ): ClientTableQueryBuilder<TModels, TTableName>\n  function from<\n    Row = AthenaRowShape,\n    Insert = Partial<Row>,\n    Update = Partial<Insert>,\n  >(\n    table: UntypedTableName<TModels>,\n    options?: AthenaFromOptions,\n  ): TableQueryBuilder<Row, Insert, Update>\n  function from<\n    Row = AthenaRowShape,\n    Insert = Partial<Row>,\n    Update = Partial<Insert>,\n  >(\n    tableOrModel: string | AthenaModelTarget<Row, Insert, Update>,\n    options?: AthenaFromOptions,\n  ): TableQueryBuilder<Row, Insert, Update> {\n    if (isAthenaModelTarget(tableOrModel)) {\n      if (options?.schema !== undefined) {\n        throw new Error(\n          'from(model) does not accept a schema override because the model already defines its target.',\n        )\n      }\n      return createTableBuilder<Row, Insert, Update>(\n        resolveAthenaModelTargetTableName(tableOrModel),\n        gateway,\n        formatGatewayResult,\n        queryTracer,\n        config.behavior,\n      )\n    }\n\n    const resolvedTableName = resolveTableNameForCall(tableOrModel as string, options?.schema)\n    return createTableBuilder<Row, Insert, Update>(\n      resolvedTableName,\n      gateway,\n      formatGatewayResult,\n      queryTracer,\n      config.behavior,\n    )\n  }\n  const rpc: InternalAthenaClient<TModels>['rpc'] = <Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\n    fn: string,\n    args?: Args,\n    options?: AthenaRpcCallOptions,\n  ) => {\n    const normalizedFn = fn.trim()\n    if (!normalizedFn) {\n      throw new Error('rpc requires a function name')\n    }\n    return createRpcBuilder<Row>(\n      normalizedFn,\n      args as AthenaJsonObject | undefined,\n      options,\n      gateway,\n      formatGatewayResult,\n      queryTracer,\n      captureTraceCallsite(queryTracer),\n      Boolean(config.behavior?.debugAst),\n    )\n  }\n  const query = createQueryBuilder(\n    gateway,\n    formatGatewayResult,\n    config.behavior,\n    queryTracer,\n  ) as InternalAthenaClient<TModels>['query']\n  const untypedDbFrom = from as unknown as AthenaDbModule['from']\n  const db = {\n    from,\n    select<Row = AthenaRowShape>(\n      table: string,\n      first?: AthenaGatewayCallOptions | AthenaSelectInput,\n      second?: AthenaGatewayCallOptions,\n    ) {\n      if (first && typeof first === 'object' && !Array.isArray(first)) {\n        return untypedDbFrom<Row>(table).select(undefined, first as AthenaGatewayCallOptions)\n      }\n      return untypedDbFrom<Row>(table).select(first, second)\n    },\n    insert<Row = AthenaRowShape, Insert = Partial<Row>>(\n      table: string,\n      values: Insert | Insert[],\n      options?: AthenaGatewayCallOptions,\n    ) {\n      return Array.isArray(values)\n        ? untypedDbFrom<Row, Insert, Partial<Insert>>(table).insert(values, options)\n        : untypedDbFrom<Row, Insert, Partial<Insert>>(table).insert(values, options)\n    },\n    upsert<Row = AthenaRowShape, Insert = Partial<Row>, Update = Partial<Insert>>(\n      table: string,\n      values: Insert | Insert[],\n      options?: AthenaGatewayCallOptions & {\n        updateBody?: Update\n        onConflict?: string | string[]\n      },\n    ) {\n      return Array.isArray(values)\n        ? untypedDbFrom<Row, Insert, Update>(table).upsert(values, options)\n        : untypedDbFrom<Row, Insert, Update>(table).upsert(values, options)\n    },\n    update<Row = AthenaRowShape, Insert = Partial<Row>, Update = Partial<Insert>>(\n      table: string,\n      values: Update,\n      options?: AthenaGatewayCallOptions,\n    ) {\n      return untypedDbFrom<Row, Insert, Update>(table).update(values, options)\n    },\n    delete<Row = AthenaRowShape>(\n      table: string,\n      options?: AthenaGatewayCallOptions & { resourceId?: string },\n    ) {\n      return untypedDbFrom<Row>(table).delete(options)\n    },\n    rpc,\n    query,\n  } as AthenaDbModule<TModels>\n  const chat = createChatModule({\n    baseUrl: config.chatUrl,\n    apiKey: config.apiKey,\n    client: config.client ?? undefined,\n    headers: config.headers,\n    wsUrl: config.chatWsUrl,\n    webSocketFactory: config.chat?.webSocketFactory ?? undefined,\n  }, {\n    async resolveCallOptions() {\n      const context = await resolveContext()\n      return context\n        ? {\n            headers: buildContextHeaders(context),\n            bearerToken: context.bearerToken,\n            cookie: context.cookie,\n            sessionToken: context.sessionToken,\n            forceNoCache: context.forceNoCache,\n          }\n        : undefined\n    },\n  })\n  const request = createAthenaRequest(config, resolveContext)\n  const storage = createStorageModule(gateway, {\n    ...config.storage,\n    ...(config.storageUrl\n      ? {\n          baseUrl: config.storageUrl,\n          stripBasePath: true,\n        }\n      : {}),\n  })\n\n  return {\n    from,\n    db,\n    rpc,\n    query,\n    request,\n    verifyConnection: gateway.verifyConnection,\n    auth: auth.auth,\n    chat,\n    storage,\n  } as InternalAthenaClient<TModels>\n}\n","/**\n * Athena billing HTTP client for live `/billing/v1/*`, `/admin/billing/*`,\n * provider webhook, and `/debug/billing` routes.\n *\n * Methods map 1:1 onto the registered Actix handlers. Auth uses the static\n * Athena admin key (`X-Athena-Key` / configured API key) matching the server\n * `authorize_static_admin_key` gate.\n *\n * Contract spine: `billingSdkManifest` METHOD+path entries must match the\n * permanent Rust inventory `athena_billing::LIVE_HTTP_ROUTES`\n * (exported as `./live-http-routes.json`). Export with\n * `cargo run -p athena-billing --bin billing-contract-spine -- --write`.\n */\n\nimport { buildSdkHeaderValue } from '../sdk-version.ts'\nimport {\n  buildAthenaRequestHeaders,\n  hasHeaderIgnoreCase,\n} from '../utils/athena-request-headers.ts'\nimport { normalizeAthenaGatewayBaseUrl } from '../gateway/url.ts'\n\nconst SDK_NAME = 'xylex-group/athena-billing'\nconst SDK_HEADER_VALUE = buildSdkHeaderValue(SDK_NAME)\n\nexport type AthenaBillingHttpMethod = 'GET' | 'POST' | 'PATCH' | 'DELETE'\n\nexport type AthenaBillingJson =\n  | null\n  | boolean\n  | number\n  | string\n  | AthenaBillingJson[]\n  | { [key: string]: AthenaBillingJson }\n\nexport interface AthenaBillingCallOptions {\n  headers?: Record<string, string>\n  signal?: AbortSignal\n  apiKey?: string | null\n}\n\nexport interface AthenaBillingClientConfig {\n  baseUrl: string\n  apiKey: string\n  client?: string | null\n  headers?: Record<string, string>\n  fetchImpl?: typeof fetch\n}\n\nexport interface AthenaBillingEnvelope<T = unknown> {\n  status?: string\n  message?: string\n  data: T\n}\n\nexport class AthenaBillingError extends Error {\n  status: number\n  endpoint: string\n  method: string\n  body: unknown\n\n  constructor(input: {\n    message: string\n    status: number\n    endpoint: string\n    method: string\n    body: unknown\n  }) {\n    super(input.message)\n    this.name = 'AthenaBillingError'\n    this.status = input.status\n    this.endpoint = input.endpoint\n    this.method = input.method\n    this.body = input.body\n  }\n}\n\nexport interface BillingConnectionRefInput {\n  connectionId: string\n  clientName?: string\n}\n\nexport interface BillingListQuery extends BillingConnectionRefInput {\n  cursor?: string\n  source?: 'provider' | 'persistence' | string\n  limit?: number\n  offset?: number\n}\n\nexport interface BillingEnsureCustomerInput extends BillingConnectionRefInput {\n  email?: string | null\n  name?: string | null\n  metadata?: Record<string, AthenaBillingJson>\n  idempotencyKey: string\n}\n\nexport interface BillingUpdateCustomerInput extends BillingConnectionRefInput {\n  email?: string | null\n  name?: string | null\n}\n\nexport interface BillingCreateConnectionInput {\n  ownerKind: string\n  ownerId: string\n  provider: string\n  mode?: string\n  status?: string\n  credentialKind?: string\n  providerAccountId: string\n  providerProfileId?: string | null\n  scopes?: string[]\n  config?: Record<string, AthenaBillingJson>\n  metadata?: Record<string, AthenaBillingJson>\n}\n\nexport interface BillingUpdateConnectionInput {\n  status?: string\n  mode?: string\n  credentialKind?: string\n  providerAccountId?: string\n  providerProfileId?: string | null\n  scopes?: string[]\n  config?: Record<string, AthenaBillingJson>\n  metadata?: Record<string, AthenaBillingJson>\n}\n\nexport interface BillingReconcileInput {\n  resourceKind: string\n  resourceId: string\n  customerId?: string | null\n}\n\nexport interface BillingProvisionSinksInput {\n  targetSchema?: string\n  instance?: string\n}\n\nexport const billingSdkManifest = {\n  namespace: 'billing',\n  envelopeKind: 'athena',\n  methods: [\n    { name: 'getCapabilities', method: 'GET', path: '/billing/v1/capabilities' },\n    { name: 'createCheckout', method: 'POST', path: '/billing/v1/checkouts' },\n    { name: 'listProducts', method: 'GET', path: '/billing/v1/products' },\n    { name: 'listPrices', method: 'GET', path: '/billing/v1/prices' },\n    { name: 'listCustomers', method: 'GET', path: '/billing/v1/customers' },\n    { name: 'createCustomer', method: 'POST', path: '/billing/v1/customers' },\n    { name: 'getCustomer', method: 'GET', path: '/billing/v1/customers/{id}' },\n    { name: 'updateCustomer', method: 'PATCH', path: '/billing/v1/customers/{id}' },\n    { name: 'deleteCustomer', method: 'DELETE', path: '/billing/v1/customers/{id}' },\n    { name: 'listPayments', method: 'GET', path: '/billing/v1/payments' },\n    { name: 'createPayment', method: 'POST', path: '/billing/v1/payments' },\n    { name: 'getPayment', method: 'GET', path: '/billing/v1/payments/{id}' },\n    { name: 'cancelPayment', method: 'POST', path: '/billing/v1/payments/{id}/cancel' },\n    { name: 'listPaymentLinks', method: 'GET', path: '/billing/v1/payment-links' },\n    { name: 'createPaymentLink', method: 'POST', path: '/billing/v1/payment-links' },\n    { name: 'getPaymentLink', method: 'GET', path: '/billing/v1/payment-links/{id}' },\n    { name: 'updatePaymentLink', method: 'PATCH', path: '/billing/v1/payment-links/{id}' },\n    { name: 'deletePaymentLink', method: 'DELETE', path: '/billing/v1/payment-links/{id}' },\n    { name: 'listRefunds', method: 'GET', path: '/billing/v1/refunds' },\n    { name: 'createRefund', method: 'POST', path: '/billing/v1/refunds' },\n    { name: 'getRefund', method: 'GET', path: '/billing/v1/refunds/{id}' },\n    { name: 'cancelRefund', method: 'POST', path: '/billing/v1/refunds/{id}/cancel' },\n    { name: 'listSubscriptions', method: 'GET', path: '/billing/v1/subscriptions' },\n    { name: 'createSubscription', method: 'POST', path: '/billing/v1/subscriptions' },\n    { name: 'getSubscription', method: 'GET', path: '/billing/v1/subscriptions/{id}' },\n    { name: 'updateSubscription', method: 'PATCH', path: '/billing/v1/subscriptions/{id}' },\n    { name: 'cancelSubscription', method: 'POST', path: '/billing/v1/subscriptions/{id}/cancel' },\n    { name: 'listInvoices', method: 'GET', path: '/billing/v1/invoices' },\n    { name: 'getInvoice', method: 'GET', path: '/billing/v1/invoices/{id}' },\n    { name: 'listWebhooks', method: 'GET', path: '/billing/v1/webhooks' },\n    { name: 'createWebhook', method: 'POST', path: '/billing/v1/webhooks' },\n    { name: 'getWebhook', method: 'GET', path: '/billing/v1/webhooks/{id}' },\n    { name: 'updateWebhook', method: 'PATCH', path: '/billing/v1/webhooks/{id}' },\n    { name: 'deleteWebhook', method: 'DELETE', path: '/billing/v1/webhooks/{id}' },\n    { name: 'testWebhook', method: 'POST', path: '/billing/v1/webhooks/{id}/test' },\n    {\n      name: 'listConnections',\n      method: 'GET',\n      path: '/admin/billing/clients/{client_name}/connections',\n    },\n    {\n      name: 'createConnection',\n      method: 'POST',\n      path: '/admin/billing/clients/{client_name}/connections',\n    },\n    {\n      name: 'getConnection',\n      method: 'GET',\n      path: '/admin/billing/clients/{client_name}/connections/{connection_id}',\n    },\n    {\n      name: 'updateConnection',\n      method: 'PATCH',\n      path: '/admin/billing/clients/{client_name}/connections/{connection_id}',\n    },\n    {\n      name: 'deleteConnection',\n      method: 'DELETE',\n      path: '/admin/billing/clients/{client_name}/connections/{connection_id}',\n    },\n    {\n      name: 'reconcileDocument',\n      method: 'POST',\n      path: '/admin/billing/clients/{client_name}/connections/{connection_id}/reconcile',\n    },\n    {\n      name: 'listWebhookEvents',\n      method: 'GET',\n      path: '/admin/billing/clients/{client_name}/webhook-events',\n    },\n    {\n      name: 'provisionWebhookSinks',\n      method: 'POST',\n      path: '/admin/billing/clients/{client_name}/webhook-sinks/provision',\n    },\n    { name: 'listGrants', method: 'GET', path: '/admin/billing/grants' },\n    { name: 'listProviders', method: 'GET', path: '/admin/billing/providers' },\n    {\n      name: 'listSinkHelpers',\n      method: 'GET',\n      path: '/admin/webhook-sinks/helpers/billing',\n    },\n    {\n      name: 'ingestProviderWebhook',\n      method: 'POST',\n      path: '/billing/providers/{provider}/clients/{client_name}/connections/{connection_id}/webhook',\n    },\n    { name: 'getDebugBilling', method: 'GET', path: '/debug/billing' },\n  ],\n} as const\n\nfunction withPathParam(path: string, name: string, value: string): string {\n  return path.replace(`{${name}}`, encodeURIComponent(value))\n}\n\nfunction appendQuery(\n  path: string,\n  query?: Record<string, string | number | boolean | null | undefined>,\n): string {\n  if (!query) return path\n  const params = new URLSearchParams()\n  for (const [key, value] of Object.entries(query)) {\n    if (value === undefined || value === null) continue\n    params.set(key, String(value))\n  }\n  const serialized = params.toString()\n  return serialized ? `${path}?${serialized}` : path\n}\n\nfunction connectionQuery(input: BillingListQuery | BillingConnectionRefInput): Record<string, string> {\n  const query: Record<string, string> = {\n    connectionId: input.connectionId,\n  }\n  if (input.clientName) query.clientName = input.clientName\n  if ('cursor' in input && input.cursor) query.cursor = input.cursor\n  if ('source' in input && input.source) query.source = input.source\n  if ('limit' in input && input.limit !== undefined) query.limit = String(input.limit)\n  if ('offset' in input && input.offset !== undefined) query.offset = String(input.offset)\n  return query\n}\n\nfunction parseEnvelopeData<T>(body: unknown): T {\n  if (body && typeof body === 'object' && 'data' in body) {\n    return (body as AthenaBillingEnvelope<T>).data\n  }\n  return body as T\n}\n\nexport interface AthenaBillingModule {\n  getCapabilities(input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  createCheckout(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n  listProducts(input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  listPrices(\n    input: BillingConnectionRefInput & { productId?: string },\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  listCustomers(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n  createCustomer(input: BillingEnsureCustomerInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  getCustomer(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  updateCustomer(\n    id: string,\n    input: BillingUpdateCustomerInput,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  deleteCustomer(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  listPayments(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n  createPayment(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n  getPayment(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  cancelPayment(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  listPaymentLinks(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n  createPaymentLink(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n  getPaymentLink(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  updatePaymentLink(\n    id: string,\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  deletePaymentLink(\n    id: string,\n    input: BillingConnectionRefInput,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  listRefunds(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n  createRefund(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n  getRefund(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  cancelRefund(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  listSubscriptions(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n  createSubscription(body: Record<string, unknown>, options?: AthenaBillingCallOptions): Promise<unknown>\n  getSubscription(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  updateSubscription(\n    id: string,\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  cancelSubscription(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  listInvoices(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n  getInvoice(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  listWebhooks(input: BillingListQuery, options?: AthenaBillingCallOptions): Promise<unknown>\n  createWebhook(\n    input: BillingConnectionRefInput,\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  getWebhook(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  updateWebhook(\n    id: string,\n    input: BillingConnectionRefInput,\n    body: Record<string, unknown>,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  deleteWebhook(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  testWebhook(id: string, input: BillingConnectionRefInput, options?: AthenaBillingCallOptions): Promise<unknown>\n  listConnections(clientName: string, options?: AthenaBillingCallOptions): Promise<unknown>\n  createConnection(\n    clientName: string,\n    input: BillingCreateConnectionInput,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  getConnection(\n    clientName: string,\n    connectionId: string,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  updateConnection(\n    clientName: string,\n    connectionId: string,\n    input: BillingUpdateConnectionInput,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  deleteConnection(\n    clientName: string,\n    connectionId: string,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  reconcileDocument(\n    clientName: string,\n    connectionId: string,\n    input: BillingReconcileInput,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  listWebhookEvents(clientName: string, options?: AthenaBillingCallOptions): Promise<unknown>\n  provisionWebhookSinks(\n    clientName: string,\n    input?: BillingProvisionSinksInput,\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  listGrants(options?: AthenaBillingCallOptions): Promise<unknown>\n  listProviders(options?: AthenaBillingCallOptions): Promise<unknown>\n  listSinkHelpers(\n    query?: { targetSchema?: string; instance?: string },\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  ingestProviderWebhook(\n    input: {\n      provider: string\n      clientName: string\n      connectionId: string\n      body: BodyInit | Record<string, unknown> | string\n      signatureHeaders?: Record<string, string>\n    },\n    options?: AthenaBillingCallOptions,\n  ): Promise<unknown>\n  getDebugBilling(jwtSecret: string, options?: AthenaBillingCallOptions): Promise<string>\n}\n\nexport function createBillingModule(config: AthenaBillingClientConfig): AthenaBillingModule {\n  const baseUrl = normalizeAthenaGatewayBaseUrl(config.baseUrl, {\n    label: 'Athena billing base URL',\n  })\n  const fetchImpl = config.fetchImpl ?? globalThis.fetch.bind(globalThis)\n\n  async function call<T>(\n    method: AthenaBillingHttpMethod,\n    path: string,\n    body?: unknown,\n    options?: AthenaBillingCallOptions,\n    responseType: 'json' | 'text' = 'json',\n  ): Promise<T> {\n    const headers = buildAthenaRequestHeaders({\n      profile: 'gateway',\n      sdkHeaderValue: SDK_HEADER_VALUE,\n      apiKey: options?.apiKey ?? config.apiKey,\n      client: config.client,\n      configHeaders: {\n        ...(config.headers ?? {}),\n      },\n      callHeaders: options?.headers,\n      contentType: 'application/json',\n    })\n\n    let requestBody: BodyInit | undefined\n    if (body !== undefined && body !== null) {\n      if (\n        typeof body === 'string' ||\n        body instanceof Blob ||\n        body instanceof ArrayBuffer ||\n        ArrayBuffer.isView(body) ||\n        body instanceof FormData ||\n        body instanceof URLSearchParams\n      ) {\n        requestBody = body as BodyInit\n      } else {\n        requestBody = JSON.stringify(body)\n        if (!hasHeaderIgnoreCase(headers, 'Content-Type')) {\n          headers['Content-Type'] = 'application/json'\n        }\n      }\n    }\n\n    const targetUrl = `${baseUrl}${path.startsWith('/') ? path : `/${path}`}`\n    const response = await fetchImpl(targetUrl, {\n      method,\n      headers,\n      body: requestBody,\n      signal: options?.signal,\n    })\n\n    if (responseType === 'text') {\n      const text = await response.text()\n      if (!response.ok) {\n        throw new AthenaBillingError({\n          message: `Billing request failed (${response.status})`,\n          status: response.status,\n          endpoint: path,\n          method,\n          body: text,\n        })\n      }\n      return text as T\n    }\n\n    const rawText = await response.text()\n    let parsed: unknown = rawText\n    if (rawText) {\n      try {\n        parsed = JSON.parse(rawText)\n      } catch {\n        parsed = rawText\n      }\n    } else {\n      parsed = null\n    }\n\n    if (!response.ok) {\n      const message =\n        parsed &&\n        typeof parsed === 'object' &&\n        'message' in parsed &&\n        typeof (parsed as { message: unknown }).message === 'string'\n          ? (parsed as { message: string }).message\n          : `Billing request failed (${response.status})`\n      throw new AthenaBillingError({\n        message,\n        status: response.status,\n        endpoint: path,\n        method,\n        body: parsed,\n      })\n    }\n\n    return parseEnvelopeData<T>(parsed)\n  }\n\n  return {\n    getCapabilities(input, options) {\n      return call(\n        'GET',\n        appendQuery('/billing/v1/capabilities', connectionQuery(input)),\n        undefined,\n        options,\n      )\n    },\n    createCheckout(body, options) {\n      return call('POST', '/billing/v1/checkouts', body, options)\n    },\n    listProducts(input, options) {\n      return call(\n        'GET',\n        appendQuery('/billing/v1/products', connectionQuery(input)),\n        undefined,\n        options,\n      )\n    },\n    listPrices(input, options) {\n      return call(\n        'GET',\n        appendQuery('/billing/v1/prices', {\n          ...connectionQuery(input),\n          ...(input.productId ? { productId: input.productId } : {}),\n        }),\n        undefined,\n        options,\n      )\n    },\n    listCustomers(input, options) {\n      return call(\n        'GET',\n        appendQuery('/billing/v1/customers', connectionQuery(input)),\n        undefined,\n        options,\n      )\n    },\n    createCustomer(input, options) {\n      return call(\n        'POST',\n        '/billing/v1/customers',\n        {\n          connectionId: input.connectionId,\n          clientName: input.clientName,\n          email: input.email,\n          name: input.name,\n          metadata: input.metadata ?? {},\n          idempotencyKey: input.idempotencyKey,\n        },\n        options,\n      )\n    },\n    getCustomer(id, input, options) {\n      return call(\n        'GET',\n        appendQuery(\n          withPathParam('/billing/v1/customers/{id}', 'id', id),\n          connectionQuery(input),\n        ),\n        undefined,\n        options,\n      )\n    },\n    updateCustomer(id, input, options) {\n      return call(\n        'PATCH',\n        withPathParam('/billing/v1/customers/{id}', 'id', id),\n        {\n          connectionId: input.connectionId,\n          clientName: input.clientName,\n          email: input.email,\n          name: input.name,\n        },\n        options,\n      )\n    },\n    deleteCustomer(id, input, options) {\n      return call(\n        'DELETE',\n        appendQuery(\n          withPathParam('/billing/v1/customers/{id}', 'id', id),\n          connectionQuery(input),\n        ),\n        undefined,\n        options,\n      )\n    },\n    listPayments(input, options) {\n      return call(\n        'GET',\n        appendQuery('/billing/v1/payments', connectionQuery(input)),\n        undefined,\n        options,\n      )\n    },\n    createPayment(body, options) {\n      return call('POST', '/billing/v1/payments', body, options)\n    },\n    getPayment(id, input, options) {\n      return call(\n        'GET',\n        appendQuery(\n          withPathParam('/billing/v1/payments/{id}', 'id', id),\n          connectionQuery(input),\n        ),\n        undefined,\n        options,\n      )\n    },\n    cancelPayment(id, input, options) {\n      return call(\n        'POST',\n        appendQuery(\n          withPathParam('/billing/v1/payments/{id}/cancel', 'id', id),\n          connectionQuery(input),\n        ),\n        {},\n        options,\n      )\n    },\n    listPaymentLinks(input, options) {\n      return call(\n        'GET',\n        appendQuery('/billing/v1/payment-links', connectionQuery(input)),\n        undefined,\n        options,\n      )\n    },\n    createPaymentLink(body, options) {\n      return call('POST', '/billing/v1/payment-links', body, options)\n    },\n    getPaymentLink(id, input, options) {\n      return call(\n        'GET',\n        appendQuery(\n          withPathParam('/billing/v1/payment-links/{id}', 'id', id),\n          connectionQuery(input),\n        ),\n        undefined,\n        options,\n      )\n    },\n    updatePaymentLink(id, body, options) {\n      return call(\n        'PATCH',\n        withPathParam('/billing/v1/payment-links/{id}', 'id', id),\n        body,\n        options,\n      )\n    },\n    deletePaymentLink(id, input, options) {\n      return call(\n        'DELETE',\n        appendQuery(\n          withPathParam('/billing/v1/payment-links/{id}', 'id', id),\n          connectionQuery(input),\n        ),\n        undefined,\n        options,\n      )\n    },\n    listRefunds(input, options) {\n      return call(\n        'GET',\n        appendQuery('/billing/v1/refunds', connectionQuery(input)),\n        undefined,\n        options,\n      )\n    },\n    createRefund(body, options) {\n      return call('POST', '/billing/v1/refunds', body, options)\n    },\n    getRefund(id, input, options) {\n      return call(\n        'GET',\n        appendQuery(withPathParam('/billing/v1/refunds/{id}', 'id', id), connectionQuery(input)),\n        undefined,\n        options,\n      )\n    },\n    cancelRefund(id, input, options) {\n      return call(\n        'POST',\n        appendQuery(withPathParam('/billing/v1/refunds/{id}/cancel', 'id', id), connectionQuery(input)),\n        {},\n        options,\n      )\n    },\n    listSubscriptions(input, options) {\n      return call(\n        'GET',\n        appendQuery('/billing/v1/subscriptions', connectionQuery(input)),\n        undefined,\n        options,\n      )\n    },\n    createSubscription(body, options) {\n      return call('POST', '/billing/v1/subscriptions', body, options)\n    },\n    getSubscription(id, input, options) {\n      return call(\n        'GET',\n        appendQuery(\n          withPathParam('/billing/v1/subscriptions/{id}', 'id', id),\n          connectionQuery(input),\n        ),\n        undefined,\n        options,\n      )\n    },\n    updateSubscription(id, body, options) {\n      return call(\n        'PATCH',\n        withPathParam('/billing/v1/subscriptions/{id}', 'id', id),\n        body,\n        options,\n      )\n    },\n    cancelSubscription(id, input, options) {\n      return call(\n        'POST',\n        appendQuery(\n          withPathParam('/billing/v1/subscriptions/{id}/cancel', 'id', id),\n          connectionQuery(input),\n        ),\n        {},\n        options,\n      )\n    },\n    listInvoices(input, options) {\n      return call(\n        'GET',\n        appendQuery('/billing/v1/invoices', connectionQuery(input)),\n        undefined,\n        options,\n      )\n    },\n    getInvoice(id, input, options) {\n      return call(\n        'GET',\n        appendQuery(\n          withPathParam('/billing/v1/invoices/{id}', 'id', id),\n          connectionQuery(input),\n        ),\n        undefined,\n        options,\n      )\n    },\n    listWebhooks(input, options) {\n      return call(\n        'GET',\n        appendQuery('/billing/v1/webhooks', connectionQuery(input)),\n        undefined,\n        options,\n      )\n    },\n    createWebhook(input, body, options) {\n      return call(\n        'POST',\n        appendQuery('/billing/v1/webhooks', connectionQuery(input)),\n        body,\n        options,\n      )\n    },\n    getWebhook(id, input, options) {\n      return call(\n        'GET',\n        appendQuery(withPathParam('/billing/v1/webhooks/{id}', 'id', id), connectionQuery(input)),\n        undefined,\n        options,\n      )\n    },\n    updateWebhook(id, input, body, options) {\n      return call(\n        'PATCH',\n        appendQuery(withPathParam('/billing/v1/webhooks/{id}', 'id', id), connectionQuery(input)),\n        body,\n        options,\n      )\n    },\n    deleteWebhook(id, input, options) {\n      return call(\n        'DELETE',\n        appendQuery(withPathParam('/billing/v1/webhooks/{id}', 'id', id), connectionQuery(input)),\n        undefined,\n        options,\n      )\n    },\n    testWebhook(id, input, options) {\n      return call(\n        'POST',\n        appendQuery(\n          withPathParam('/billing/v1/webhooks/{id}/test', 'id', id),\n          connectionQuery(input),\n        ),\n        {},\n        options,\n      )\n    },\n    listConnections(clientName, options) {\n      return call(\n        'GET',\n        withPathParam('/admin/billing/clients/{client_name}/connections', 'client_name', clientName),\n        undefined,\n        options,\n      )\n    },\n    createConnection(clientName, input, options) {\n      return call(\n        'POST',\n        withPathParam('/admin/billing/clients/{client_name}/connections', 'client_name', clientName),\n        {\n          ownerKind: input.ownerKind,\n          ownerId: input.ownerId,\n          provider: input.provider,\n          mode: input.mode,\n          status: input.status,\n          credentialKind: input.credentialKind,\n          providerAccountId: input.providerAccountId,\n          providerProfileId: input.providerProfileId,\n          scopes: input.scopes,\n          config: input.config,\n          metadata: input.metadata,\n        },\n        options,\n      )\n    },\n    getConnection(clientName, connectionId, options) {\n      return call(\n        'GET',\n        withPathParam(\n          withPathParam(\n            '/admin/billing/clients/{client_name}/connections/{connection_id}',\n            'client_name',\n            clientName,\n          ),\n          'connection_id',\n          connectionId,\n        ),\n        undefined,\n        options,\n      )\n    },\n    updateConnection(clientName, connectionId, input, options) {\n      return call(\n        'PATCH',\n        withPathParam(\n          withPathParam(\n            '/admin/billing/clients/{client_name}/connections/{connection_id}',\n            'client_name',\n            clientName,\n          ),\n          'connection_id',\n          connectionId,\n        ),\n        input,\n        options,\n      )\n    },\n    deleteConnection(clientName, connectionId, options) {\n      return call(\n        'DELETE',\n        withPathParam(\n          withPathParam(\n            '/admin/billing/clients/{client_name}/connections/{connection_id}',\n            'client_name',\n            clientName,\n          ),\n          'connection_id',\n          connectionId,\n        ),\n        undefined,\n        options,\n      )\n    },\n    reconcileDocument(clientName, connectionId, input, options) {\n      return call(\n        'POST',\n        withPathParam(\n          withPathParam(\n            '/admin/billing/clients/{client_name}/connections/{connection_id}/reconcile',\n            'client_name',\n            clientName,\n          ),\n          'connection_id',\n          connectionId,\n        ),\n        {\n          resourceKind: input.resourceKind,\n          resourceId: input.resourceId,\n          customerId: input.customerId,\n        },\n        options,\n      )\n    },\n    listWebhookEvents(clientName, options) {\n      return call(\n        'GET',\n        withPathParam(\n          '/admin/billing/clients/{client_name}/webhook-events',\n          'client_name',\n          clientName,\n        ),\n        undefined,\n        options,\n      )\n    },\n    provisionWebhookSinks(clientName, input, options) {\n      return call(\n        'POST',\n        appendQuery(\n          withPathParam(\n            '/admin/billing/clients/{client_name}/webhook-sinks/provision',\n            'client_name',\n            clientName,\n          ),\n          {\n            targetSchema: input?.targetSchema,\n            instance: input?.instance,\n          },\n        ),\n        {},\n        options,\n      )\n    },\n    listGrants(options) {\n      return call('GET', '/admin/billing/grants', undefined, options)\n    },\n    listProviders(options) {\n      return call('GET', '/admin/billing/providers', undefined, options)\n    },\n    listSinkHelpers(query, options) {\n      return call(\n        'GET',\n        appendQuery('/admin/webhook-sinks/helpers/billing', {\n          targetSchema: query?.targetSchema,\n          instance: query?.instance,\n        }),\n        undefined,\n        options,\n      )\n    },\n    ingestProviderWebhook(input, options) {\n      const path = withPathParam(\n        withPathParam(\n          withPathParam(\n            '/billing/providers/{provider}/clients/{client_name}/connections/{connection_id}/webhook',\n            'provider',\n            input.provider,\n          ),\n          'client_name',\n          input.clientName,\n        ),\n        'connection_id',\n        input.connectionId,\n      )\n      return call('POST', path, input.body, {\n        ...options,\n        headers: {\n          ...(options?.headers ?? {}),\n          ...(input.signatureHeaders ?? {}),\n        },\n      })\n    },\n    getDebugBilling(jwtSecret, options) {\n      return call(\n        'GET',\n        appendQuery('/debug/billing', { jwt_secret: jwtSecret }),\n        undefined,\n        options,\n        'text',\n      )\n    },\n  }\n}\n","export type AthenaService = 'db' | 'auth' | 'chat' | 'storage' | 'billing'\n\nexport type AthenaConfigurationErrorCode =\n  | 'ATHENA_NO_SERVICE_CONFIGURED'\n  | 'ATHENA_SERVICE_NOT_CONFIGURED'\n  | 'ATHENA_API_KEY_REQUIRED'\n  | 'ATHENA_INVALID_URL'\n  | 'ATHENA_NEXT_SERVER_RUNTIME_REQUIRED'\n\n/**\n * Structured configuration failure raised during client construction or\n * unavailable-service access. Distinct from transport/auth/gateway errors.\n */\nexport class AthenaConfigurationError extends Error {\n  readonly code: AthenaConfigurationErrorCode\n  readonly service?: AthenaService\n\n  constructor(\n    code: AthenaConfigurationErrorCode,\n    message: string,\n    service?: AthenaService,\n  ) {\n    super(message)\n    this.name = 'AthenaConfigurationError'\n    this.code = code\n    this.service = service\n  }\n}\n","import type { AthenaAuthBindings, AthenaAuthClientConfig } from './auth/types.ts'\nimport {\n  createInternalClientCore,\n  createInternalClientView,\n  type AthenaFromOptions,\n  type InternalAthenaClientCore,\n  type InternalAthenaClient,\n  type AthenaQueryTraceOptions,\n  type AthenaRequestOptions,\n  type AthenaRequestResponse,\n  type AthenaResult,\n  type RpcQueryBuilder,\n  type TableQueryBuilder,\n} from './client.ts'\nimport type { AthenaChatModule, AthenaChatWebSocketFactory } from './chat/types.ts'\nimport type { AthenaDbModule } from './db/module.ts'\nimport type {\n  AthenaGatewayCallOptions,\n  AthenaGatewayConnectionOptions,\n  AthenaGatewayConnectionResult,\n  AthenaJsonObject,\n  AthenaRpcCallOptions,\n  BackendConfig,\n  BackendType,\n} from './gateway/types.ts'\nimport type {\n  AthenaClientModelsInput,\n  AthenaClientModelForTableName,\n  AthenaClientTableName,\n  AthenaModelTarget,\n  InsertOf,\n  RowOf,\n  UpdateOf,\n} from './schema/types.ts'\nimport type {\n  AthenaStorageClientConfig,\n  AthenaStorageDirectUploadConfig,\n  AthenaStorageModule,\n} from './storage/module.ts'\nimport {\n  createBillingModule,\n  type AthenaBillingClientConfig,\n  type AthenaBillingModule,\n} from './billing/module.ts'\nimport {\n  AthenaConfigurationError,\n  type AthenaService,\n} from './config/errors.ts'\nimport { mergeAthenaRequestContexts } from './context/merge.ts'\n\ntype MaybePromise<T> = T | Promise<T>\ntype ResolvedModels<TModels> = TModels extends AthenaClientModelsInput ? TModels : never\n\nconst ENV_URL_KEYS = ['ATHENA_URL', 'NEXT_PUBLIC_ATHENA_URL'] as const\nconst ENV_DB_URL_KEYS = ['ATHENA_DB_URL', 'ATHENA_GATEWAY_URL', 'NEXT_PUBLIC_ATHENA_DB_API_URL'] as const\nconst ENV_AUTH_URL_KEYS = ['ATHENA_AUTH_URL', 'NEXT_PUBLIC_ATHENA_AUTH_URL'] as const\nconst ENV_CHAT_URL_KEYS = ['ATHENA_CHAT_URL', 'NEXT_PUBLIC_ATHENA_CHAT_URL'] as const\nconst ENV_CHAT_WS_URL_KEYS = ['ATHENA_CHAT_WS_URL', 'NEXT_PUBLIC_ATHENA_CHAT_WS_URL'] as const\nconst ENV_STORAGE_URL_KEYS = ['ATHENA_STORAGE_URL', 'NEXT_PUBLIC_ATHENA_STORAGE_URL'] as const\nconst ENV_KEY_KEYS = ['ATHENA_API_KEY', 'NEXT_PUBLIC_ATHENA_API_KEY', 'ATHENA_GATEWAY_API_KEY', 'X_API_KEY'] as const\nconst ENV_CLIENT_KEYS = ['ATHENA_CLIENT', 'NEXT_PUBLIC_ATHENA_CLIENT'] as const\nconst MISSING_DB_SENTINEL = 'https://athena.invalid/db'\n\nexport {\n  AthenaConfigurationError,\n  type AthenaConfigurationErrorCode,\n  type AthenaService,\n} from './config/errors.ts'\n\nexport interface AthenaRequestContext {\n  userId?: string | null\n  organizationId?: string | null\n  headers?: Record<string, string>\n  cookie?: string | null\n  bearerToken?: string | null\n  sessionToken?: string | null\n  forceNoCache?: boolean\n}\n\nexport type AthenaRequestContextProvider = () => MaybePromise<AthenaRequestContext | undefined>\n\nexport interface AthenaDbConfig {\n  url?: string | null\n  pgUri?: string | null\n  jdbcUrl?: string | null\n}\n\nexport interface AthenaAuthConfig\n  extends Omit<\n    AthenaAuthClientConfig,\n    'baseUrl' | 'apiKey' | 'bearerToken' | 'cookie' | 'sessionToken'\n  > {\n  url?: string | null\n}\n\nexport interface AthenaChatConfig {\n  url?: string | null\n  wsUrl?: string | null\n  webSocketFactory?: AthenaChatWebSocketFactory | null\n}\n\nexport interface AthenaStorageConfig\n  extends Omit<AthenaStorageClientConfig, 'baseUrl' | 'directUpload'> {\n  url?: string | null\n  directUpload?: AthenaStorageDirectUploadConfig\n}\n\nexport interface AthenaBillingConfig\n  extends Omit<AthenaBillingClientConfig, 'baseUrl' | 'apiKey' | 'client' | 'fetchImpl'> {\n  /** Optional override; defaults to the unified/root or db Athena URL. */\n  url?: string | null\n}\n\nexport interface AthenaClientConfig<\n  TModels extends AthenaClientModelsInput | undefined = undefined,\n> {\n  url?: string | null\n  key?: string | null\n  client?: string | null\n  backend?: BackendConfig | BackendType\n  headers?: Record<string, string>\n  models?: TModels\n  env?: Record<string, string | undefined>\n  context?: AthenaRequestContext | AthenaRequestContextProvider\n  db?: AthenaDbConfig\n  auth?: AthenaAuthConfig\n  chat?: AthenaChatConfig\n  storage?: AthenaStorageConfig\n  billing?: AthenaBillingConfig\n  retryReads?: boolean\n  traceQueries?: boolean | AthenaQueryTraceOptions\n  debugAst?: boolean\n  findManyAst?: boolean\n}\n\ntype V3TableBuilder<\n  Row,\n  Insert = Partial<Row>,\n  Update = Partial<Insert>,\n  Result = unknown,\n> = TableQueryBuilder<Row, Insert, Update, Result>\n\nexport interface AthenaClient<\n  TModels extends AthenaClientModelsInput | undefined = AthenaClientModelsInput | undefined,\n> {\n  readonly db: AthenaDbModule<ResolvedModels<TModels>>\n  readonly auth: AthenaAuthBindings\n  readonly chat: AthenaChatModule\n  readonly storage: AthenaStorageModule\n  readonly billing: AthenaBillingModule\n  from<TModel extends AthenaModelTarget>(\n    model: TModel,\n  ): V3TableBuilder<RowOf<TModel>, InsertOf<TModel>, UpdateOf<TModel>>\n  from<TTableName extends AthenaClientTableName<ResolvedModels<TModels>>>(\n    table: TTableName,\n    options?: AthenaFromOptions,\n  ): V3TableBuilder<\n    RowOf<AthenaClientModelForTableName<ResolvedModels<TModels>, TTableName>>,\n    InsertOf<AthenaClientModelForTableName<ResolvedModels<TModels>, TTableName>>,\n    UpdateOf<AthenaClientModelForTableName<ResolvedModels<TModels>, TTableName>>\n  >\n  from<Row = Record<string, unknown>, Insert = Partial<Row>, Update = Partial<Insert>>(\n    table: string,\n    options?: AthenaFromOptions,\n  ): V3TableBuilder<Row, Insert, Update>\n  rpc<Row = unknown, Args extends AthenaJsonObject = AthenaJsonObject>(\n    fn: string,\n    args?: Args,\n    options?: AthenaRpcCallOptions,\n  ): RpcQueryBuilder<Row>\n  query<Row = unknown>(\n    query: string,\n    options?: AthenaGatewayCallOptions,\n  ): Promise<AthenaResult<Row[]>>\n  request<T = unknown>(options: AthenaRequestOptions): Promise<AthenaRequestResponse<T>>\n  verifyConnection(\n    options?: AthenaGatewayConnectionOptions,\n  ): Promise<AthenaGatewayConnectionResult>\n  withContext(context: AthenaRequestContext): AthenaClient<TModels>\n}\n\ninterface ResolvedServiceUrls {\n  db?: string\n  auth?: string\n  chat?: string\n  chatWs?: string\n  storage?: string\n  billing?: string\n}\n\ninterface AthenaClientCoreBase<TModels extends AthenaClientModelsInput | undefined> {\n  readonly config: AthenaClientConfig<TModels>\n  readonly urls: ResolvedServiceUrls\n  readonly key: string\n  readonly client?: string\n}\n\ninterface AthenaClientCore<TModels extends AthenaClientModelsInput | undefined>\n  extends AthenaClientCoreBase<TModels> {\n  readonly internalCore: InternalAthenaClientCore<ResolvedModels<TModels>>\n}\n\nfunction readFirstEnv(\n  env: Record<string, string | undefined> | undefined,\n  keys: readonly string[],\n): string | undefined {\n  for (const key of keys) {\n    const value = env?.[key]?.trim()\n    if (value) return value\n  }\n  return undefined\n}\n\nfunction normalizeOptional(value: string | null | undefined): string | undefined {\n  const normalized = value?.trim()\n  return normalized || undefined\n}\n\nfunction appendPath(baseUrl: string, path: string): string {\n  return `${baseUrl.replace(/\\/+$/, '')}/${path.replace(/^\\/+/, '')}`\n}\n\nfunction toWebSocketUrl(baseUrl: string): string {\n  const url = new URL(baseUrl)\n  url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:'\n  url.pathname = `${url.pathname.replace(/\\/+$/, '')}/wss/gateway`\n  url.search = ''\n  url.hash = ''\n  return url.toString()\n}\n\nfunction resolveCore<TModels extends AthenaClientModelsInput | undefined>(\n  config: AthenaClientConfig<TModels>,\n): AthenaClientCore<TModels> {\n  const env = config.env\n  const explicitRoot = normalizeOptional(config.url)\n  const envRoot = readFirstEnv(env, ENV_URL_KEYS)\n  const root = explicitRoot ?? envRoot\n  const explicitRootWinsOverEnvServices = explicitRoot !== undefined\n  const resolveService = (\n    explicit: string | null | undefined,\n    envKeys: readonly string[],\n    path: string,\n  ): string | undefined =>\n    normalizeOptional(explicit) ??\n    (explicitRootWinsOverEnvServices && root ? appendPath(root, path) : undefined) ??\n    readFirstEnv(env, envKeys) ??\n    (root ? appendPath(root, path) : undefined)\n\n  const dbUrl = resolveService(config.db?.url, ENV_DB_URL_KEYS, 'db')\n  const urls: ResolvedServiceUrls = {\n    db: dbUrl,\n    auth: resolveService(config.auth?.url, ENV_AUTH_URL_KEYS, 'auth'),\n    chat: resolveService(config.chat?.url, ENV_CHAT_URL_KEYS, 'chat'),\n    storage: resolveService(config.storage?.url, ENV_STORAGE_URL_KEYS, 'storage'),\n    // Billing lives on the main Athena HTTP surface (same host as gateway/db).\n    billing:\n      normalizeOptional(config.billing?.url) ??\n      dbUrl ??\n      root ??\n      undefined,\n    chatWs:\n      normalizeOptional(config.chat?.wsUrl) ??\n      (explicitRootWinsOverEnvServices && root ? toWebSocketUrl(root) : undefined) ??\n      readFirstEnv(env, ENV_CHAT_WS_URL_KEYS) ??\n      (root ? toWebSocketUrl(root) : undefined),\n  }\n\n  if (!urls.db && !urls.auth && !urls.chat && !urls.storage && !urls.billing) {\n    throw new AthenaConfigurationError(\n      'ATHENA_NO_SERVICE_CONFIGURED',\n      'Athena requires a unified URL or at least one configured service URL.',\n      'db',\n    )\n  }\n\n  const key = normalizeOptional(config.key) ?? readFirstEnv(env, ENV_KEY_KEYS)\n  if (!key) {\n    throw new AthenaConfigurationError(\n      'ATHENA_API_KEY_REQUIRED',\n      'Athena API key is required. Pass key or provide it through the explicit env object.',\n    )\n  }\n\n  const base: AthenaClientCoreBase<TModels> = {\n    config,\n    urls,\n    key,\n    client: normalizeOptional(config.client) ?? readFirstEnv(env, ENV_CLIENT_KEYS),\n  }\n  return {\n    ...base,\n    internalCore: createInternalClientCore(createInternalConfig(base)),\n  }\n}\n\nasync function resolveConfiguredContext<TModels extends AthenaClientModelsInput | undefined>(\n  core: AthenaClientCore<TModels>,\n  viewContext: AthenaRequestContext | undefined,\n): Promise<AthenaRequestContext | undefined> {\n  const configured = core.config.context\n  const base = typeof configured === 'function' ? await configured() : configured\n  return mergeAthenaRequestContexts(base, viewContext)\n}\n\nfunction createInternalConfig<TModels extends AthenaClientModelsInput | undefined>(\n  core: AthenaClientCoreBase<TModels>,\n) {\n  const { config, urls } = core\n  const { url: _authUrl, ...authOptions } = config.auth ?? {}\n  const { url: _storageUrl, directUpload, ...storageOptions } = config.storage ?? {}\n  void _authUrl\n  void _storageUrl\n\n  return {\n    baseUrl: urls.db ?? MISSING_DB_SENTINEL,\n    apiKey: core.key,\n    client: core.client,\n    backend:\n      typeof config.backend === 'string'\n        ? { type: config.backend }\n        : config.backend,\n    headers: config.headers,\n    authUrl: urls.auth,\n    chatUrl: urls.chat,\n    chatWsUrl: urls.chatWs,\n    storageUrl: urls.storage,\n    pgUri: config.db?.pgUri,\n    jdbcUrl: config.db?.jdbcUrl,\n    auth: authOptions,\n    models: config.models as ResolvedModels<TModels>,\n    behavior: {\n      retryReads: config.retryReads,\n      traceQueries: config.traceQueries,\n      debugAst: config.debugAst,\n      findManyAst: config.findManyAst,\n    },\n    storage: {\n      ...storageOptions,\n      ...(directUpload ? { directUpload } : {}),\n    },\n  }\n}\n\nfunction serviceGuard(urls: ResolvedServiceUrls, service: AthenaService): void {\n  if (!urls[service]) {\n    throw new AthenaConfigurationError(\n      'ATHENA_SERVICE_NOT_CONFIGURED',\n      `Athena ${service} is not configured.`,\n      service,\n    )\n  }\n}\n\nfunction createUnavailableNamespace(\n  service: AthenaService,\n  urls: ResolvedServiceUrls,\n  path: readonly PropertyKey[] = [],\n): unknown {\n  return new Proxy(() => undefined, {\n    get(_target, property) {\n      return createUnavailableNamespace(service, urls, [...path, property])\n    },\n    apply() {\n      serviceGuard(urls, service)\n      throw new TypeError(`Athena service property ${path.map(String).join('.')} is not callable.`)\n    },\n  })\n}\n\nfunction createClientView<TModels extends AthenaClientModelsInput | undefined>(\n  core: AthenaClientCore<TModels>,\n  viewContext?: AthenaRequestContext,\n): AthenaClient<TModels> {\n  const resolved: InternalAthenaClient<ResolvedModels<TModels>> =\n    createInternalClientView(core.internalCore, () =>\n      resolveConfiguredContext(core, viewContext),\n    )\n  const requireDb = (): void => serviceGuard(core.urls, 'db')\n\n  const { url: _billingUrl, ...billingOptions } = core.config.billing ?? {}\n  void _billingUrl\n  const billingModule: AthenaBillingModule | unknown = core.urls.billing\n    ? createBillingModule({\n        baseUrl: core.urls.billing,\n        apiKey: core.key,\n        client: core.client,\n        headers: {\n          ...(core.config.headers ?? {}),\n          ...(billingOptions.headers ?? {}),\n        },\n        ...billingOptions,\n      })\n    : createUnavailableNamespace('billing', core.urls)\n\n  const client: AthenaClient<TModels> = {\n    db: (core.urls.db ? resolved.db : createUnavailableNamespace('db', core.urls)) as AthenaClient<TModels>['db'],\n    auth: (core.urls.auth ? resolved.auth : createUnavailableNamespace('auth', core.urls)) as AthenaAuthBindings,\n    chat: (core.urls.chat ? resolved.chat : createUnavailableNamespace('chat', core.urls)) as AthenaChatModule,\n    storage: (core.urls.storage\n      ? resolved.storage\n      : createUnavailableNamespace('storage', core.urls)) as AthenaStorageModule,\n    billing: billingModule as AthenaBillingModule,\n    from: ((...args: unknown[]) => {\n      requireDb()\n      return Reflect.apply(resolved.from, resolved, args)\n    }) as AthenaClient<TModels>['from'],\n    rpc: ((...args: unknown[]) => {\n      requireDb()\n      return Reflect.apply(resolved.rpc, resolved, args)\n    }) as AthenaClient<TModels>['rpc'],\n    query<Row = unknown>(query: string, options?: AthenaGatewayCallOptions) {\n      requireDb()\n      return resolved.query<Row>(query, options)\n    },\n    request<T = unknown>(options: AthenaRequestOptions) {\n      // Absolute URLs do not need a configured service base URL.\n      if (!options.url?.trim()) {\n        serviceGuard(core.urls, options.service ?? 'db')\n      }\n      return resolved.request<T>(options)\n    },\n    verifyConnection(options?: AthenaGatewayConnectionOptions) {\n      requireDb()\n      return resolved.verifyConnection(options)\n    },\n    withContext(context: AthenaRequestContext) {\n      return createClientView(core, mergeAthenaRequestContexts(viewContext, context))\n    },\n  }\n\n  return Object.freeze(client)\n}\n\nexport function createClient<\n  const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(config: AthenaClientConfig<TModels>): AthenaClient<TModels> {\n  return createClientView(resolveCore(config))\n}\n","import { AthenaConfigurationError } from '../config/errors.ts'\nimport type { AthenaRequestContext } from '../v3-client.ts'\n\nexport interface AthenaRequestHeadersBag {\n  get(name: string): string | null\n}\n\nexport interface AthenaRequestCookiesBag {\n  getAll(): Array<{ name: string; value: string }>\n}\n\nexport type AthenaRequestHeadersInput =\n  | AthenaRequestHeadersBag\n  | Record<string, string | null | undefined>\n\nexport type AthenaRequestCookiesInput =\n  | AthenaRequestCookiesBag\n  | string\n  | null\n  | undefined\n\nexport interface AthenaServerRequestOptions {\n  requestHeaders?: AthenaRequestHeadersInput\n  requestCookies?: AthenaRequestCookiesInput\n  forceNoCache?: boolean\n  headers?: Record<string, string>\n}\n\nfunction normalizeOptional(value: string | null | undefined): string | undefined {\n  const normalized = value?.trim()\n  return normalized || undefined\n}\n\nfunction readHeader(\n  headers: AthenaRequestHeadersInput | undefined,\n  target: string,\n): string | undefined {\n  if (!headers) return undefined\n  if (typeof (headers as AthenaRequestHeadersBag).get === 'function') {\n    return normalizeOptional((headers as AthenaRequestHeadersBag).get(target))\n  }\n\n  const normalizedTarget = target.toLowerCase()\n  for (const [key, value] of Object.entries(headers)) {\n    if (key.toLowerCase() === normalizedTarget) return normalizeOptional(value ?? undefined)\n  }\n  return undefined\n}\n\nfunction serializeCookies(cookies: AthenaRequestCookiesInput): string | undefined {\n  if (typeof cookies === 'string') return normalizeOptional(cookies)\n  if (!cookies) return undefined\n  const values = cookies\n    .getAll()\n    .map(cookie => {\n      const name = normalizeOptional(cookie.name)\n      return name ? `${name}=${cookie.value}` : undefined\n    })\n    .filter((value): value is string => Boolean(value))\n  return values.length ? values.join('; ') : undefined\n}\n\nfunction resolveBearerToken(authorization: string | undefined): string | undefined {\n  const match = authorization?.match(/^Bearer\\s+(.+)$/i)\n  return normalizeOptional(match?.[1])\n}\n\nasync function loadNextHeadersModule() {\n  try {\n    return await import('next/headers')\n  } catch {\n    throw new AthenaConfigurationError(\n      'ATHENA_NEXT_SERVER_RUNTIME_REQUIRED',\n      'Athena Next server helpers require a Next.js server runtime. Call them from a Server Component or Route Handler, or pass requestHeaders/requestCookies explicitly.',\n    )\n  }\n}\n\nexport async function resolveNextRequestContext(\n  options: AthenaServerRequestOptions = {},\n): Promise<AthenaRequestContext> {\n  let requestHeaders = options.requestHeaders\n  let requestCookies = options.requestCookies\n\n  if (!requestHeaders && !requestCookies) {\n    const nextHeaders = await loadNextHeadersModule()\n    const [headersList, cookiesList] = await Promise.all([\n      nextHeaders.headers(),\n      nextHeaders.cookies(),\n    ])\n    requestHeaders = headersList\n    requestCookies = cookiesList\n  }\n\n  const cookie = serializeCookies(requestCookies) ?? readHeader(requestHeaders, 'cookie')\n  const authorization = readHeader(requestHeaders, 'authorization')\n\n  return {\n    cookie,\n    bearerToken: resolveBearerToken(authorization),\n    forceNoCache: options.forceNoCache,\n    headers: {\n      ...(options.headers ?? {}),\n      ...(cookie ? { cookie } : {}),\n      ...(authorization ? { authorization } : {}),\n    },\n  }\n}\n\nexport const resolveServerRequestContext = resolveNextRequestContext\n","/**\n * Default App Router path for the Athena Auth session cookie bridge.\n *\n * Mount as `app/api/athena-auth/session/route.ts`, or configure another path\n * such as `/api/auth/session` when using catch-all handlers.\n *\n * @see {@link createAthenaAuthSessionBridgeHandlers}\n * @see {@link createAthenaAuthSessionBridgePathHandlers}\n */\nexport const ATHENA_AUTH_SESSION_BRIDGE_ROUTE = '/api/athena-auth/session'\n\n/**\n * Primary host-app session cookie written by the bridge.\n *\n * Hyphen form (`session-token`) matches Athena Auth UI and several consumer\n * apps. Underscore form is also cleared on DELETE for cookie-helper parity.\n *\n * @see {@link ATHENA_AUTH_SESSION_COOKIE_NAMES}\n */\nexport const ATHENA_AUTH_SESSION_COOKIE_NAME = 'athena-auth.session-token'\n\n/**\n * Cookie names cleared on logout / bridge `DELETE`.\n *\n * Includes both hyphen and underscore variants so bridge clear stays aligned\n * with `@xylex-group/athena/cookies` session token lookup.\n */\nexport const ATHENA_AUTH_SESSION_COOKIE_NAMES = [\n  ATHENA_AUTH_SESSION_COOKIE_NAME,\n  'athena-auth.session_token',\n] as const\n","import { ATHENA_AUTH_SESSION_BRIDGE_ROUTE } from './constants.ts'\nimport type { AthenaAuthSessionBridgePayload } from './types.ts'\n\nconst JSON_CONTENT_TYPE = 'application/json'\n\n/**\n * `true` when a DOM `window` global is present (browser / browser-like).\n * Used to no-op client helpers during SSR.\n */\nfunction isBrowserRuntime(): boolean {\n  return typeof globalThis !== 'undefined' && 'window' in globalThis\n}\n\n/**\n * Options for browser-side bridge fetch helpers.\n */\nexport interface AthenaAuthSessionBridgeClientOptions {\n  /**\n   * Bridge route on the app host.\n   *\n   * @defaultValue {@link ATHENA_AUTH_SESSION_BRIDGE_ROUTE}\n   */\n  route?: string | undefined\n  /**\n   * Optional fetch implementation (defaults to global `fetch`).\n   * Useful in tests.\n   */\n  fetch?: typeof fetch | undefined\n}\n\n/**\n * Persist an Athena Auth session token on the app host via the bridge `POST` route.\n *\n * Sends a same-origin JSON POST with `credentials: \"same-origin\"`. No-ops when\n * `payload` is null/undefined or when not running in a browser.\n *\n * @param payload - Token (+ optional expiry) from {@link resolveSessionBridgePayload}\n * @param options - Route override and fetch implementation\n * @throws {Error} When the bridge responds with a non-OK status\n *\n * @example\n * ```ts\n * await persistAthenaAuthSessionOnAppHost({\n *   token: session.session.token,\n *   expiresAt: session.session.expiresAt,\n * })\n * ```\n */\nexport async function persistAthenaAuthSessionOnAppHost(\n  payload: AthenaAuthSessionBridgePayload | null,\n  options?: AthenaAuthSessionBridgeClientOptions,\n): Promise<void> {\n  if (!(payload && isBrowserRuntime())) {\n    return\n  }\n\n  const route = options?.route ?? ATHENA_AUTH_SESSION_BRIDGE_ROUTE\n  const fetchImpl = options?.fetch ?? fetch\n  const response = await fetchImpl(route, {\n    body: JSON.stringify(payload),\n    credentials: 'same-origin',\n    headers: {\n      'Content-Type': JSON_CONTENT_TYPE,\n    },\n    method: 'POST',\n  })\n\n  if (!response.ok) {\n    throw new Error('Failed to persist the Athena Auth session on the app host')\n  }\n}\n\n/**\n * Clear the bridged session cookie on the app host via `DELETE`.\n *\n * No-ops outside the browser. Pair with `auth.signOut()` so the app-host\n * cookie does not outlive the auth session.\n *\n * @param options - Route override and fetch implementation\n * @throws {Error} When the bridge responds with a non-OK status\n */\nexport async function clearAthenaAuthSessionOnAppHost(\n  options?: AthenaAuthSessionBridgeClientOptions,\n): Promise<void> {\n  if (!isBrowserRuntime()) {\n    return\n  }\n\n  const route = options?.route ?? ATHENA_AUTH_SESSION_BRIDGE_ROUTE\n  const fetchImpl = options?.fetch ?? fetch\n  const response = await fetchImpl(route, {\n    credentials: 'same-origin',\n    method: 'DELETE',\n  })\n\n  if (!response.ok) {\n    throw new Error('Failed to clear the Athena Auth session on the app host')\n  }\n}\n","import type {\n  AthenaAuthSessionBridgePayload,\n  AthenaAuthSessionBridgeSource,\n} from './types.ts'\n\n/**\n * Extract a bridge payload from a session response envelope.\n *\n * Preference order for the token:\n * 1. `payload.session.token`\n * 2. `payload.token`\n *\n * Returns `null` when no non-empty token string is available after trim.\n *\n * @param payload - Result of `auth.getSession()` data or a compatible object\n * @returns Payload suitable for bridge `POST`, or `null`\n *\n * @example\n * ```ts\n * const { data, ok } = await client.auth.getSession()\n * if (ok) {\n *   await persistAthenaAuthSessionOnAppHost(resolveSessionBridgePayload(data))\n * }\n * ```\n */\nexport function resolveSessionBridgePayload(\n  payload: AthenaAuthSessionBridgeSource | null | undefined,\n): AthenaAuthSessionBridgePayload | null {\n  const token = payload?.session?.token ?? payload?.token\n\n  if (typeof token !== 'string') {\n    return null\n  }\n\n  const normalizedToken = token.trim()\n  if (!normalizedToken) {\n    return null\n  }\n\n  return {\n    token: normalizedToken,\n    expiresAt:\n      typeof payload?.session?.expiresAt === 'string'\n        ? payload.session.expiresAt\n        : undefined,\n  }\n}\n","import {\n  ATHENA_AUTH_SESSION_COOKIE_NAME,\n  ATHENA_AUTH_SESSION_COOKIE_NAMES,\n} from './constants.ts'\nimport type { AthenaAuthSessionBridgeOptions } from './types.ts'\n\n/** Cookie expiry used when clearing (expire immediately). */\nconst EXPIRED_AT = new Date(0)\n\n/**\n * Detect whether the request should be treated as HTTPS for the `Secure` flag.\n *\n * Prefers the first value of `x-forwarded-proto` (common behind proxies /\n * Cloudflare / Vercel), then falls back to `request.url` protocol.\n *\n * @param request - Incoming Web Fetch request\n * @returns `true` when cookies should include `Secure`\n */\nexport function resolveRequestIsSecure(request: Request): boolean {\n  const forwardedProto = request.headers.get('x-forwarded-proto')?.trim()\n  if (forwardedProto) {\n    const first = forwardedProto.split(',')[0]?.trim().toLowerCase()\n    if (first === 'https') return true\n    if (first === 'http') return false\n  }\n  return new URL(request.url).protocol === 'https:'\n}\n\n/**\n * Parse an optional ISO-8601 `expiresAt` string into a `Date`.\n *\n * @param value - Unknown JSON field (usually a string)\n * @returns Valid `Date`, or `undefined` when missing / invalid\n */\nexport function resolveSessionCookieExpiresAt(value: unknown): Date | undefined {\n  if (typeof value !== 'string') {\n    return undefined\n  }\n  const expiresAt = new Date(value)\n  return Number.isNaN(expiresAt.getTime()) ? undefined : expiresAt\n}\n\n/**\n * Serialize a single `Set-Cookie` header value.\n *\n * @internal\n */\nfunction serializeCookie(\n  name: string,\n  value: string,\n  options: {\n    path: string\n    sameSite: 'lax' | 'strict' | 'none'\n    secure: boolean\n    httpOnly: boolean\n    expires?: Date | undefined\n  },\n): string {\n  const parts = [\n    `${encodeURIComponent(name)}=${encodeURIComponent(value)}`,\n    `Path=${options.path}`,\n    'HttpOnly',\n    `SameSite=${options.sameSite === 'none' ? 'None' : options.sameSite === 'strict' ? 'Strict' : 'Lax'}`,\n  ]\n  if (options.secure) {\n    parts.push('Secure')\n  }\n  if (options.expires) {\n    parts.push(`Expires=${options.expires.toUTCString()}`)\n  }\n  return parts.join('; ')\n}\n\n/**\n * Resolve cookie name / path / SameSite defaults from bridge options.\n *\n * @param options - Optional bridge configuration\n */\nexport function resolveBridgeCookieConfig(options?: AthenaAuthSessionBridgeOptions) {\n  return {\n    cookieName: options?.cookieName ?? ATHENA_AUTH_SESSION_COOKIE_NAME,\n    cookieNames: options?.cookieNames ?? ATHENA_AUTH_SESSION_COOKIE_NAMES,\n    cookiePath: options?.cookiePath ?? '/',\n    sameSite: options?.sameSite ?? 'lax',\n  } as const\n}\n\n/**\n * Append a `Set-Cookie` header for the bridged session token.\n *\n * @param headers - Response headers (mutated)\n * @param request - Used for Secure detection when `options.secure` is omitted\n * @param token - Session token value (may be empty when clearing a single name)\n * @param expiresAt - Optional cookie expiry\n * @param options - Bridge cookie options\n */\nexport function appendSessionCookie(\n  headers: Headers,\n  request: Request,\n  token: string,\n  expiresAt: Date | undefined,\n  options?: AthenaAuthSessionBridgeOptions,\n): void {\n  const config = resolveBridgeCookieConfig(options)\n  const secure = options?.secure ?? resolveRequestIsSecure(request)\n  headers.append(\n    'set-cookie',\n    serializeCookie(config.cookieName, token, {\n      path: config.cookiePath,\n      sameSite: config.sameSite,\n      secure,\n      httpOnly: true,\n      expires: expiresAt,\n    }),\n  )\n}\n\n/**\n * Expire all known Athena Auth session cookie name variants.\n *\n * Always includes both the primary `cookieName` and every entry in\n * `cookieNames` so leftover underscore/hyphen aliases are removed.\n *\n * @param headers - Response headers (mutated)\n * @param request - Used for Secure detection\n * @param options - Bridge cookie options\n */\nexport function appendClearSessionCookies(\n  headers: Headers,\n  request: Request,\n  options?: AthenaAuthSessionBridgeOptions,\n): void {\n  const config = resolveBridgeCookieConfig(options)\n  const secure = options?.secure ?? resolveRequestIsSecure(request)\n  const names = new Set<string>([config.cookieName, ...config.cookieNames])\n  for (const name of names) {\n    headers.append(\n      'set-cookie',\n      serializeCookie(name, '', {\n        path: config.cookiePath,\n        sameSite: config.sameSite,\n        secure,\n        httpOnly: true,\n        expires: EXPIRED_AT,\n      }),\n    )\n  }\n}\n","import { ATHENA_AUTH_SESSION_BRIDGE_ROUTE } from './constants.ts'\nimport {\n  appendClearSessionCookies,\n  appendSessionCookie,\n  resolveSessionCookieExpiresAt,\n} from './cookie.ts'\nimport type {\n  AthenaAuthSessionBridgeOptions,\n  AthenaAuthSessionBridgePathOptions,\n} from './types.ts'\n\n/** JSON body accepted by the bridge POST handler. */\ninterface SessionBridgeRequestBody {\n  expiresAt?: unknown\n  token?: unknown\n}\n\n/**\n * Build a JSON `Response` with optional extra headers (e.g. Set-Cookie).\n *\n * @internal\n */\nfunction json(\n  body: unknown,\n  init?: {\n    status?: number\n    headers?: Headers\n  },\n): Response {\n  const headers = init?.headers ?? new Headers()\n  if (!headers.has('content-type')) {\n    headers.set('content-type', 'application/json; charset=utf-8')\n  }\n  return new Response(JSON.stringify(body), {\n    status: init?.status ?? 200,\n    headers,\n  })\n}\n\nfunction resolveRoute(options?: AthenaAuthSessionBridgeOptions): string {\n  return options?.route ?? ATHENA_AUTH_SESSION_BRIDGE_ROUTE\n}\n\n/**\n * Handle bridge `POST` — set an httpOnly session cookie from JSON body.\n *\n * Expected body: `{ \"token\": string, \"expiresAt\"?: string }`.\n *\n * @param request - Incoming request (JSON body)\n * @param options - Cookie / route configuration\n * @returns `200` on success, `400` when token is missing\n */\nexport async function handleAthenaAuthSessionBridgePost(\n  request: Request,\n  options?: AthenaAuthSessionBridgeOptions,\n): Promise<Response> {\n  const payload = (await request\n    .json()\n    .catch(() => null)) as SessionBridgeRequestBody | null\n  const token = typeof payload?.token === 'string' ? payload.token.trim() : ''\n\n  if (!token) {\n    return json(\n      {\n        error: 'Missing Athena Auth session token',\n      },\n      { status: 400 },\n    )\n  }\n\n  const headers = new Headers()\n  appendSessionCookie(\n    headers,\n    request,\n    token,\n    resolveSessionCookieExpiresAt(payload?.expiresAt),\n    options,\n  )\n\n  return json(\n    {\n      ok: true,\n      route: resolveRoute(options),\n    },\n    { headers },\n  )\n}\n\n/**\n * Handle bridge `DELETE` — clear bridged session cookie name variants.\n *\n * @param request - Incoming request (used for Secure detection)\n * @param options - Cookie / route configuration\n * @returns `200` with clear `Set-Cookie` headers\n */\nexport function handleAthenaAuthSessionBridgeDelete(\n  request: Request,\n  options?: AthenaAuthSessionBridgeOptions,\n): Response {\n  const headers = new Headers()\n  appendClearSessionCookies(headers, request, options)\n\n  return json(\n    {\n      ok: true,\n      route: resolveRoute(options),\n    },\n    { headers },\n  )\n}\n\n/**\n * Create dedicated App Router handlers for the session bridge.\n *\n * Drop into a route file with no additional wiring:\n *\n * @example\n * ```ts\n * // app/api/athena-auth/session/route.ts\n * import { createAthenaAuthSessionBridgeHandlers } from '@xylex-group/athena/next/server'\n *\n * export const { POST, DELETE } = createAthenaAuthSessionBridgeHandlers()\n * ```\n *\n * @param options - Optional cookie name, path, SameSite, Secure overrides\n * @returns Object with `POST` and `DELETE` route handlers\n */\nexport function createAthenaAuthSessionBridgeHandlers(\n  options?: AthenaAuthSessionBridgeOptions,\n) {\n  return {\n    POST: (request: Request) => handleAthenaAuthSessionBridgePost(request, options),\n    DELETE: (request: Request) =>\n      handleAthenaAuthSessionBridgeDelete(request, options),\n  }\n}\n\n/**\n * Normalize trailing slashes for path comparison.\n *\n * @internal\n */\nfunction normalizePathname(pathname: string): string {\n  if (pathname.length > 1 && pathname.endsWith('/')) {\n    return pathname.slice(0, -1)\n  }\n  return pathname || '/'\n}\n\n/**\n * Whether this request should be handled as a session bridge call.\n *\n * Returns true when:\n * - the pathname equals the configured `route`, or\n * - the final path segment is listed in `matchPaths` (default `session`)\n *\n * @param request - Incoming request\n * @param options - Route + matchPaths configuration\n */\nexport function isAthenaAuthSessionBridgePath(\n  request: Request,\n  options?: AthenaAuthSessionBridgePathOptions,\n): boolean {\n  const pathname = normalizePathname(new URL(request.url).pathname)\n  const route = normalizePathname(resolveRoute(options))\n  if (pathname === route) {\n    return true\n  }\n\n  const matchPaths = options?.matchPaths ?? ['session']\n  const segments = pathname.split('/').filter(Boolean)\n  const tail = segments[segments.length - 1]\n  return typeof tail === 'string' && matchPaths.includes(tail)\n}\n\n/**\n * Create catch-all / `[path]` handlers that only service session-bridge paths.\n *\n * Non-matching paths return `404` with `{ error: 'Not found' }` so you can\n * mount under `/api/auth/[...path]` without implementing a full auth proxy.\n *\n * @example\n * ```ts\n * // app/api/auth/[...path]/route.ts\n * import { createAthenaAuthSessionBridgePathHandlers } from '@xylex-group/athena/next/server'\n *\n * export const { POST, DELETE } = createAthenaAuthSessionBridgePathHandlers({\n *   route: '/api/auth/session',\n * })\n * ```\n *\n * @param options - Bridge options plus `matchPaths`\n * @returns Object with `POST` and `DELETE` route handlers\n */\nexport function createAthenaAuthSessionBridgePathHandlers(\n  options?: AthenaAuthSessionBridgePathOptions,\n) {\n  const notFound = () =>\n    json(\n      {\n        error: 'Not found',\n      },\n      { status: 404 },\n    )\n\n  return {\n    POST: async (request: Request) => {\n      if (!isAthenaAuthSessionBridgePath(request, options)) {\n        return notFound()\n      }\n      return handleAthenaAuthSessionBridgePost(request, options)\n    },\n    DELETE: (request: Request) => {\n      if (!isAthenaAuthSessionBridgePath(request, options)) {\n        return notFound()\n      }\n      return handleAthenaAuthSessionBridgeDelete(request, options)\n    },\n  }\n}\n","/**\n * Resolve Athena Auth base / upstream URLs from env or explicit config.\n *\n * Mirrors the Athena Auth UI base-url contract so apps and the SDK share one\n * precedence order for `ATHENA_AUTH_*` environment variables.\n */\n\n/** Default browser/proxy path for same-origin auth routing. */\nexport const ATHENA_AUTH_PATH = '/api/auth'\n\n/** Fallback origin when no absolute upstream is configured (server-side). */\nexport const LOCAL_DEV_ORIGIN = 'http://localhost:3000'\n\n/**\n * Hosted Athena Auth origin used when no upstream override is supplied.\n * Origin only — no `/api/auth` suffix.\n */\nexport const DEFAULT_ATHENA_AUTH_ORIGIN = 'https://auth.athena-auth.com'\n\n/**\n * @deprecated Prefer {@link DEFAULT_ATHENA_AUTH_ORIGIN}.\n * Kept for callers that used the older name.\n */\nexport const DEFAULT_ATHENA_AUTH_UPSTREAM_URL = DEFAULT_ATHENA_AUTH_ORIGIN\n\n/**\n * Environment keys checked (in order) for the Athena Auth upstream URL.\n *\n * Prefer server-only keys first so private upstream hosts are not forced to\n * rely on `NEXT_PUBLIC_*` values.\n */\nexport const ATHENA_AUTH_UPSTREAM_ENV_KEYS = [\n  'ATHENA_AUTH_UPSTREAM_URL',\n  'ATHENA_AUTH_URL',\n  'NEXT_PUBLIC_ATHENA_AUTH_UPSTREAM_URL',\n  'NEXT_PUBLIC_ATHENA_AUTH_URL',\n] as const\n\n/**\n * Auth UI naming parity (`base-url.ts`).\n * Same ordered list as {@link ATHENA_AUTH_UPSTREAM_ENV_KEYS}.\n */\nexport const ATHENA_AUTH_UPSTREAM_URL_ENV_NAMES = ATHENA_AUTH_UPSTREAM_ENV_KEYS\n\nexport type AthenaAuthUpstreamEnvKey =\n  (typeof ATHENA_AUTH_UPSTREAM_ENV_KEYS)[number]\n\n/** Loose env map (Node `process.env` or a test fixture). */\nexport type EnvLike = Record<string, string | undefined>\n\nexport type AthenaAuthUpstreamEnv = Partial<\n  Record<AthenaAuthUpstreamEnvKey, string | undefined>\n> &\n  EnvLike\n\nexport interface AthenaAuthClientBaseUrlOptions {\n  /**\n   * When `true` (default), ensure the client base ends with `/api/auth`.\n   * Set `false` when the auth server is mounted at a custom path or root.\n   */\n  appendAuthPath?: boolean\n}\n\nconst LEADING_SLASHES_REGEX = /^\\/+/\n\nfunction stripTrailingSlashes(value: string): string {\n  return value.replace(/\\/+$/g, '')\n}\n\nfunction ensureLeadingSlash(value: string): string {\n  return value.startsWith('/') ? value : `/${value}`\n}\n\nfunction ensureAthenaAuthPath(pathname: string): string {\n  const normalizedPath = stripTrailingSlashes(\n    ensureLeadingSlash(pathname.trim()),\n  )\n\n  if (!normalizedPath || normalizedPath === '/') {\n    return ATHENA_AUTH_PATH\n  }\n\n  if (normalizedPath.endsWith(ATHENA_AUTH_PATH)) {\n    return normalizedPath\n  }\n\n  return `${normalizedPath}${ATHENA_AUTH_PATH}`\n}\n\nfunction stripAthenaAuthPath(pathname: string): string {\n  const normalizedPath = stripTrailingSlashes(\n    ensureLeadingSlash(pathname.trim()),\n  )\n\n  if (!normalizedPath || normalizedPath === '/') {\n    return '/'\n  }\n\n  if (normalizedPath === ATHENA_AUTH_PATH) {\n    return '/'\n  }\n\n  if (normalizedPath.endsWith(ATHENA_AUTH_PATH)) {\n    const withoutAuthPath = normalizedPath.slice(0, -ATHENA_AUTH_PATH.length)\n    return withoutAuthPath ? ensureLeadingSlash(withoutAuthPath) : '/'\n  }\n\n  return normalizedPath\n}\n\nfunction readProcessEnv(): EnvLike | undefined {\n  try {\n    const maybeProcess = (\n      globalThis as { process?: { env?: EnvLike } }\n    ).process\n    return maybeProcess?.env\n  } catch {\n    return undefined\n  }\n}\n\nfunction getBrowserOrigin(): string | undefined {\n  try {\n    const origin = (\n      globalThis as { window?: { location?: { origin?: string } } }\n    ).window?.location?.origin\n    return typeof origin === 'string' && origin.length > 0 ? origin : undefined\n  } catch {\n    return undefined\n  }\n}\n\n/**\n * Returns `true` when the value is an absolute `http://` or `https://` URL.\n */\nexport function isAbsoluteUrl(value: string): boolean {\n  const trimmed = value.trim()\n  return trimmed.startsWith('http://') || trimmed.startsWith('https://')\n}\n\n/**\n * Read the first non-empty Athena Auth upstream URL from an env-like map.\n *\n * @returns Trimmed URL string, or `undefined` when none of the keys are set\n */\nexport function readAthenaAuthUpstreamUrlFromEnv(\n  env: EnvLike,\n): string | undefined {\n  for (const key of ATHENA_AUTH_UPSTREAM_ENV_KEYS) {\n    const value = env[key]?.trim()\n    if (value) {\n      return value\n    }\n  }\n  return undefined\n}\n\nfunction resolveConfiguredAthenaAuthUpstreamUrl(\n  rawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n): string | undefined {\n  if (typeof rawUpstreamUrl === 'string') {\n    const trimmed = rawUpstreamUrl.trim()\n    return trimmed || undefined\n  }\n\n  if (rawUpstreamUrl) {\n    return readAthenaAuthUpstreamUrlFromEnv(rawUpstreamUrl)\n  }\n\n  const processEnv = readProcessEnv()\n  return processEnv ? readAthenaAuthUpstreamUrlFromEnv(processEnv) : undefined\n}\n\n/**\n * Normalize a consumer-supplied auth base URL so it targets `/api/auth`\n * (unless the path already ends with that segment).\n *\n * Absolute URLs keep origin and rewrite pathname; relative paths are ensured\n * to end with `/api/auth`.\n *\n * @example\n * ```ts\n * normalizeAthenaAuthBaseUrl('https://auth.example.com')\n * // => 'https://auth.example.com/api/auth'\n *\n * normalizeAthenaAuthBaseUrl('/api/auth')\n * // => '/api/auth'\n * ```\n */\nexport function normalizeAthenaAuthBaseUrl(urlOrPath: string): string {\n  const trimmed = urlOrPath.trim()\n\n  if (!trimmed) {\n    return ATHENA_AUTH_PATH\n  }\n\n  if (isAbsoluteUrl(trimmed)) {\n    const url = new URL(trimmed)\n    url.pathname = ensureAthenaAuthPath(url.pathname)\n    url.search = ''\n    url.hash = ''\n    return stripTrailingSlashes(url.toString())\n  }\n\n  return ensureAthenaAuthPath(trimmed)\n}\n\n/**\n * Resolve the **server-side** Athena Auth upstream origin (no `/api/auth` suffix).\n *\n * Used when proxying or calling the auth host directly from Node / edge.\n *\n * @param rawUpstreamUrl - Explicit URL, env map, or omit to read `process.env`\n * @returns Origin like `https://auth.example.com` (no trailing slash)\n */\nexport function resolveAthenaAuthUpstreamUrl(\n  rawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n): string {\n  const configuredUpstream =\n    resolveConfiguredAthenaAuthUpstreamUrl(rawUpstreamUrl) ||\n    DEFAULT_ATHENA_AUTH_ORIGIN\n\n  if (isAbsoluteUrl(configuredUpstream)) {\n    const upstreamUrl = new URL(configuredUpstream)\n    upstreamUrl.pathname = stripAthenaAuthPath(upstreamUrl.pathname)\n    upstreamUrl.search = ''\n    upstreamUrl.hash = ''\n    return stripTrailingSlashes(upstreamUrl.toString())\n  }\n\n  const normalizedPath = stripAthenaAuthPath(configuredUpstream)\n  return stripTrailingSlashes(\n    new URL(normalizedPath, LOCAL_DEV_ORIGIN).toString(),\n  )\n}\n\nfunction resolveBrowserFacingOrigin(\n  rawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n): string {\n  if (resolveConfiguredAthenaAuthUpstreamUrl(rawUpstreamUrl)) {\n    return `${resolveAthenaAuthUpstreamUrl(rawUpstreamUrl)}/`\n  }\n\n  const browserOrigin = getBrowserOrigin()\n  if (browserOrigin) {\n    return `${browserOrigin}/`\n  }\n\n  return `${LOCAL_DEV_ORIGIN}/`\n}\n\nfunction resolvePreservedAthenaAuthBaseUrl(\n  configuredAuthBaseUrl: string,\n  rawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n): string {\n  const trimmed = configuredAuthBaseUrl.trim()\n  const preservedConfiguredBaseUrl = trimmed || ATHENA_AUTH_PATH\n\n  if (isAbsoluteUrl(preservedConfiguredBaseUrl)) {\n    return stripTrailingSlashes(preservedConfiguredBaseUrl)\n  }\n\n  return stripTrailingSlashes(\n    new URL(\n      ensureLeadingSlash(preservedConfiguredBaseUrl),\n      resolveBrowserFacingOrigin(rawUpstreamUrl),\n    ).toString(),\n  )\n}\n\n/**\n * Resolve the **browser-facing** auth client base URL.\n *\n * Default behavior appends `/api/auth` for same-origin proxying. Pass\n * `{ appendAuthPath: false }` to keep a custom path or root mount.\n *\n * Overloads match common call styles from Athena Auth UI and app code:\n * - `resolveAthenaAuthClientBaseUrl(\"https://auth.example.com\")`\n * - `resolveAthenaAuthClientBaseUrl(process.env)`\n * - `resolveAthenaAuthClientBaseUrl(undefined)` → env + defaults\n * - `resolveAthenaAuthClientBaseUrl(path, upstream, { appendAuthPath: false })`\n */\nexport function resolveAthenaAuthClientBaseUrl(\n  configuredAuthBaseUrl?: string | EnvLike,\n  rawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n  options?: AthenaAuthClientBaseUrlOptions,\n): string\nexport function resolveAthenaAuthClientBaseUrl(\n  configuredAuthBaseUrl: string,\n  rawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n  options?: AthenaAuthClientBaseUrlOptions,\n): string\nexport function resolveAthenaAuthClientBaseUrl(\n  configuredAuthBaseUrl?: string | EnvLike,\n  rawUpstreamUrl?: string | AthenaAuthUpstreamEnv,\n  options: AthenaAuthClientBaseUrlOptions = {},\n): string {\n  let baseInput: string\n\n  if (typeof configuredAuthBaseUrl === 'string') {\n    baseInput = configuredAuthBaseUrl\n  } else if (configuredAuthBaseUrl) {\n    baseInput =\n      readAthenaAuthUpstreamUrlFromEnv(configuredAuthBaseUrl) ??\n      ATHENA_AUTH_PATH\n  } else {\n    const fromEnv = resolveConfiguredAthenaAuthUpstreamUrl(rawUpstreamUrl)\n    baseInput = fromEnv ?? ATHENA_AUTH_PATH\n  }\n\n  if (options.appendAuthPath === false) {\n    return resolvePreservedAthenaAuthBaseUrl(baseInput, rawUpstreamUrl)\n  }\n\n  const normalizedConfiguredBaseUrl = normalizeAthenaAuthBaseUrl(baseInput)\n\n  if (isAbsoluteUrl(normalizedConfiguredBaseUrl)) {\n    return normalizedConfiguredBaseUrl\n  }\n\n  const browserOrigin = getBrowserOrigin()\n  if (browserOrigin) {\n    return stripTrailingSlashes(\n      new URL(normalizedConfiguredBaseUrl, browserOrigin).toString(),\n    )\n  }\n\n  if (resolveConfiguredAthenaAuthUpstreamUrl(rawUpstreamUrl)) {\n    // Direct upstream without proxy path: origin only (no /api/auth) when\n    // the configured base was relative — server-side absolute upstream.\n    const upstream = resolveAthenaAuthUpstreamUrl(rawUpstreamUrl)\n    return stripTrailingSlashes(\n      new URL(ATHENA_AUTH_PATH, `${upstream}/`).toString(),\n    )\n  }\n\n  return stripTrailingSlashes(\n    new URL(normalizedConfiguredBaseUrl, LOCAL_DEV_ORIGIN).toString(),\n  )\n}\n\n/**\n * Build an absolute Athena Auth request URL for a path under the client base.\n *\n * Resolves at **call time** (reads env when `rawBaseUrl` is omitted) so module\n * load order does not freeze a stale URL.\n *\n * @param path - Path relative to the auth base (leading slashes stripped)\n * @param rawBaseUrl - Optional base string or env map\n *\n * @example\n * ```ts\n * resolveAthenaAuthRequestUrl('get-session', 'https://auth.example.com')\n * // => 'https://auth.example.com/api/auth/get-session'\n * ```\n */\nexport function resolveAthenaAuthRequestUrl(\n  path: string,\n  rawBaseUrl?: string | EnvLike,\n): string {\n  const normalizedPath = path.replace(LEADING_SLASHES_REGEX, '')\n  const base = resolveAthenaAuthClientBaseUrl(rawBaseUrl)\n  return new URL(normalizedPath, `${base}/`).toString()\n}\n\n/** Relative auth path for email verification (`GET /verify-email`). */\nexport const ATHENA_AUTH_VERIFY_EMAIL_PATH = 'verify-email'\n\n/**\n * Relative segment for session lookup (`GET /get-session`).\n * Prefer with {@link resolveAthenaAuthRequestUrl} when `base` already ends in `/api/auth`.\n */\nexport const ATHENA_AUTH_GET_SESSION_PATH = 'get-session'\n\n/**\n * Absolute app/proxy path for session lookup.\n * Use with `new URL(ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH, appOrigin)` when\n * `baseUrl` is the **app origin** (e.g. `https://app.example.com`), not the auth client base.\n */\nexport const ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH = `${ATHENA_AUTH_PATH}/get-session`\n\n/**\n * @deprecated Alias of {@link ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH} for drop-in\n * replacement of app-local `AUTH_SESSION_PATH` constants. Prefer the `ATHENA_` name.\n */\nexport const AUTH_SESSION_PATH = ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH\n\n/**\n * Query param that forces Athena Auth / Better Auth style session handlers to\n * skip cookie cache and re-read the live session cookie.\n */\nexport const ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM = 'disableCookieCache'\n\n/**\n * @deprecated Alias of {@link ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM}.\n */\nexport const DISABLE_COOKIE_CACHE_QUERY_PARAM =\n  ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM\n\n/** Value paired with {@link ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM}. */\nexport const ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE = 'true'\n\n/**\n * @deprecated Alias of {@link ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE}.\n */\nexport const DISABLE_COOKIE_CACHE_QUERY_VALUE =\n  ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE\n\n/**\n * Optional request/response header some apps use to pass serialized session\n * payload between edge middleware and the app (not set by the SDK itself).\n */\nexport const ATHENA_SESSION_DATA_HEADER = 'x-session-data'\n\n/**\n * @deprecated Alias of {@link ATHENA_SESSION_DATA_HEADER}.\n */\nexport const SESSION_DATA_HEADER = ATHENA_SESSION_DATA_HEADER\n\n/**\n * Absolute callback URL for email verification.\n *\n * Equivalent to `resolveAthenaAuthRequestUrl(\"verify-email\")` — use this in\n * sign-up / send-verification payloads as `callbackURL` instead of a local\n * wrapper around Auth UI `base-url` helpers.\n *\n * @param rawBaseUrl - Optional base string or env map (defaults to process env)\n * @returns e.g. `https://auth.example.com/api/auth/verify-email`\n *\n * @example\n * ```ts\n * import { resolveEmailVerificationCallbackUrl } from \"@xylex-group/athena/utils\"\n *\n * await client.auth.signUp.email({\n *   email,\n *   password,\n *   name,\n *   callbackURL: resolveEmailVerificationCallbackUrl(),\n * })\n * ```\n */\nexport function resolveEmailVerificationCallbackUrl(\n  rawBaseUrl?: string | EnvLike,\n): string {\n  return resolveAthenaAuthRequestUrl(ATHENA_AUTH_VERIFY_EMAIL_PATH, rawBaseUrl)\n}\n\n/**\n * Build a same-origin (or absolute) **fresh** get-session URL.\n *\n * Appends `disableCookieCache=true` so middleware / RSC session probes do not\n * reuse a stale cookie-cache entry.\n *\n * @param baseUrl - App origin (`https://app.example.com`) or any base accepted by\n *   the `URL` constructor. Resolves {@link ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH}\n *   (`/api/auth/get-session`) against that base.\n * @returns URL such as `https://app.example.com/api/auth/get-session?disableCookieCache=true`\n *\n * @example\n * ```ts\n * import { createFreshSessionLookupUrl } from \"@xylex-group/athena/utils\"\n *\n * const url = createFreshSessionLookupUrl(\"https://app.example.com\")\n * await fetch(url, { headers: { cookie: requestHeaders.get(\"cookie\") ?? \"\" } })\n * ```\n *\n * For auth-client base URLs that already include `/api/auth`, prefer:\n * `resolveAthenaAuthRequestUrl(\"get-session\", authBase) + \"?disableCookieCache=true\"`\n * or pass the **app** origin into this helper when you proxy `/api/auth/*` locally.\n */\nexport function createFreshSessionLookupUrl(baseUrl: string | URL): URL {\n  const url = new URL(ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH, baseUrl)\n  url.searchParams.set(\n    ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM,\n    ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE,\n  )\n  return url\n}\n","/**\n * Shared Athena Auth UI route segments, views, and redirect helpers.\n *\n * Aligned with `@xylex-group/athena-auth-ui` / Auth UI `routes.ts` so apps can\n * import from `@xylex-group/athena/utils` instead of copying route maps.\n */\n\n/**\n * Canonical auth screen ids used by UI routing and middleware.\n *\n * Note: the canonical forgot-password view id is `forgot-password`. The URL\n * segment `forget-password` is accepted as a legacy alias and maps to that view.\n */\nexport type AuthView =\n  | 'sign-in'\n  | 'sign-up'\n  | 'forgot-password'\n  | 'reset-password'\n  | 'reset-email-sent'\n  | 'check-email'\n  | 'accept-invitation'\n  | 'logout'\n\n/** Default view when no path segment is present. */\nexport const AUTH_DEFAULT_VIEW = 'sign-in' satisfies AuthView\n\n/** Optional two-factor path segment used by some app routers. */\nexport const AUTH_TWO_FACTOR_SEGMENT = 'two-factor'\n\n/**\n * Map of URL path segments → {@link AuthView}.\n *\n * Includes `forget-password` as a legacy alias for `forgot-password`.\n */\nexport const AUTH_VIEW_BY_SEGMENT: Readonly<Record<string, AuthView>> = {\n  'accept-invitation': 'accept-invitation',\n  'check-email': 'check-email',\n  'forget-password': 'forgot-password',\n  'forgot-password': 'forgot-password',\n  logout: 'logout',\n  'reset-email-sent': 'reset-email-sent',\n  'reset-password': 'reset-password',\n  'sign-in': 'sign-in',\n  'sign-up': 'sign-up',\n} as const\n\n/**\n * Views that should bounce **authenticated** users away (e.g. to app home).\n * Reset/check-email/logout stay reachable while signed in.\n */\nexport const AUTHENTICATED_REDIRECT_VIEW_SET = new Set<AuthView>([\n  'sign-in',\n  'sign-up',\n  'forgot-password',\n])\n\n/**\n * Resolve an auth UI view from a single path segment.\n *\n * @param segment - e.g. `\"sign-in\"` from `/auth/[segment]`; `undefined` → default\n * @returns Canonical {@link AuthView}, or `null` when the segment is unknown\n *\n * @example\n * ```ts\n * resolveAuthViewFromSegment(undefined) // \"sign-in\"\n * resolveAuthViewFromSegment(\"forget-password\") // \"forgot-password\"\n * resolveAuthViewFromSegment(\"unknown\") // null\n * ```\n */\nexport function resolveAuthViewFromSegment(\n  segment: string | undefined,\n): AuthView | null {\n  if (!segment) {\n    return AUTH_DEFAULT_VIEW\n  }\n  return AUTH_VIEW_BY_SEGMENT[segment] ?? null\n}\n\n/**\n * Whether an authenticated user should be redirected away from this auth view.\n *\n * @param view - Resolved auth view\n */\nexport function shouldRedirectAuthenticatedAuthView(view: AuthView): boolean {\n  return AUTHENTICATED_REDIRECT_VIEW_SET.has(view)\n}\n\n/**\n * Default page routes under `/auth/*` for Next.js (or similar) apps.\n */\nexport const AUTH_ROUTES = {\n  acceptInvitation: '/auth/accept-invitation',\n  appHome: '/',\n  checkEmail: '/auth/check-email',\n  forgotPassword: '/auth/forgot-password',\n  logout: '/auth/logout',\n  resetEmailSent: '/auth/reset-email-sent',\n  resetPassword: '/auth/reset-password',\n  signIn: '/auth/sign-in',\n  signUp: '/auth/sign-up',\n  socialCallback: '/auth/social-callback',\n} as const\n\nexport type AuthRoutes = Record<keyof typeof AUTH_ROUTES, string>\n\n/**\n * Build an auth route map with optional path overrides.\n */\nexport function createAuthRoutes(\n  overrides: Partial<AuthRoutes> = {},\n): AuthRoutes {\n  return {\n    ...AUTH_ROUTES,\n    ...overrides,\n  }\n}\n\n/**\n * Query/mode → path redirects used by legacy `?mode=` style entrypoints.\n */\nexport interface AuthModeRedirects {\n  readonly 'forgot-password': string\n  readonly login: string\n  readonly logout: string\n  readonly 'reset-password': string\n  readonly signup: string\n}\n\nexport function createAuthModeRedirects(\n  routes: AuthRoutes = AUTH_ROUTES,\n): AuthModeRedirects {\n  return {\n    'forgot-password': routes.forgotPassword,\n    login: routes.signIn,\n    logout: routes.logout,\n    'reset-password': routes.resetPassword,\n    signup: routes.signUp,\n  }\n}\n\nexport const AUTH_MODE_REDIRECTS = createAuthModeRedirects()\n\nexport type AuthMode = keyof AuthModeRedirects\n\nexport const AUTH_MODE_SET = new Set<string>(Object.keys(AUTH_MODE_REDIRECTS))\n\nexport const AUTHENTICATED_REDIRECT_MODE_SET = new Set<AuthMode>([\n  'login',\n  'signup',\n  'forgot-password',\n])\n\n/**\n * Type guard for legacy auth `mode` query values (`login`, `signup`, …).\n */\nexport function isAuthMode(value: string): value is AuthMode {\n  return AUTH_MODE_SET.has(value)\n}\n\n/**\n * Whether an authenticated user should be redirected away from this auth mode.\n */\nexport function shouldRedirectAuthenticatedAuthMode(mode: AuthMode): boolean {\n  return AUTHENTICATED_REDIRECT_MODE_SET.has(mode)\n}\n\n/**\n * Resolve a path for a legacy auth mode string.\n *\n * @returns Path from {@link AUTH_MODE_REDIRECTS}, or `null` if unknown\n */\nexport function resolveAuthModeRedirect(\n  mode: string | undefined,\n  redirects: AuthModeRedirects = AUTH_MODE_REDIRECTS,\n): string | null {\n  if (!mode || !isAuthMode(mode)) {\n    return null\n  }\n  return redirects[mode]\n}\n","const LOCAL_IPV4_PATTERN = /^127(?:\\.\\d{1,3}){3}$/\n\nexport function isLocalHostname(hostname: string): boolean {\n  const normalized = hostname.trim().replace(/\\.$/, '').toLowerCase()\n  if (!normalized) {\n    return false\n  }\n\n  if (normalized === 'localhost' || normalized.endsWith('.localhost')) {\n    return true\n  }\n\n  if (\n    normalized === '127.0.0.1' ||\n    LOCAL_IPV4_PATTERN.test(normalized) ||\n    normalized === '::1' ||\n    normalized === '[::1]' ||\n    normalized === '0:0:0:0:0:0:0:1'\n  ) {\n    return true\n  }\n\n  return false\n}\n","import { isLocalHostname } from './hostname.ts'\n\n/**\n * Cookie name prefixes treated as Athena Auth / Better Auth session material.\n *\n * Used by {@link clearAuthCookies} when matching `document.cookie` names\n * (including `__Secure-` prefixed variants).\n *\n * | Prefix | Typical cookies |\n * |--------|-----------------|\n * | `athena-auth` | `athena-auth.session_token`, `athena-auth.session-token`, chunked `session_data.*` |\n * | `__Secure-athena-auth` | HTTPS-prefixed Athena cookies |\n * | `better-auth` | Legacy Better Auth session cookies |\n * | `__Secure-better-auth` | HTTPS-prefixed Better Auth cookies |\n *\n * @see {@link clearAuthCookies}\n * @see docs/auth-cookies.md\n */\nexport const ATHENA_AUTH_COOKIE_PREFIXES = [\n  'athena-auth',\n  '__Secure-athena-auth',\n  'better-auth',\n  '__Secure-better-auth',\n] as const\n\n/** @deprecated Prefer {@link ATHENA_AUTH_COOKIE_PREFIXES}. */\nexport const DEFAULT_AUTH_COOKIE_PREFIXES = ATHENA_AUTH_COOKIE_PREFIXES\n\nexport interface ClearAuthCookiesOptions {\n  /**\n   * Name prefixes to clear. Defaults to {@link ATHENA_AUTH_COOKIE_PREFIXES}.\n   */\n  prefixes?: string[]\n  /**\n   * Hostname used to build domain candidates (host + parent domains).\n   * Defaults to `window.location.hostname` when available.\n   */\n  hostname?: string\n  /**\n   * Cookie path attribute when expiring cookies.\n   * @default `/`\n   */\n  path?: string\n  /**\n   * Override cookie header to scan (tests). Defaults to `document.cookie`.\n   */\n  cookieHeader?: string\n}\n\ninterface BrowserCookieStore {\n  cookie: string\n}\n\nfunction extractCookieNames(cookieHeader: string): string[] {\n  const names = new Set<string>()\n  for (const rawCookie of cookieHeader.split(';')) {\n    const trimmed = rawCookie.trim()\n    if (!trimmed) continue\n\n    const eqPos = trimmed.indexOf('=')\n    const name = (eqPos > -1 ? trimmed.slice(0, eqPos) : trimmed).trim()\n    if (name) {\n      names.add(name)\n    }\n  }\n  return Array.from(names)\n}\n\nfunction buildCookieDomainCandidates(hostname: string): string[] {\n  const normalized = hostname.trim().replace(/\\.$/, '').toLowerCase()\n  if (!normalized || isLocalHostname(normalized)) {\n    return []\n  }\n\n  const labels = normalized.split('.').filter(Boolean)\n  if (labels.length < 2) {\n    return [normalized, `.${normalized}`]\n  }\n\n  const domains = new Set<string>()\n  for (let index = 0; index <= labels.length - 2; index += 1) {\n    const domain = labels.slice(index).join('.')\n    domains.add(domain)\n    domains.add(`.${domain}`)\n  }\n  return Array.from(domains)\n}\n\nfunction getCookieStore(): BrowserCookieStore | null {\n  const candidate = (globalThis as { document?: BrowserCookieStore }).document\n  if (!candidate || typeof candidate.cookie !== 'string') {\n    return null\n  }\n  return candidate\n}\n\nfunction getRuntimeHostname(): string {\n  const fromWindow = (\n    globalThis as { window?: { location?: { hostname?: string } } }\n  ).window?.location?.hostname\n  if (typeof fromWindow === 'string') {\n    return fromWindow\n  }\n\n  const fromLocation = (\n    globalThis as { location?: { hostname?: string } }\n  ).location?.hostname\n  if (typeof fromLocation === 'string') {\n    return fromLocation\n  }\n\n  return ''\n}\n\nfunction writeExpiredCookie(\n  cookieStore: BrowserCookieStore,\n  name: string,\n  path: string,\n  domain?: string,\n) {\n  const domainClause = domain ? ` domain=${domain};` : ''\n  cookieStore.cookie =\n    `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; Max-Age=0; path=${path};${domainClause}`\n}\n\n/**\n * Clears Athena Auth / Better Auth browser cookies by name prefix.\n *\n * Safe to call from server/SSR: returns `[]` when `document` is unavailable.\n * Prefer this over local copies of cookie-clearing loops in app `signOut`\n * helpers.\n *\n * Compared to a minimal `document.cookie = …; path=/` wipe, this helper also:\n * - expires with `Max-Age=0`\n * - tries host + parent domain attributes (for subdomain deployments)\n * - skips domain attributes on localhost / local hostnames\n *\n * For the **app-host bridge** httpOnly cookie written by\n * `createAthenaAuthSessionBridgeHandlers`, also call\n * `clearAthenaAuthSessionOnAppHost()` from `@xylex-group/athena/next/client`\n * (that cookie is not always visible to `document.cookie`).\n *\n * @param options - Optional prefixes, hostname, path, or cookie header override\n * @returns Cookie names that matched and were targeted for deletion\n *\n * @example\n * ```ts\n * import { clearAuthCookies } from \"@xylex-group/athena/utils\"\n *\n * export async function signOut(options?: { redirect?: boolean }) {\n *   try {\n *     await authClient.signOut({ fetchOptions: { throw: true } })\n *   } catch (error) {\n *     console.error(\"[auth] Sign out failed:\", error)\n *   } finally {\n *     clearAuthCookies()\n *     if (options?.redirect !== false && typeof window !== \"undefined\") {\n *       window.location.href = \"/sign-in\"\n *     }\n *   }\n * }\n * ```\n */\nexport function clearAuthCookies(options: ClearAuthCookiesOptions = {}): string[] {\n  const cookieStore = getCookieStore()\n  if (!cookieStore) {\n    return []\n  }\n\n  const cookieHeader = options.cookieHeader ?? cookieStore.cookie\n  if (!cookieHeader?.trim()) {\n    return []\n  }\n\n  const prefixes = options.prefixes?.length\n    ? options.prefixes\n    : [...ATHENA_AUTH_COOKIE_PREFIXES]\n  const cookieNames = extractCookieNames(cookieHeader)\n  const namesToClear = cookieNames.filter((name) =>\n    prefixes.some((prefix) => name.startsWith(prefix)),\n  )\n  if (namesToClear.length === 0) {\n    return []\n  }\n\n  const path = options.path?.trim() || '/'\n  const hostname = options.hostname ?? getRuntimeHostname()\n  const domainCandidates = buildCookieDomainCandidates(hostname)\n\n  for (const name of namesToClear) {\n    writeExpiredCookie(cookieStore, name, path)\n    for (const domain of domainCandidates) {\n      writeExpiredCookie(cookieStore, name, path, domain)\n    }\n  }\n\n  return namesToClear\n}\n","const BOOLEAN_TRUE_TOKENS = new Set(['true', '1', 'yes', 'y', 'on'])\nconst BOOLEAN_FALSE_TOKENS = new Set(['false', '0', 'no', 'n', 'off'])\n\nfunction parseBooleanToken(value: string): boolean | null {\n  const normalized = value.trim().toLowerCase()\n  if (BOOLEAN_TRUE_TOKENS.has(normalized)) return true\n  if (BOOLEAN_FALSE_TOKENS.has(normalized)) return false\n  return null\n}\n\nexport function asString(value: unknown): string | null {\n  if (typeof value === 'number' && Number.isFinite(value)) return String(value)\n  if (typeof value === 'bigint') return value.toString()\n  if (typeof value !== 'string') return null\n\n  const normalized = value.trim()\n  return normalized.length > 0 ? normalized : null\n}\n\nexport function asBoolean(value: unknown): boolean {\n  if (typeof value === 'boolean') return value\n  if (typeof value === 'number') return value !== 0\n  if (typeof value === 'string') {\n    return parseBooleanToken(value) ?? false\n  }\n\n  return false\n}\n\nexport function asBooleanOrNull(value: unknown): boolean | null {\n  if (typeof value === 'boolean') return value\n  if (typeof value === 'number') return value !== 0\n  if (typeof value === 'string') {\n    return parseBooleanToken(value)\n  }\n\n  return null\n}\n\nexport function asRecord(value: unknown): Record<string, unknown> | null {\n  if (!value || typeof value !== 'object' || Array.isArray(value)) {\n    return null\n  }\n  return value as Record<string, unknown>\n}\n\nexport function asIdentifier(value: unknown): string | null {\n  if (typeof value === 'number' && Number.isFinite(value)) {\n    return String(value)\n  }\n  if (typeof value === 'bigint') {\n    return value.toString()\n  }\n  return asString(value)\n}\n\nexport function firstString(\n  record: Record<string, unknown> | null | undefined,\n  keys: readonly string[],\n): string | null {\n  if (!record) return null\n  for (const key of keys) {\n    const value = asString(record[key])\n    if (value) return value\n  }\n  return null\n}\n\nexport function readTrimmedString(value: unknown): string | null {\n  if (typeof value !== 'string') return null\n  const trimmed = value.trim()\n  return trimmed.length > 0 ? trimmed : null\n}\n\n/**\n * Trim a string value; return `undefined` when not a non-empty string.\n *\n * Unlike {@link asString}, does not coerce numbers/bigints.\n * Unlike {@link readTrimmedString}, returns `undefined` instead of `null`\n * (handy for optional fields and `??` defaults).\n */\nexport function asNonEmptyString(value: unknown): string | undefined {\n  if (typeof value !== 'string') {\n    return undefined\n  }\n\n  const normalized = value.trim()\n  return normalized.length > 0 ? normalized : undefined\n}\n\nexport function asNumber(value: unknown): number | null {\n  if (typeof value === 'number' && Number.isFinite(value)) return value\n  if (typeof value === 'string' && value.trim().length > 0) {\n    const parsed = Number(value)\n    if (Number.isFinite(parsed)) return parsed\n  }\n  return null\n}\n\nexport function asStringArray(value: unknown): string[] {\n  if (!Array.isArray(value)) return []\n  return value\n    .map(entry => (typeof entry === 'string' ? entry.trim() : ''))\n    .filter(entry => entry.length > 0)\n}\n","/**\n * Request header / Next.js helpers used by middleware and RSC session loaders.\n * Framework-agnostic (no Next imports).\n */\n\n/**\n * True when Next.js threw because the route used dynamic APIs during static\n * generation (`DYNAMIC_SERVER_USAGE` digest or matching message).\n *\n * Catch and rethrow (or handle) so Next can mark the route dynamic.\n */\nexport function isDynamicServerUsageError(error: unknown): boolean {\n  if (!error || typeof error !== 'object') {\n    return false\n  }\n\n  const err = error as { digest?: unknown; message?: unknown }\n  if (err.digest === 'DYNAMIC_SERVER_USAGE') {\n    return true\n  }\n\n  return (\n    typeof err.message === 'string' && err.message.includes('Dynamic server usage:')\n  )\n}\n\nexport interface GetOriginFromHeadersOptions {\n  /**\n   * When `x-forwarded-proto` / scheme is missing, use `http` if true else `https`.\n   * Typical: `process.env.NODE_ENV !== \"production\"`.\n   */\n  preferHttpWhenMissingProto?: boolean\n}\n\n/**\n * Reconstruct public origin from request headers (Origin, or Host + proto).\n *\n * Prefers `Origin`, then `x-forwarded-host` / `host` with\n * `x-forwarded-proto` (first value when comma-separated).\n */\nexport function getOriginFromHeaders(\n  headersList: {\n    get: (name: string) => string | null\n  },\n  options: GetOriginFromHeadersOptions = {},\n): string | null {\n  const origin = headersList.get('origin')?.trim()\n  if (origin) {\n    return origin\n  }\n\n  const hostRaw =\n    headersList.get('x-forwarded-host') ?? headersList.get('host')\n  const host = hostRaw?.split(',')[0]?.trim()\n  if (!host) {\n    return null\n  }\n\n  const protoRaw = headersList.get('x-forwarded-proto')\n  const protoFirst = protoRaw?.split(',')[0]?.trim().toLowerCase()\n  const proto =\n    protoFirst === 'http' || protoFirst === 'https'\n      ? protoFirst\n      : options.preferHttpWhenMissingProto\n        ? 'http'\n        : 'https'\n\n  return `${proto}://${host}`\n}\n","import type { EnvLike } from './athena-auth-url.ts'\n\n/**\n * Read the first non-empty trimmed environment variable from a name list.\n *\n * @param names - Candidate env keys in priority order\n * @param env - Optional env map (defaults to `process.env`)\n * @returns Trimmed value of the first key that is set and non-empty\n * @throws {Error} When none of the keys yield a non-empty value\n *\n * @example\n * ```ts\n * import { requireEnv } from \"@xylex-group/athena/utils\"\n *\n * const authUrl = requireEnv([\n *   \"ATHENA_AUTH_UPSTREAM_URL\",\n *   \"ATHENA_AUTH_URL\",\n *   \"NEXT_PUBLIC_ATHENA_AUTH_URL\",\n * ])\n * ```\n */\nexport function requireEnv(\n  names: readonly string[],\n  env?: EnvLike,\n): string {\n  if (!names.length) {\n    throw new Error(\n      'requireEnv() requires at least one environment variable name.',\n    )\n  }\n\n  const source = env ?? readProcessEnv()\n  for (const name of names) {\n    const value = source[name]?.trim()\n    if (value) {\n      return value\n    }\n  }\n\n  throw new Error(\n    `Missing required environment variable. Expected one of: ${names.join(', ')}`,\n  )\n}\n\n/**\n * Like {@link requireEnv}, but returns `undefined` instead of throwing when\n * none of the keys are set.\n */\nexport function readEnv(\n  names: readonly string[],\n  env?: EnvLike,\n): string | undefined {\n  if (!names.length) {\n    return undefined\n  }\n\n  const source = env ?? readProcessEnv()\n  for (const name of names) {\n    const value = source[name]?.trim()\n    if (value) {\n      return value\n    }\n  }\n  return undefined\n}\n\nfunction readProcessEnv(): EnvLike {\n  try {\n    const processEnv = (\n      globalThis as { process?: { env?: EnvLike } }\n    ).process?.env\n    return processEnv ?? {}\n  } catch {\n    return {}\n  }\n}\n","export function proxyRequestHeaders(request: Request): Headers {\n  const headers = new Headers(request.headers)\n  const requestUrl = new URL(request.url)\n  const proto = requestUrl.protocol.replace(/:$/u, '') || 'https'\n\n  // Let fetch set the upstream Host header, but keep the original public app\n  // origin available for auth servers that need to validate or generate links\n  // for Vercel preview domains behind this proxy.\n  headers.delete('host')\n  headers.set('x-forwarded-host', requestUrl.host)\n  headers.set('x-forwarded-proto', proto)\n  headers.set('x-forwarded-origin', requestUrl.origin)\n  headers.set('x-forwarded-uri', `${requestUrl.pathname}${requestUrl.search}`)\n\n  if (requestUrl.port) {\n    headers.set('x-forwarded-port', requestUrl.port)\n  } else {\n    headers.delete('x-forwarded-port')\n  }\n\n  return headers\n}\n","/**\n * Framework-agnostic active-organization bootstrap.\n *\n * Promoted from consumer apps (e.g. speedrun-formations) so product code only\n * supplies list/set-active + optional org selection policy.\n *\n * Does not call Athena Auth routes itself — inject your client's\n * `auth.organization.list` / `setActive` (or any compatible functions).\n */\n\nexport interface ActiveOrganizationSessionLike {\n  session?: {\n    activeOrganizationId?: string | null\n  } | null\n}\n\nexport interface OrganizationLike {\n  id: string\n}\n\nexport interface EnsureActiveOrganizationOptions<TOrganization extends OrganizationLike> {\n  listOrganizations: () => Promise<readonly TOrganization[]>\n  onError?: (error: unknown) => void\n  /**\n   * Choose which org to activate when the session has none.\n   * Default: first organization with a non-empty `id`.\n   */\n  selectOrganizationId?: (organizations: readonly TOrganization[]) => string | null\n  session: ActiveOrganizationSessionLike | null | undefined\n  setActiveOrganization: (organizationId: string) => Promise<unknown>\n}\n\nexport interface EnsureActiveOrganizationResult {\n  activeOrganizationId: string | null\n  didSetActiveOrganization: boolean\n}\n\nfunction normalizeOrganizationId(value: string | null | undefined): string | null {\n  if (typeof value !== 'string') {\n    return null\n  }\n  const normalized = value.trim()\n  return normalized.length > 0 ? normalized : null\n}\n\nfunction defaultSelectOrganizationId<TOrganization extends OrganizationLike>(\n  organizations: readonly TOrganization[],\n): string | null {\n  for (const organization of organizations) {\n    const id = normalizeOrganizationId(organization.id)\n    if (id) {\n      return id\n    }\n  }\n  return null\n}\n\n/**\n * Ensure the session has an active organization when memberships exist.\n *\n * - If `session.session.activeOrganizationId` is already set → return it (no network).\n * - Else list organizations; if empty → `{ activeOrganizationId: null, didSetActiveOrganization: false }`.\n * - Else select an id (custom or first) and call `setActiveOrganization`.\n * - List/set failures invoke `onError` and return unset (never throw).\n */\nexport async function ensureActiveOrganization<TOrganization extends OrganizationLike>(\n  options: EnsureActiveOrganizationOptions<TOrganization>,\n): Promise<EnsureActiveOrganizationResult> {\n  const currentActiveOrganizationId = normalizeOrganizationId(\n    options.session?.session?.activeOrganizationId,\n  )\n\n  if (currentActiveOrganizationId) {\n    return {\n      activeOrganizationId: currentActiveOrganizationId,\n      didSetActiveOrganization: false,\n    }\n  }\n\n  let organizations: readonly TOrganization[]\n  try {\n    organizations = await options.listOrganizations()\n  } catch (error) {\n    options.onError?.(error)\n    return {\n      activeOrganizationId: null,\n      didSetActiveOrganization: false,\n    }\n  }\n\n  if (organizations.length === 0) {\n    return {\n      activeOrganizationId: null,\n      didSetActiveOrganization: false,\n    }\n  }\n\n  const selectedOrganizationId = normalizeOrganizationId(\n    (options.selectOrganizationId ?? defaultSelectOrganizationId)(organizations),\n  )\n\n  if (!selectedOrganizationId) {\n    return {\n      activeOrganizationId: null,\n      didSetActiveOrganization: false,\n    }\n  }\n\n  try {\n    await options.setActiveOrganization(selectedOrganizationId)\n    return {\n      activeOrganizationId: selectedOrganizationId,\n      didSetActiveOrganization: true,\n    }\n  } catch (error) {\n    options.onError?.(error)\n    return {\n      activeOrganizationId: null,\n      didSetActiveOrganization: false,\n    }\n  }\n}\n","import 'server-only'\n\nimport type { AthenaAuthSessionResponse } from '../auth/types.ts'\nimport { mergeAthenaRequestContexts } from '../context/merge.ts'\nimport type { AthenaClientModelsInput } from '../schema/types.ts'\nimport {\n  createClient,\n  type AthenaClient,\n  type AthenaClientConfig,\n  type AthenaRequestContext,\n} from '../v3-client.ts'\nimport {\n  resolveNextRequestContext,\n  type AthenaServerRequestOptions,\n} from './shared.ts'\n\nexport interface AthenaServerContextOptions extends AthenaServerRequestOptions {\n  session?: AthenaAuthSessionResponse | null\n}\n\nexport interface AthenaResolvedServerContext {\n  request: AthenaRequestContext\n  session: AthenaAuthSessionResponse | null\n  userId: string | null\n  organizationId: string | null\n}\n\nexport async function resolveAthenaServerContext(\n  options: AthenaServerContextOptions = {},\n): Promise<AthenaResolvedServerContext> {\n  const request = await resolveNextRequestContext(options)\n  const session = options.session ?? null\n  const userId = session?.user?.id ?? null\n  const organizationId = session?.session?.activeOrganizationId ?? null\n\n  return {\n    request: {\n      ...request,\n      userId,\n      organizationId,\n    },\n    session,\n    userId,\n    organizationId,\n  }\n}\n\ntype AthenaBaseServerOptions = AthenaServerRequestOptions & {\n  session?: AthenaAuthSessionResponse | null\n}\n\n/**\n * Explicit server config: require url + key at the call site.\n */\nexport type AthenaExplicitServerConfig<\n  TModels extends AthenaClientModelsInput | undefined = undefined,\n> = AthenaBaseServerOptions &\n  AthenaClientConfig<TModels> & {\n    url: string\n    key: string\n  }\n\n/**\n * Environment server config: require an explicit env object (no silent global process.env).\n */\nexport type AthenaEnvironmentServerConfig<\n  TModels extends AthenaClientModelsInput | undefined = undefined,\n> = AthenaBaseServerOptions &\n  Omit<AthenaClientConfig<TModels>, 'url' | 'key'> & {\n    env: Record<string, string | undefined>\n  }\n\n/**\n * Flat Next server client options: client config fields + request context options.\n * Requires either `{ url, key }` or `{ env }`.\n */\nexport type AthenaServerClientConfig<\n  TModels extends AthenaClientModelsInput | undefined = undefined,\n> = AthenaExplicitServerConfig<TModels> | AthenaEnvironmentServerConfig<TModels>\n\n/**\n * Request-scoped Next server façade over {@link createClient}.\n *\n * Resolves cookies, bearer tokens, optional session identity, and cache policy\n * on every invocation, merges with any application-level context, then\n * materializes the client through the singular `createClient` primitive.\n *\n * Does not cache clients. Call once per Server Component / Server Action /\n * Route Handler request (or pass explicit requestHeaders/requestCookies).\n */\nexport async function createAthenaServerClient<\n  const TModels extends AthenaClientModelsInput | undefined = undefined,\n>(\n  options: AthenaServerClientConfig<TModels>,\n): Promise<AthenaClient<TModels>> {\n  const {\n    requestHeaders,\n    requestCookies,\n    forceNoCache,\n    session,\n    headers: requestScopedHeaders,\n    ...clientConfig\n  } = options\n\n  const resolved = await resolveAthenaServerContext({\n    requestHeaders,\n    requestCookies,\n    forceNoCache,\n    headers: requestScopedHeaders,\n    session,\n  })\n\n  const configuredContext = clientConfig.context\n\n  return createClient({\n    ...(clientConfig as AthenaClientConfig<TModels>),\n    context: async () => {\n      const configured =\n        typeof configuredContext === 'function'\n          ? await configuredContext()\n          : configuredContext\n      return mergeAthenaRequestContexts(configured, resolved.request)\n    },\n  })\n}\n\nexport {\n  resolveNextRequestContext,\n  type AthenaRequestCookiesBag,\n  type AthenaRequestCookiesInput,\n  type AthenaRequestHeadersBag,\n  type AthenaRequestHeadersInput,\n  type AthenaServerRequestOptions,\n} from './shared.ts'\n\nexport {\n  ATHENA_AUTH_SESSION_BRIDGE_ROUTE,\n  ATHENA_AUTH_SESSION_COOKIE_NAME,\n  ATHENA_AUTH_SESSION_COOKIE_NAMES,\n  clearAthenaAuthSessionOnAppHost,\n  createAthenaAuthSessionBridgeHandlers,\n  createAthenaAuthSessionBridgePathHandlers,\n  handleAthenaAuthSessionBridgeDelete,\n  handleAthenaAuthSessionBridgePost,\n  isAthenaAuthSessionBridgePath,\n  persistAthenaAuthSessionOnAppHost,\n  resolveSessionBridgePayload,\n  type AthenaAuthSessionBridgeClientOptions,\n  type AthenaAuthSessionBridgeOptions,\n  type AthenaAuthSessionBridgePathOptions,\n  type AthenaAuthSessionBridgePayload,\n  type AthenaAuthSessionBridgeSource,\n} from './session-bridge/index.ts'\n\nexport {\n  SESSION_COOKIE_PATTERNS,\n  hasAuthSessionCookie,\n} from '../cookies/session-cookie-detection.ts'\n\n/**\n * Server-side auth URL / session helpers commonly used in RSC, middleware,\n * and Route Handlers. Re-exported so Next apps can import from one entry.\n */\nexport {\n  ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_PARAM,\n  ATHENA_AUTH_DISABLE_COOKIE_CACHE_QUERY_VALUE,\n  ATHENA_AUTH_GET_SESSION_ABSOLUTE_PATH,\n  ATHENA_AUTH_GET_SESSION_PATH,\n  ATHENA_AUTH_PATH,\n  ATHENA_AUTH_UPSTREAM_ENV_KEYS,\n  ATHENA_AUTH_UPSTREAM_URL_ENV_NAMES,\n  ATHENA_AUTH_VERIFY_EMAIL_PATH,\n  ATHENA_SESSION_DATA_HEADER,\n  AUTH_SESSION_PATH,\n  DEFAULT_ATHENA_AUTH_ORIGIN,\n  DEFAULT_ATHENA_AUTH_UPSTREAM_URL,\n  DISABLE_COOKIE_CACHE_QUERY_PARAM,\n  DISABLE_COOKIE_CACHE_QUERY_VALUE,\n  LOCAL_DEV_ORIGIN,\n  SESSION_DATA_HEADER,\n  createFreshSessionLookupUrl,\n  isAbsoluteUrl,\n  normalizeAthenaAuthBaseUrl,\n  readAthenaAuthUpstreamUrlFromEnv,\n  resolveAthenaAuthClientBaseUrl,\n  resolveAthenaAuthRequestUrl,\n  resolveAthenaAuthUpstreamUrl,\n  resolveEmailVerificationCallbackUrl,\n  type AthenaAuthClientBaseUrlOptions,\n  type AthenaAuthUpstreamEnv,\n  type AthenaAuthUpstreamEnvKey,\n  type EnvLike,\n} from '../utils/athena-auth-url.ts'\n\nexport {\n  AUTH_DEFAULT_VIEW,\n  AUTH_MODE_REDIRECTS,\n  AUTH_MODE_SET,\n  AUTH_ROUTES,\n  AUTH_TWO_FACTOR_SEGMENT,\n  AUTH_VIEW_BY_SEGMENT,\n  AUTHENTICATED_REDIRECT_MODE_SET,\n  AUTHENTICATED_REDIRECT_VIEW_SET,\n  createAuthModeRedirects,\n  createAuthRoutes,\n  isAuthMode,\n  resolveAuthModeRedirect,\n  resolveAuthViewFromSegment,\n  shouldRedirectAuthenticatedAuthMode,\n  shouldRedirectAuthenticatedAuthView,\n  type AuthMode,\n  type AuthModeRedirects,\n  type AuthRoutes,\n  type AuthView,\n} from '../utils/auth-routes.ts'\n\nexport {\n  ATHENA_AUTH_COOKIE_PREFIXES,\n  clearAuthCookies,\n  type ClearAuthCookiesOptions,\n} from '../utils/auth-cookies.ts'\n\nexport {\n  asNonEmptyString,\n  asString,\n  readTrimmedString,\n} from '../utils/coercions.ts'\n\nexport {\n  getOriginFromHeaders,\n  isDynamicServerUsageError,\n  type GetOriginFromHeadersOptions,\n} from '../utils/request-origin.ts'\n\nexport { readEnv, requireEnv } from '../utils/require-env.ts'\n\nexport { proxyRequestHeaders } from '../utils/proxy-request-headers.ts'\n\nexport {\n  applyAthenaApiKeyHeaders,\n  applyAthenaAuthContextHeaders,\n  applyAthenaPgUriHeaders,\n  buildAthenaGatewayHeaders,\n  buildAthenaRequestHeaders,\n  buildServiceRequestHeaders,\n  hasHeaderIgnoreCase,\n  resolveHeaderValue,\n  resolveRequestHeaderOverrides,\n} from '../utils/athena-request-headers.ts'\n\nexport type {\n  AthenaRequestHeaderOverrideFields,\n  AthenaRequestHeaderProfile,\n  BuildAthenaRequestHeadersInput,\n  ResolvedRequestHeaderOverrides,\n} from '../utils/athena-request-headers.ts'\n\nexport {\n  ensureActiveOrganization,\n  type ActiveOrganizationSessionLike,\n  type EnsureActiveOrganizationOptions,\n  type EnsureActiveOrganizationResult,\n  type OrganizationLike,\n} from '../organization/ensure-active-organization.ts'\n"]}